ListViewGadget style menu démarrer avec MouseWheel [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Kwai chang caine a écrit :Les mots n'ont que peu de poid devant ma reconnaissance.
Merci beaucoup de t'etre penché sur mon berceau de BB programmeur. 8)

Je vais pouvoir mettre ça en application lundi.
Je suis super content et je sent que mon chef partagera mon enthousiasme. :D

Bon pour ta femme, je suis en peu jaloux, mais bon je vais essayer d'apprendre à partager.
D'ailleurs ça me fait penser et tu va rire, que j'avais oublié d'en parler à la mienne. :D
C'est balot. :lol:

Encore merci sincerement de ta precieuse aide et evidemment à tous ceux de ce POST.
Que ferais-je sans vous ..........................surement pas de l'informatique :oops:
Pendant que tu fais de l'informatique, tu fais pas des posts à rallonge. C'est toujours ça de pris. C'est pour ça qu'on t'aide :mrgreen:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Faut bien que je cause, y'a plus grand monde en ce moment à part les "meubles" comme DOBRO :lol:

Allez allez CHRIS quitte ton masque de ronchon on t'as reconnu.
En fait t'es un gentil gars, chien qui aboie ne mord pas :D

J'pari meme que t'as dans ton tirroir un nez rouge pour faire des rigolades entre copains :D

Et encore heureusement que vous m'entendez pas y parait que je suis bavard :D
Ca c'est mon entourage qui le dit, mais j'en doute un peu ..... :roll:

Enfin j'taime bien quand meme :wink:
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message par RV »

Kwai chang caine a écrit :Enfin j'taime bien quand meme :wink:
Eh ben...Kwai...j'ai a peine tourné le dos (d'ailleurs avec toi je devrais faire gaffe :lol: ) que déjà tu me remplaces!!! 8O 8)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Eh ben...Kwai...j'ai a peine tourné le dos (d'ailleurs avec toi je devrais faire gaffe ) que déjà tu me remplaces!!!
:lol: :lol: :lol:

Zut !!!! pourtant j'metais bien caché dans cette rubrique :?
T'inquiete, j'ai de l'amour pour tout le monde, surtout mes amis.
Faut dire qu'a notre epoque c'est de plus en plus rare d'en avoir des vrais.
Le monde est amour......

En fin de compte, les hippies c'etait peut etre pas si nul :roll:

Au fait pas d'inquietude pour me tourner le dos, je me lave avec du gel douche, pas des savonnettes :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Je viens de modifier le code de RV à ma sauce.
Mais je voulais en plus que l'image de fond soit inclue dans l'application.
Et evidemment je n'y arrive pas vraiment.

Ca marche, mais comment faut il faire pour que le Create image connaisse la taille de l'image à charger,pour remplacer "CreateImage(#ImageFond, 2000,100) " ?? :roll:

Code : Tout sélectionner

; Code créé par RV
#win=1 
#ScrollBar = 10
#ImageGadget = 31
#ImageFond = 32

#FontArial = 40

Global event,eventtype 
Global selection=-1 

