Boutons glissants [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Boutons glissants [Résolu]

Message par Kwai chang caine »

Bonjour a tous.

J'ai tenté de faire (avec l'aide de codes trouvé sur ce forum et le US) une fenetre avec des boutons qui arrivent de droite pour se loger à gauche, à leur place.
Normalement, il y a des images dans les boutons, mais je n'ai pas mis tout le code.Quoi qu'il en soit, avec ou sans images, j'ai le meme bleme.

Un demarrage sur 2 ou 3, les icones scintillent ou vibrent. 8O
Pas tout le temps, c'est aléatoire.
Une fois c'est niquel, une fois ça vibre. :mad:

Quelqu'un pourrait me dire d'ou cela viens.
J'ai joué sur les tempo et la vitesse d'avancement, ça améliore mais c'est pas top.

Code : Tout sélectionner

  Enumeration
   #FormStartER = 1 
  EndEnumeration
  
  Global Dim ListeLogicielsAutoriser.s(200,2)
  ListeLogicielsAutoriser(1, 1) = "Logiciel1.exe"
  ListeLogicielsAutoriser(2, 1) = "Logiciel2.exe"
  ListeLogicielsAutoriser(3, 1) = "Logiciel2.exe"
  
  Procedure.l myCallback(hWnd.l,uMsg.l,wParam.l,lParam.l) 
 
 Select uMsg 
 
  Case #WM_ERASEBKGND 
  
   ProcedureReturn 
  
  Case #WM_PAINT 
  
   For i = 1000 To 1002
    
    If IsGadget(i)
     x = GadgetX(i) 
     y = GadgetY(i) 
        
     SetRect_(Rect.RECT, x, y, x + GadgetWidth(i), y + GadgetHeight(i)) 
     ValidateRect_(hWnd,Rect) 
     RedrawWindow_(GadgetID(i),0,0,$407) 
    EndIf
   Next 
  
   PaintDesktop_(BeginPaint_(hWnd,ps.PAINTSTRUCT)) 
   EndPaint_(hWnd,ps) 
  
  Case #WM_SIZING,#WM_MOVING 
  
   InvalidateRect_(hWnd,0,1) 
 
 EndSelect 
 
 ProcedureReturn #PB_ProcessPureBasicEvents 
 
EndProcedure
  Procedure.s DerniereOccurence(CheminComplet$)
 
 NbreSlash = CountString(CheminComplet$, "\")
 
 If Right(CheminComplet$, 1) = "\"
  DerniereOccurence$ = StringField(CheminComplet$, NbreSlash, "\")
 Else
  DerniereOccurence$ = StringField(CheminComplet$, NbreSlash + 1, "\")
 EndIf
 
 ProcedureReturn DerniereOccurence$
 
EndProcedure

  x = 800 : y = 500
  HwndStartER = OpenWindow(#FormStartER, 216, 0, x, y, "StartER",#PB_Window_ScreenCentered| #PB_Window_WindowCentered)
  CreateGadgetList(WindowID(#FormStartER))
  SetWindowLong_(HwndStartER, #GWL_STYLE, GetWindowLong_(HwndStartER, #GWL_STYLE) & (~#WS_BORDER)) ; Fenetre sans barre de titre 
  SetWindowPos_(HwndStartER, 0, 0, 0, 0, 0, #SWP_NOSIZE|#SWP_NOMOVE|#SWP_SHOWWINDOW| #SWP_FRAMECHANGED) ; Fenetre sans barre de titre
  SetWindowCallback(@myCallback(),#FormStartER) 
  InvalidateRect_(WindowID(#FormStartER),0, 1) 
  n = 1
  
  While Trim(ListeLogicielsAutoriser(n, 1)) <> ""
   
   NomIcone$ = StringField(DerniereOccurence(ListeLogicielsAutoriser(n, 1)), 1, ".")
               
   ListeLogicielsAutoriser(n, 2) = Str(1000 + n)
   Extraction = ExtractIcon_(0, ListeLogicielsAutoriser(n, 1), 0)
   ButtonImageGadget(1000 + n, 25, 10 + (n * 70), 36, 36, Extraction)
   dx = 0 : dy = 0   
   ;                            Deplacement boutons
   ;                            *******************
   
   Repeat
    
    ResizeGadget(1000 + n, x - dx, (y + (n * 70)) - dy,#PB_Ignore, #PB_Ignore )
    Delay(1)
    RedrawWindow_(WindowID(#FormStartER), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW) 
    Delay(10)
    
    If dx < x - 20 
     dx + 20
    EndIf 
    
    If dy < y  
     dy + 20
    EndIf 
        
   Until dy >= y  And dx >= x - 20
   
   TextGadget(2000 + n, 20, 40 + (n * 70), 80, 18, NomIcone$,#PB_Text_Center|#PB_Text_Border)    
   SetGadgetColor(2000 + n, #PB_Gadget_BackColor, RGB(0,0,0))
   SetGadgetColor(2000 + n, #PB_Gadget_FrontColor, RGB(255,255,255))
   n + 1
   
  Wend
 
 Repeat  
  Evenement = WaitWindowEvent()
 Until Evenement = #PB_Event_CloseWindow  
Merci de votre aide
Bonne soirée
Dernière modification par Kwai chang caine le mer. 15/nov./2006 15:50, modifié 1 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Manque juste un bouton pour sortir de l'application !!
Heureusement il y a "Alt"+ "F4" !!

:lol:
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour BROSSDEN
Normalement, il y a des images dans les boutons, mais je n'ai pas mis tout le code
Tu n'a pas tout lu 8O
C'est pas un programme, c'est un morceau d'un grand code qui n'est pas au point.
Manque juste un bouton pour sortir de l'application !!
Heureusement il y a "Alt"+ "F4" !!
Pour arreter y'a le stop de pure, moi c'est comme ça que je fais, car la fenetre ne couvre pas tout l'ecran, et en plus elle se deplace.

Bref, ta remarque est judicieuse, mais ne m'a pas beaucoup aidé. :?

Je suis un peu déçu, je t'ai connu bien plus compétent et sympa.
Tu ne me dis meme pas si tu sais, si c'est trop dur pour toi, si c'est normal, d'ou ça pourrait venir d'apres toi, ......... ??? :cry:

De plus, bien que tu ne dise ni bonjour, ni aurevoir,
je te souhaite moi, une bonne journée.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Kwai chang caine a écrit :De plus, bien que tu ne dise ni bonjour, ni aurevoir,
je te souhaite moi, une bonne journée.
On ne peut pas se dire bonjour à chaque message non plus. L'espace mémoire n'est pas illimité.
Habituellement c'est celui qui ouvre le topic, qui commence par bonjour et c'est déjà pas si mal. 8O
Kwai chang caine a écrit :Je suis un peu déçu, je t'ai connu bien plus compétent et sympa.
La programmation ça demande du temps, qui se compte en années de pratique incompressibles, avec un diplôme ou non. 8O
Beaucoup surtout sur ce forum, serait capable de ressoudre un problème posé, mais c'est un truc qui peut nécessiter quelques heures voir plus. :roll:
Si une personne sympa a déjà recherché dans le secteur que tu demandes, il te donnera ce qu'il a fait. 8)
L'informatique compte beaucoup de secteurs, et chacun d'entre nous n'a pas accédé à chaques secteurs, ni ne les a approfondis pareils. 8O
Tout code source trouvé a débuté un jour par un écran vide, ce n'est pas parvenu par magie.
Kwai chang caine a écrit :Un demarrage sur 2 ou 3, les icones scintillent ou vibrent
Sans tester et rien que par habitude, bienvenu dans le monde de windows, ou tout scintille comme les étoiles au dessus de la crèche du petit Jésus. 8)
Même chez cro$oft, ils sont croyant comme pas dieux. :wink:

Sache bien que je t'apprécie Kwai chang caine, en admirant en plus ton parcours. 8O

J'avais collecté quelques liens, pour te montrer qu'un diplômé ou le fait d'être passé par l'école ne fait pas forcément le compétent, comme on pourrait le croire.

http://www.commentcamarche.net/forum/af ... t-d-un-jeu
http://www.commentcamarche.net/forum/af ... language-c
http://www.commentcamarche.net/forum/af ... -fin-etude
http://www.commentcamarche.net/forum/af ... ogramation

Si eux, ils ne savent pas ce qu'ils font en informatique, toi si, et tu peux me croire, c'est un sacré avantage. 8O

La programmation ça prend du temps et personne ne pourra y couper diplômé ou non. :wink:

@ peluche
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Tu as entierement raison LNA
Je sais tres bien que la prog prend du temps, j'en fais depuis 24 ans et j'ai pas beaucoup progréssé. :oops:
Ce n'est pas du tout sur le fait, que BROSDEN n'ai pas trouvé que j'ai été déçu.
Chacun sait ou ne sait pas.
C'est juste que je donne un bout de code, je dit bien que c'est un "BOUT" de code, et la seule aide que j'obtiens c'est que ya pas de bouton stop et basta. 8O.

Je pensais que chacun d'entre nous, meme une burne comme moi, sait arreter un prg avec ou sans bouton.
J'ai deja modifié ce bout de code pendant un 1/4 d'heure pour qu'il fonctionne sans le reste du prg pour vous le présenter.
Je ne pense pas qu'il etait utile de me rappeler qu'il n'y avait pas de stop alors que je n'en ai pas besoin par la suite.

Et comme tu le dis, si le fait d'etre poli bouffe de la place, que doit on dire pour le fait de faire un POST rien que pour dire une evidence sans aucune autre appreciation. 8O

Tu vois, tu me fais des remarques, mais derriere tu me fais comprendre que tu n'a pas la solution, et je trouve cela tres bien.
Tu as pris la peine de me faire comprendre et c'est une marque de respect que je te retourne.

Je sais donc qu'apparement c'est normal ce scintillement et que l'on ne peut pas y faire grand chose. :cry:

Ceci dit je n'ai rien contre personne, et surtout rien contre BROSDENT qui m'a dépanné déja plusieures fois, et quand on vous aide, il faut s'en rappeler. J'ai juste été surpris de sa reponse brutale et quasi inutile. :wink:


Au risque de prendre de la place je te souhaite une bonne journée LNA :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Anonyme

Message par Anonyme »

en tout cas chez moi ca rend bien ^^
je suis en 85hz avec mon écran cela n'a peut être pas de rapport mais bon...
Le scintillement que tu parles, c'est les textes en dessous des icones ?
je ne comprends pas trop les codes windows, peut être que tu accèdes à chaque fois au gadget pour lui attribuer le texte meme si il est arrivé à sa position?

@++
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Désolé Kwai chang caine, mais comme chez moi pas de problème de scintillement je n'ai pas vu d'autre problème que celui de la fermeture.
As tu le même problème avec le programme compiler parce que d'après ce que tu dis pour arrêter ton soft tu dois le lancer en "Debug" !
Denis

Bonne Jounée à tous
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Après teste sur une autre machien moins performate il est vrai qu'un léger scintillement se fasse ressentir mais le problème à été résolu par :

la ligne 84

Code : Tout sélectionner

RedrawWindow_(WindowID(#FormStartER), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
remplacée par :

Code : Tout sélectionner

  res = UpdateWindow_(WindowID(#FormStartER))
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour CPL

Je suis content de te parler.

Bah, en fait parfois ça marchait nickel, et parfois y'avais des traits sur les icones.

J'ai continué mes recherches et j'ai trouvé UpdateWindow_ à la place de RedrawWindow_
Ca paraissait un peu mieux, mais c'etait pas encore top.

Et tout d'un coup en t'ecrivant ce POST, tu va pas y croire, j'ai trouvé tout seul la soluce ..... :onfire: Je cherche depuis 9 heure ce matin.
Je viens donc d'effacer la question que je voulais te poser pour mettre la soluce. :wink:

Je crois que c'est à cause de la callback qui contient aussi un Redraw
Y'avait donc 2 redraw de suite ce qui generait les sautements car apparement la callback etait appellée qd on fait redraw.

J'ai encore pas tout compris aux callback. :?
J'ai mis une condition dans la callback, et roule ma poule.

Je te remercie de ton attention, ainsi que tous ceux qui m'ont lu.
Je vous souhaite une bonne journée.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Attention pour que la fonction API fonctionne bien il faut bien lui attribuer une valeur comme je l'ai fait : RES = Upda....

Deplus j'ai modifié d'autres paramètres pour rendre le mouvement plus fluide si cela t'interesse je peux te donner mes modifs !
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Toutes mes excuses BROSDEN :oops:

1/ J'ai posté a CPL sans voir que tu m'avais écris, ou alors on a posté ensemble.
Sinon tu pense bien que je t'aurais répondu. :oops:

2/J'ai cru que tu n'avais rien regardé, pour une fois que je me fend pour mettre un bout de code et l'adapter pour qu'il tourne en dehors de mes progs. :oops:

Evidement que je suis preneur, ce sera toujours interessant de voir les modifs puisque c'etait ma question premiere. :D
Par contre je ne sais pas si tu as lu, mais j'ai trouvé l'erreur, elle etait dans la callback apparement et aussi dans UpdateWindow qui apparement rend plus fluide.
Au boulot ça doit scintiller car je suis sous W2000 et surement pas avec une grosse becane.

J'y comprend rien dans ces callback, y'aurais pas un tuto pour débutant sur ce sujet ????

Aaaahhh, je retrouve le vrai BROSDEN toujours pret a aider comme beaucoup de ces membres.

Quand on est debutant on a 2 milliards de questions secondes, j'en épure 1 milliard en reflechissant, 900 millions en lisant le forum, 50 millions en cherchant ailleurs sur mr google, 49.99 millions en regardant les codes des autres, et il reste quelques questions sans reponses, c'est celles que je vous pose.
Mais autant dire que quand je la pose c'est que j'ai épuré toutes mes ressources et que j'ai les yeux mouillés et que je suis au bors de l'apoplexie. :lol:
Alors je suis susceptible un max, quand j'attend avec impatience une reponse d'un de mes supers héros favoris : (Flype, Dobro, Cpl.bator, Brosden, Dorian, Denis, Dr dri, Comtois, Chris, Erix14, Sph, etc ...pardon pour ceux que j'oublie) qui va me permettre de continuer mon code au lieu de tourner en rond, sur ce chemin chaotique et semé d'embuche qu'est la programmation.

La route est longue entre le commencement d'un programme et sa fin pour un programmeur cul de jatte comme ma personne. :lol:

Alors voila, c'est pas excusable, mais c'est compréhensible.:oops:
Qui n'a pas connu ça???.

Je te remercie pour tout et m'excuse à nouveau.
Passe une excelente soirée.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Anonyme

Message par Anonyme »

Tu es un vieux débutant alors :D j'étais pas née que tu programmais déjà :D

@++
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Ok Kwai chang caine tu auras cela demain car je suis rentré là et mes modifs sont sur ma machine au boulot !

Bye et bonne soirée aussi ainsi qu'à tous sur ce site trés sympa je trouve, qu'en pensez vous ?
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

@Cpl.bator
Tu es un vieux débutant alors j'étais pas née que tu programmais déjà
Bah ouai, je vois que tu es poli, tu pourrais meme dire un vieux jeune programmeur :lol:

Il faut dire que depuis l'age de 16 ans je me suis passionné a la prog, TO7 (Basic), Atari (GfaBasic), et pc (Qbasic + visualbasic + pure).

Mais, si j'arrive à faire de la prog de base, je n'ai toujours pas un niveau correct. :cry:

Mais maintenant grace a des professeurs comme vous tous, j'espere faire peter la banque :lol:

La prog c'est comme le baton de berger ................ya pas d'age pour en manger :lol: :lol:

Bonne journée à tous
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Voilà ton code légèrement modifié, dis moi si pour toi cela fonctionne aussi bien que sur ma machine. La vitesse peut être réglée avec la valeur de temps à la ligne 70.

Code : Tout sélectionner

  Enumeration
    #FormStartER = 1
  EndEnumeration
  
  Global Dim ListeLogicielsAutoriser.s(200,2)
  ListeLogicielsAutoriser(1, 1) = "Logiciel1.exe"
  ListeLogicielsAutoriser(2, 1) = "Logiciel2.exe"
  ListeLogicielsAutoriser(3, 1) = "Logiciel2.exe"
  
  
  Procedure.l myCallback(hWnd.l,uMsg.l,wParam.l,lParam.l)
    
    Select uMsg
      Case #WM_ERASEBKGND
        ProcedureReturn
        
      Case #WM_PAINT
        For i = 1000 To 1002
          If IsGadget(i)
            x = GadgetX(i)
            y = GadgetY(i)
            
            SetRect_(Rect.RECT, x, y, x + GadgetWidth(i), y + GadgetHeight(i))
            ValidateRect_(hWnd,Rect)
            res = RedrawWindow_(GadgetID(i),0,0,$407)
          EndIf
        Next
        PaintDesktop_(BeginPaint_(hWnd,ps.PAINTSTRUCT))
        EndPaint_(hWnd,ps)
        
      Case #WM_SIZING,#WM_MOVING
        InvalidateRect_(hWnd,0,1)
        
    EndSelect
    
    ProcedureReturn #PB_ProcessPureBasicEvents
    
  EndProcedure
  Procedure.s DerniereOccurence(CheminComplet$)
    NbreSlash = CountString(CheminComplet$, "\")
    If Right(CheminComplet$, 1) = "\"
      DerniereOccurence$ = StringField(CheminComplet$, NbreSlash, "\")
    Else
      DerniereOccurence$ = StringField(CheminComplet$, NbreSlash + 1, "\")
    EndIf
    ProcedureReturn DerniereOccurence$
  EndProcedure
  
  x = 800 : y = 500
  HwndStartER = OpenWindow(#FormStartER, 216, 0, x, y, "StartER",#PB_Window_ScreenCentered| #PB_Window_WindowCentered)
  CreateGadgetList(WindowID(#FormStartER))
  SetWindowLong_(HwndStartER, #GWL_STYLE, GetWindowLong_(HwndStartER, #GWL_STYLE) & (~#WS_BORDER)) ; Fenetre sans barre de titre
  SetWindowPos_(HwndStartER, 0, 0, 0, 0, 0, #SWP_NOSIZE|#SWP_NOMOVE|#SWP_SHOWWINDOW| #SWP_FRAMECHANGED) ; Fenetre sans barre de titre
  SetWindowCallback(@myCallback(),#FormStartER)
  InvalidateRect_(WindowID(#FormStartER),0, 1)
  n = 1
  
  While Trim(ListeLogicielsAutoriser(n, 1)) <> ""
    NomIcone$ = StringField(DerniereOccurence(ListeLogicielsAutoriser(n, 1)), 1, ".")
    ListeLogicielsAutoriser(n, 2) = Str(1000 + n)
    Extraction = ExtractIcon_(0, ListeLogicielsAutoriser(n, 1), 0)
    ButtonImageGadget(1000 + n, 25, 10 + (n * 70), 36, 36, Extraction)
    dx.f = 0 : dy.f = 0   
    ;                            Deplacement boutons
    ;                            *******************
    
    Repeat
      ResizeGadget(1000 + n, x - dx, (y + (n * 70)) - dy,#PB_Ignore, #PB_Ignore )
      res = UpdateWindow_(WindowID(#FormStartER))
      For temps=1 To 250000 :"Ne fait rien" :Next
      If dx < x - 43
        dx + 1
      EndIf
      If dy < y 
        dy + 0.7
      EndIf
    Until dy >= y  And dx >= x - 43
    TextGadget(2000 + n, 20, 40 + (n * 70), 80, 18, NomIcone$,#PB_Text_Center|#PB_Text_Border)   
    SetGadgetColor(2000 + n, #PB_Gadget_BackColor, RGB(0,0,0))
    SetGadgetColor(2000 + n, #PB_Gadget_FrontColor, RGB(255,255,255))
    n + 1
  Wend
  Repeat 
    res = UpdateWindow_(WindowID(#FormStartER))
    Delay(1000)
    End
    Evenement = WaitWindowEvent()
  Until Evenement = #PB_Event_CloseWindow 
Denis

Bonne Jounée à tous
Répondre