CreateImage(#ImageFond, 2000,100) 
CatchImage(#ImageGadget,?DebutImageData,?FinImageData - ?DebutImageData ) 

LoadFont(#FontArial,"arial",9,#PB_Font_Bold) 

Procedure Drawing(lig) 

 StartDrawing(ImageOutput(#ImageFond)) 
 Box(0,0,ImageWidth(#ImageFond),ImageHeight(#ImageFond),RGB(255,255,255)) 
 DrawImage(ImageID(#ImageGadget),0,0) 
 
 If lig > -1 
  Box(0,lig*14,ImageWidth(#ImageFond),14,RGB(0,200,0)) 
 EndIf 
 
 If selection > -1 
  Box(0,selection*14,ImageWidth(#ImageFond),14,RGB(0,0,150)) 
 EndIf 
 
 DrawingMode(1)
 DrawingFont(FontID(#FontArial)) 
 
 For i=0 To 71 
 
  If i=lig Or i=selection 
   coul=RGB(255,255,255) 
  Else 
   coul=RGB(0,0,0) 
  EndIf 
  
  txt$="Item "+Str(i) 
  DrawText(10,i*14,txt$,coul) 
  
 Next i 
   
 StopDrawing() 
 
 If IsGadget(#ImageGadget) 
  SetGadgetState(#ImageGadget,ImageID(#ImageFond)) 
 EndIf 
 
EndProcedure 

Procedure.l FocusItem() 

 PosScrollH.l = GetScrollPos_(GadgetID(#ScrollBar), #SB_HORZ) 
 PosScrollV.l = GetScrollPos_(GadgetID(#ScrollBar), #SB_VERT) 
 wmx=WindowMouseX(#win):wmy=WindowMouseY(#win) 
 ligne=Round((wmy+PosScrollV-GadgetY(#ScrollBar))/14,0) 
 
 If EventGadget()=#ImageGadget And eventtype=#PB_EventType_LeftClick 
  selection=ligne 
 EndIf 
 
 If wmx>GadgetX(#ScrollBar)+2 And wmx<GadgetX(#ScrollBar)+GadgetWidth(#ScrollBar)-4 And wmy>GadgetY(#ScrollBar)+2 And wmy<GadgetY(#ScrollBar)+GadgetHeight(#ScrollBar)-4 
  drawing(ligne) 
  SetWindowTitle(#win,"Ligne "+Str(Round((wmy+PosScrollV-GadgetY(#ScrollBar))/14,0))) 
 Else 
  drawing(-1) 
  SetWindowTitle(#win,"Hors gadget") 
 EndIf 
 
EndProcedure 

drawing(-1) 

OpenWindow(#win,100,100,242,400,"sdhfjghj",#PB_Window_SystemMenu) 
CreateGadgetList(WindowID(#win)) 
ScrollAreaGadget(#ScrollBar,10,10,ImageWidth(#ImageFond) + 22,380,ImageWidth(#ImageFond),ImageHeight(#ImageFond),10) 
ImageGadget(#ImageGadget,0,0,ImageWidth(#ImageFond),ImageHeight(#ImageFond),ImageID(#ImageFond)) 
CloseGadgetList() 

Repeat 

 event=WaitWindowEvent() 
 eventtype=EventType() 

 ancselection=selection 
 FocusItem() 

 If selection<>ancselection 
  MessageRequester("Info","Item "+Str(selection)) 
 EndIf 
      
Until event=#PB_Event_CloseWindow

End



DataSection

 DebutImageData :
 ;**************

 IncludeBinary "c:\sans titre.bmp"

FinImageData :
 ;************

EndDataSection
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message par RV »

Code : Tout sélectionner

CatchImage(#ImageGadget,?DebutImageData) 
CreateImage(#ImageFond,ImageWidth(#ImageGadget),ImageHeight(#ImageGadget))
En espérant t'avoir compris! :D

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

Message par Kwai chang caine »

Mon sauveur !!!!!!!
J'avais pas vu que tu etais caché dans mon ecran :lol:

J'ai un autre challenge à te demander, je voudrais que l'image qui est carré reste en fond et que le texte glisse.
Quand on actione la scrollbar le texte defile en haut ou en bas et l'image de fond reste la meme et au meme endroit.

C'est possible ça ???

Parce que ce que j'avais pas pensé c'est que quand j'ai noir d'item et que je descend la scrollbar, à un moment, l'image se termine et derriere c'est tout blanc :?

Merci beaucoup de ton aide
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message par RV »

J'avais pas vu que tu etais caché dans mon ecran
tu me vois :D ...tu me vois plus 8)
J'ai un autre challenge à te demander, je voudrais que l'image qui est carré reste en fond et que le texte glisse.
Quand on actione la scrollbar le texte defile en haut ou en bas et l'image de fond reste la meme et au meme endroit.

Code : Tout sélectionner

; Code créé par RV 
#win=1 
#ScrollBar = 10 
#ImageGadget = 31 
#ImageFond = 32 

#FontArial = 40 

Global event,eventtype 
Global selection=-1 
Global HautItem=12,nbitems=500

CatchImage(#ImageGadget,?DebutImageData,?FinImageData - ?DebutImageData ) 
CreateImage(#ImageFond, ImageWidth(#ImageGadget),ImageHeight(#ImageGadget)) 

LoadFont(#FontArial,"arial",9,#PB_Font_Bold) 

Procedure Drawing(lig) 
 StartDrawing(ImageOutput(#ImageFond)) 
 Box(0,0,ImageWidth(#ImageFond),ImageHeight(#ImageFond),RGB(255,255,255)) 
 DrawImage(ImageID(#ImageGadget),0,0) 
  
 DrawingMode(1) 
 DrawingFont(FontID(#FontArial)) 
  
 If IsGadget(#ScrollBar)
   num=-1
   itemmax=GetGadgetState(#ScrollBar)+(ImageWidth(#ImageFond)/HautItem)
   If itemmax>(nbitems-1)
    itemmax=(nbitems-1)
   EndIf
   For i=GetGadgetState(#ScrollBar) To itemmax 
    num=num+1    

    coul=RGB(0,0,0)
    If num=lig
     Box(0,num*HautItem,ImageWidth(#ImageFond),HautItem,RGB(0,200,0)) 
     coul=RGB(255,255,255) 
    EndIf 
    If i=selection
     Box(0,num*HautItem,ImageWidth(#ImageFond),HautItem,RGB(0,0,150)) 
     coul=RGB(255,255,255) 
    EndIf
    
    txt$="Item "+Str(i) 
    DrawText(10,(num*HautItem)+((HautItem-TextHeight(txt$))/2),txt$,coul) 
    
   Next i 
 EndIf
    
 StopDrawing() 
  
 If IsGadget(#ImageGadget) 
  SetGadgetState(#ImageGadget,ImageID(#ImageFond)) 
 EndIf 
  
EndProcedure 

Procedure.l FocusItem() 

 PosScrollH.l = GetScrollPos_(GadgetID(#ImageGadget), #SB_HORZ) 
 PosScrollV.l = GetScrollPos_(GadgetID(#ImageGadget), #SB_VERT) 
 wmx=WindowMouseX(#win):wmy=WindowMouseY(#win) 
 ligne=Round((wmy-GadgetY(#ImageGadget))/HautItem,0) 

 If EventGadget()=#ImageGadget And eventtype=#PB_EventType_LeftClick And ligne+GetGadgetState(#ScrollBar)<=(nbitems-1)
  selection=ligne+GetGadgetState(#ScrollBar)
 EndIf 
  
 If wmx>GadgetX(#ImageGadget)+2 And wmx<GadgetX(#ImageGadget)+GadgetWidth(#ImageGadget)-4 And wmy>GadgetY(#ImageGadget)+2 And wmy<GadgetY(#ImageGadget)+GadgetHeight(#ImageGadget)-4 And ligne+GetGadgetState(#ScrollBar)<=(nbitems-1)
  drawing(ligne) 
  SetWindowTitle(#win,"Item "+Str(ligne+GetGadgetState(#ScrollBar))) 
 Else 
  drawing(-1) 
  SetWindowTitle(#win,"Hors Items") 
 EndIf 
  
EndProcedure 

drawing(-1) 

OpenWindow(#win,100,100,800,700,"sdhfjghj",#PB_Window_SystemMenu) 
CreateGadgetList(WindowID(#win)) 
ImageGadget(#ImageGadget,0,0,ImageWidth(#ImageFond),ImageHeight(#ImageFond),ImageID(#ImageFond),#PB_Image_Border) 
ScrollBarGadget(#ScrollBar,GadgetX(#ImageGadget)+GadgetWidth(#ImageGadget),GadgetY(#ImageGadget),20,GadgetHeight(#ImageGadget),0,(nbitems-1),nbitems/HautItem,#PB_ScrollBar_Vertical)

Repeat 

 event=WaitWindowEvent() 
 eventtype=EventType() 

 ancselection=selection 
 FocusItem() 

 If selection<>ancselection 
  MessageRequester("Info","Item "+Str(selection)) 
 EndIf 
      
Until event=#PB_Event_CloseWindow 

End 



DataSection 

 DebutImageData : 
 ;************** 

 IncludeBinary "c:\sans titre.bmp" 

FinImageData : 
 ;************ 

EndDataSection
J'ai ajouté dans les Global un 'HautItem' (hauteur item) ainsi que 'nbitems' pour le nombre de lignes que tu dois afficher.
Donc si tu veux que ta fausse ListViewGadget se termine pile au nombre d'items alors il faut que nbitems*HautItem/ImageHeight(#ImageFond) retourne un nombre entier! ;)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Tu es un ange 8)

Décidément tu devrais vraiment te trouver un dimanche de libre :lol:

Tu va me dire moins on y connais et plus on est exigeant, est ce y'aurais un moyen pour que l'on voit défiler les items pendant que l'on descend la scrollbar et alors la tu atteindrais la perfection.

Si tu ne peux pas, te casse pas la tete tu m'a vraiment hyper dépanné.
Comment pourrais je un jour te remercier :roll:

Surement pas avec du code :cry:

Je quitte le PC ce soir par obligation, j'ai passé la journée à bidouiller ton super premier code et à tenter de le comprendre.
Demain je remet ça pour ton nouveau et ce sera le panard complet. :D

Moi j'avais bidouillé ça mais le fond bougeait avec l'ascenseur.
L'ideal serait un mix de ces deux codes, c'est à dire comme tu as fait mais avec les items qui défilent comme celui la.

Code : Tout sélectionner

; Code créé par RV 
#win=1 
#ScrollBar = 10 
#ImageGadget = 31 
#ImageFond = 32 

#FontArial = 40 

Global event,eventtype 
Global selection=-1 
UseJPEGImageDecoder()

Procedure Drawing(lig) 

 StartDrawing(ImageOutput(#ImageFond)) 
 Box(0,0,ImageWidth(#ImageFond),ImageHeight(#ImageFond),RGB(255,255,255)) 
 DrawImage(ImageID(#ImageGadget),0,0) 
  
 If lig > -1 
  Box(0,lig*14,ImageWidth(#ImageFond),14,RGB(0,200,0)) 
 EndIf 
  
 If selection > -1 
  Box(0,selection*14,ImageWidth(#ImageFond),14,RGB(0,0,150)) 
 EndIf 
  
 DrawingMode(1) 
 DrawingFont(FontID(#FontArial)) 
  
 For i=0 To 71 
  
  If i=lig Or i=selection 
   coul=RGB(255,255,255) 
  Else 
   coul=RGB(0,0,0) 
  EndIf 
  
  txt$="Item "+Str(i) 
  DrawText(10,i*14,txt$,coul) 
  
 Next i 
    
 StopDrawing() 
  
 If IsGadget(#ImageGadget) 
  SetGadgetState(#ImageGadget,ImageID(#ImageFond)) 
 EndIf 
  
EndProcedure 

Procedure.l FocusItem() 

 PosScrollH.l = GetScrollPos_(GadgetID(#ScrollBar), #SB_HORZ) 
 PosScrollV.l = GetScrollPos_(GadgetID(#ScrollBar), #SB_VERT) 
 wmx=WindowMouseX(#win):wmy=WindowMouseY(#win) 
 ligne=Round((wmy+PosScrollV-GadgetY(#ScrollBar))/14,0) 
  
 If EventGadget()=#ImageGadget And eventtype=#PB_EventType_LeftClick 
  selection=ligne 
 EndIf 
  
 If wmx>GadgetX(#ScrollBar)+2 And wmx<GadgetX(#ScrollBar)+GadgetWidth(#ScrollBar)-4 And wmy>GadgetY(#ScrollBar)+2 And wmy<GadgetY(#ScrollBar)+GadgetHeight(#ScrollBar)-4 
  drawing(ligne) 
  SetWindowTitle(#win,"Ligne "+Str(Round((wmy+PosScrollV-GadgetY(#ScrollBar))/14,0))) 
 Else 
  drawing(-1) 
  SetWindowTitle(#win,"Hors gadget") 
 EndIf 
  
EndProcedure 

OpenWindow(#win,100,100,242,255,"sdhfjghj",#PB_Window_SystemMenu) 
CreateGadgetList(WindowID(#win)) 
CatchImage(#ImageGadget,?DebutImageData) 
CreateImage(#ImageFond, ImageWidth(#ImageGadget), 1000)
LoadFont(#FontArial,"Arial",9,#PB_Font_Bold) 
drawing(-1)
ScrollAreaGadget(#ScrollBar, 5, 5, WindowWidth(#win) - 10, WindowHeight(#win) - 10, WindowWidth(#win) + 100, ImageHeight(#ImageFond), 10) 
ImageGadget(#ImageGadget, 0, 0, SansEffet, SansEffet, ImageID(#ImageFond)) 
CloseGadgetList() 

Repeat 

 event=WaitWindowEvent() 
 eventtype=EventType() 

 ancselection=selection 
 FocusItem() 

 If selection<>ancselection 
  MessageRequester("Info","Item "+ Str(selection)) 
 EndIf 
      
Until event=#PB_Event_CloseWindow 

End 

DataSection 

 DebutImageData : 
 ;************** 

 IncludeBinary "c:\fond2.jpg" 

FinImageData : 
 ;************ 

EndDataSection 
Voila l'image que j'utilise :

Image

Encore merci pour tout
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message par RV »

@Kwai
Décidément tu devrais vraiment te trouver un dimanche de libre
heu...on peut voir ça en mp? Ya du monde qui nous regarde! :oops:
Comment pourrais je un jour te remercier
En étant moins exigeant la prochaine fois! :roll: :D
Surement pas avec du code
Bah si...si tu me files la carte bleue avec! :D
est ce y'aurais un moyen pour que l'on voit défiler les items pendant que l'on descend la scrollbar
Le problème avec une ScrollBar c'est que quand tu cliques sur l'ascenseur, tant que tu ne le relaches pas tu ne connais pas le numéro d'étage (GetGadgetState(#ScrollBar))! :?
Par contre avec une TrackBar...ça marche!

Code : Tout sélectionner

; Code créé par RV 
#win=1 
#TrackBar = 10 
#ImageGadget = 31 
#ImageFond = 32 

#FontArial = 40 

Global event,eventtype 
Global LigneSelect=-1,LigneSurv=-1,LigneEcran=0 
Global HautItem=12,nbitems=500

UseJPEGImageDecoder()
CatchImage(#ImageGadget,?DebutImageData,?FinImageData - ?DebutImageData ) 
CreateImage(#ImageFond, ImageWidth(#ImageGadget),ImageHeight(#ImageGadget)) 

LoadFont(#FontArial,"arial",9,#PB_Font_Bold) 

Procedure Drawing() 
 StartDrawing(ImageOutput(#ImageFond)) 
 DrawImage(ImageID(#ImageGadget),0,0) 
  
 DrawingMode(1) 
 DrawingFont(FontID(#FontArial)) 
  
 If IsGadget(#TrackBar)
   num=-1
   itemmax=NbItems-GetGadgetState(#TrackBar)+(ImageWidth(#ImageFond)/HautItem)
   If itemmax>(NbItems-1)
    itemmax=(NbItems-1)
   EndIf
   For i=NbItems-GetGadgetState(#TrackBar)-(ImageWidth(#ImageFond)/HautItem) To itemmax 
    num=num+1    

    coul=RGB(0,0,0)
    If i=LigneSurv
     Box(0,num*HautItem,ImageWidth(#ImageFond),HautItem,RGB(0,200,0)) 
     coul=RGB(255,255,255) 
    EndIf 
    If i=LigneSelect
     Box(0,num*HautItem,ImageWidth(#ImageFond),HautItem,RGB(0,0,150)) 
     coul=RGB(255,255,255) 
    EndIf
    
    txt$="Item "+Str(i) 
    DrawText(10,(num*HautItem)+((HautItem-TextHeight(txt$))/2),txt$,coul) 
    
   Next i 
 EndIf
    
 StopDrawing() 
  
 If IsGadget(#ImageGadget) 
  SetGadgetState(#ImageGadget,ImageID(#ImageFond)) 
 EndIf 
  
EndProcedure 

Procedure.l FocusItem() 

 PosScrollH.l = GetScrollPos_(GadgetID(#ImageGadget), #SB_HORZ) 
 PosScrollV.l = GetScrollPos_(GadgetID(#ImageGadget), #SB_VERT) 
 wmx=WindowMouseX(#win):wmy=WindowMouseY(#win) 
 LigneEcran=Round((wmy-GadgetY(#ImageGadget))/HautItem,0)
 LigneSurv=LigneEcran+NbItems-GetGadgetState(#TrackBar)-(ImageWidth(#ImageFond)/HautItem)
 If LigneSurv>NbItems-1
  LigneSurv=-1
 EndIf
 
 If EventGadget()=#ImageGadget And eventtype=#PB_EventType_LeftClick And LigneSurv<=NbItems
  LigneSelect=LigneSurv
 EndIf 
  
 If wmx>GadgetX(#ImageGadget) And wmx<GadgetX(#ImageGadget)+GadgetWidth(#ImageGadget) And wmy>GadgetY(#ImageGadget) And wmy<GadgetY(#ImageGadget)+GadgetHeight(#ImageGadget)
  drawing()
  SetWindowTitle(#win,"LE="+Str(LigneEcran)+"  LSu="+Str(LigneSurv)+"  LSe="+Str(LigneSelect))
 Else 
  LigneSurv=-1
  drawing() 
  SetWindowTitle(#win,"Hors Gadget") 
 EndIf 
  
EndProcedure 

drawing()

OpenWindow(#win,100,100,ImageWidth(#ImageFond)+20,ImageHeight(#ImageFond),"sdhfjghj",#PB_Window_SystemMenu) 
CreateGadgetList(WindowID(#win)) 
ImageGadget(#ImageGadget,20,0,ImageWidth(#ImageFond),ImageHeight(#ImageFond),ImageID(#ImageFond),#PB_Image_Border) 
TrackBarGadget(#TrackBar,0,GadgetY(#ImageGadget),20,GadgetHeight(#ImageGadget),0,NbItems-(ImageHeight(#ImageFond)/HautItem),#PB_TrackBar_Vertical)
SetGadgetState(#TrackBar,NbItems-1)
Repeat 

 event=WaitWindowEvent(1) 
 eventtype=EventType() 

 ancLigneSelect=LigneSelect
 FocusItem() 

 If LigneSelect<>ancLigneSelect 
  MessageRequester("Info","Item "+Str(LigneSelect)) 
 EndIf 
      
Until event=#PB_Event_CloseWindow 

End 



DataSection 

 DebutImageData : 
 ;************** 

 IncludeBinary "c:\fond2.jpg" 

FinImageData : 
 ;************ 

EndDataSection
Bon courage pour la compréhension car tu as dû te rendre compte que je ne mettais aucune remarque dans le code :twisted:
Faut bien que tu bosses un peu! :wink:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

En étant moins exigeant la prochaine fois!
Ouais tu as raison, d'habitude, en une, voir deux demandes, j'ai ce que je veux.
Mais cette fois, ça fait 3 jours que je me galere, des que j'ai un effet, je me rend compte qu'un autre effet indesirable se produit :?

Ca m'a sincerement géné d'abuser de ta gentillesse,mais ça fait 3 jours que je fouine le "veb" sur tous les forums et que je trouve pas.
Le problème avec une ScrollBar c'est que quand tu cliques sur l'ascenseur, tant que tu ne le relaches pas tu ne connais pas le numéro d'étage (GetGadgetState(#ScrollBar))!
Tout à fait comme je te l'ai dit j'ai tenté de me débrouiller et essayer de courrir meme si je suis cul de jate.
Alors, j'ai lu sur le forum US par FRED hitself, que la scrollbar ne retournais son resultat qu'a l'evenement mouseup :?
Alors, j'ai trouvé des codes allemands à force de chercher qui corrigent cette oubli de FRED :D
Mon bonheur etait immense, mais ils sont tous les 2 en v3.94 :?
Bon pas grave me dis-je, y'a PbSourceconverter qui va réglé ça.
Eh ben que néni, pas moyen de les convertir en v4 :twisted:

Alors j'ai posté sur le forum US pour voir si une bonne ame, voulait bien me les convertir.
J'essaie de distribuer le boulot :oops:
J'ai tellement honte parfois d'etre si mauvais. :?
http://www.purebasic.fr/english/viewtopic.php?t=30135

Et j'avais l'espoir de pouvoir mixer ton génial code avec celui de DANILO ou Froggerprogger :D
Bon courage pour la compréhension car tu as dû te rendre compte que je ne mettais aucune remarque dans le code
Faut bien que tu bosses un peu!
T'inquiete pas, je bosse, je bosse, je torture tes codes.
Hier celui d'avant hier, et aujourd'hui celui d'hier mais comme tu le voit sans grands résultats :cry:
Tu va rire (j'suis pas sur en fait :roll:), au bout de 4 heures à lire ton deuxieme code, je m'etais pas apperçu que tu etait passé d'un ScrollAreaGadget a un ScrollGadget :oops:
Alors tu le vois, je sais pas si y'a de l'espoir :cry:

Merci pour ton nouveau code, c'est surprenant comme effet, cette fois on s'approche de la vérité.
Avec ce dernier code, et si j'arrive à trouver ou à me faire traduire en v4.0 l'un des 2 autres codes, j'arriverais peut etre à la jouissance totale :D
Et peut etre sans te redéranger :D

En tout cas, je me répete, mais je te remercie mille fois.

En attendant........"groumph,groumph", fu weux on monmon ?? :D

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

Message par Kwai chang caine »

Ayaih !!!!!
Maitre GNOZAL a eu la gentilesse de me traduire le code de DANILO en v4.0 :

Code : Tout sélectionner

;http://www.purebasic.fr/english/viewtopic.php?p=223770#223770

Procedure RealTimeScrollEvent(GadgetID,Pos) 
  ; Your stuff here, for each Scrollbar 
  Select GadgetID 
    
    Case GadgetID(1) ; Scrollbar 1 
      SetGadgetText(2,Str(Pos)) 
      
    Case GadgetID(3) ; Scrollbar 2 
      SetGadgetText(4,Str(Pos)) 
      
  EndSelect 
EndProcedure 

Procedure ScrollCallback(hwnd,msg,wParam,lParam) 
  ; dont change this procedure 
  Shared DK_OldScrollCallback 
  If ((msg = #WM_HSCROLL) Or (msg = #WM_VSCROLL)) And (wParam & $FFFF) = #SB_THUMBTRACK 
    RealTimeScrollEvent(lParam,(wParam >> 16) & $FFFF) 
  EndIf 
  If DK_OldScrollCallback 
    ProcedureReturn CallWindowProc_(DK_OldScrollCallback,hwnd,msg,wParam,lParam) 
  Else 
    ProcedureReturn 0 
  EndIf 
EndProcedure 

OpenWindow(0,200,200,200,200,"ScrollIt!",#PB_Window_SystemMenu) 
CreateGadgetList(WindowID(0)) 

ScrollBarGadget(1,20,20,15,160,1,1000,100,#PB_ScrollBar_Vertical) 
TextGadget(2,0,0,100,20,"1") 
ScrollBarGadget(3,40,20,100,15,1,8000,1) 
TextGadget(4,100,0,100,20,"1") 

DK_OldScrollCallback = SetWindowLong_(WindowID(0),#GWL_WNDPROC,@ScrollCallback()) 

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
Je suis en train d'éssayer de remplacer la TrackBar de ton dernier code par une scrollbar qui cette fois grace à cette procedure remonte sa position pendant le scrolling.

Ou la la c'est chaud !!! :twisted:
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message par RV »

Kwai chang caine a écrit :En attendant........"groumph,groumph", fu weux on monmon ?? :D

Image
:lol: :lol: :lol:

Impec le code de Danilo...je garde...il me reservira :D

Sinon pour ton problème...vois si enfin :roll: ça te va! :wink:

Code : Tout sélectionner

; Code créé par RV avec l'aide de Kwai chang caine :D
#win=1 
#ScrollBar = 10 
#ImageGadget = 31 
#ImageFond = 32 

#FontArial = 40 

Global event
Global LigneSelect=-1,LigneSurv=-1,NivScrollBar=0
Global HautItem=12,nbitems=500 


UseJPEGImageDecoder()
CatchImage(#ImageGadget,?DebutImageData,?FinImageData - ?DebutImageData ) 
CreateImage(#ImageFond, ImageWidth(#ImageGadget),ImageHeight(#ImageGadget)) 

LoadFont(#FontArial,"arial",9,#PB_Font_Bold) 

Procedure Drawing()
  StartDrawing(ImageOutput(#ImageFond)) 
    Box(0,0,ImageWidth(#ImageFond),ImageHeight(#ImageFond),RGB(255,255,255)) 
    DrawImage(ImageID(#ImageGadget),0,0) 
  
    If IsGadget(#ScrollBar) 
      DrawingMode(1) 
      DrawingFont(FontID(#FontArial)) 
      For i=0 To nbitems-1
       coul=RGB(0,0,0) 
       If i=LigneSurv 
        Box(0,(i-NivScrollBar)*HautItem,ImageWidth(#ImageFond),HautItem,RGB(0,200,0)) 
        coul=RGB(255,255,255) 
       EndIf 
       If i=LigneSelect 
        Box(0,(i-NivScrollBar)*HautItem,ImageWidth(#ImageFond),HautItem,RGB(0,0,150)) 
        coul=RGB(255,255,255) 
       EndIf 
       txt$="Item "+Str(i) 
       DrawText(10,((i-NivScrollBar)*HautItem)+((HautItem-TextHeight(txt$))/2),txt$,coul) 
      Next i 
    EndIf 
  StopDrawing() 
  
  If IsGadget(#ImageGadget) 
    SetGadgetState(#ImageGadget,ImageID(#ImageFond)) 
  EndIf 
EndProcedure

Procedure ScrollCallback(hwnd,msg,wParam,lParam) 
  ; dont change this procedure ;Oups...trop tard :D
  Shared DK_OldScrollCallback 
  If ((msg = #WM_HSCROLL) Or (msg = #WM_VSCROLL)) And (wParam & $FFFF) = #SB_THUMBTRACK 
    NivScrollBar=((wParam >> 16) & $FFFF)
    Drawing()
  EndIf   
  If DK_OldScrollCallback 
    ProcedureReturn CallWindowProc_(DK_OldScrollCallback,hwnd,msg,wParam,lParam) 
  Else 
    ProcedureReturn 0 
  EndIf 
EndProcedure 

Procedure.l FocusItem() 
 wmx=WindowMouseX(#win):wmy=WindowMouseY(#win) 
 LigneSurv=NivScrollBar+Round((wmy-GadgetY(#ImageGadget))/HautItem,0)

 If EventGadget()=#ScrollBar And GetGadgetState(#ScrollBar)<>NivScrollBar
  NivScrollBar=GetGadgetState(#ScrollBar)
 EndIf 

 If EventGadget()=#ImageGadget And EventType()=#PB_EventType_LeftClick And LigneSurv<=(nbitems-1)
  LigneSelect=LigneSurv
 EndIf 
  
 If wmx<=GadgetX(#ImageGadget) Or wmx>=GadgetX(#ImageGadget)+GadgetWidth(#ImageGadget) Or wmy<=GadgetY(#ImageGadget) Or wmy>=GadgetY(#ImageGadget)+GadgetHeight(#ImageGadget) Or LigneSurv>(nbitems-1) 
  LigneSurv=-1
 EndIf 
 Drawing()  
EndProcedure 

OpenWindow(#win,100,100,ImageWidth(#ImageFond)+24,ImageHeight(#ImageFond)+4,"sdhfjghj",#PB_Window_SystemMenu) 
  CreateGadgetList(WindowID(#win)) 
    ImageGadget(#ImageGadget,0,0,ImageWidth(#ImageFond),ImageHeight(#ImageFond),ImageID(#ImageFond),#PB_Image_Border) 
    ScrollBarGadget(#ScrollBar,GadgetX(#ImageGadget)+GadgetWidth(#ImageGadget),GadgetY(#ImageGadget),20,GadgetHeight(#ImageGadget),0,(nbitems-1),ImageHeight(#ImageGadget)/HautItem,#PB_ScrollBar_Vertical) 

DK_OldScrollCallback = SetWindowLong_(WindowID(#win),#GWL_WNDPROC,@ScrollCallback()) 

Repeat 

 event=WaitWindowEvent() 

 ancLigneSelect=LigneSelect 
 FocusItem()

 If LigneSelect<>ancLigneSelect 
  MessageRequester("Info","Item "+Str(LigneSelect)) 
 EndIf 
      
Until event=#PB_Event_CloseWindow 

End 



DataSection 
 DebutImageData : 
 IncludeBinary "c:\Fond2.jpg" 
 FinImageData : 
EndDataSection
PS: Correction du problème remarqué dans le code de Danilo, lorsqu'on cliquait sur la ScrollBarGadget mais en dehors de l'ascenseur le GetGadgetState() ne retourné pas la valeur :wink:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

PARFAIT !!!

Que dis-je parfait .... :oops:

GENIAL
GRANDIOSE
MIROBOLANT
FORMIDABLE
TITANESQUE
SPLENDIDE
ASTRONOMIQUE ....

Je n'en dirais pas plus, ce serais éxagérer :D

En un mot c'est exactement ce que je voulais :D

Que dis-je EXACTEMENT :oops:

PARFAITEMENT
PILE POIL ...

Les mots n'ont que peu de valeur devant le travail que tu as éffectué pour moi. 8)
Je te remercie encore.
Avoue quand meme que je suis exigeant mais tu es arrivé à un résultat auquel meme toi tu ne croyais pas arriver.

Non non ne me remercie pas :lol:

En tout cas c'est "beaucoup de la honneur" la premiere ligne de commentaire de ton code.
Je vais l'imprimer , l'accrocher au dessus de mon bureau et la relire de temps en temps quand je m'appercevrais pour la millieme fois que je suis une burne :D

Je te souhaite une excellente soirée à toi et ton épouse :? :lol:
Et excuse moi encore de mes exigeances bien au dessus de mes moyens :oops:

A bientot (dommage pour toi :D)
Ton serviteur
Burne chang caine
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message par RV »

:lol:

Si seulement tu pouvais coder autant que tu parles... :roll: :lol:

A plus... :wink:
Répondre