SetWindowCallBack() n'est pas portable...je voudrais le plus possible de compatibilite avec les 3 os.

Code : Tout sélectionner
#DI_Vertical = 0
#DI_Horizontal = 1
Structure FenetreInfo
No.I
X.I
Y.I
LI.I ; Largeur Interne
HI.I ; Hauteur Interne
Ti.S
Op.I
Evt.I ; Evénement fourni avec WindowEvent()
EndStructure
Procedure Rect(X.I, Y.I, L.I, H.I, C.I)
Line(X, Y, L, 0, C)
Line(X, Y, 0, H, C)
Line(X, Y + H - 1, L, 0, C)
Line(X + L - 1, Y, 0, H, C)
EndProcedure
Procedure.I DegradeImage(L.I, H.I, Dir.I)
Protected Img.I
Img = CreateImage(-1, L, H)
StartDrawing(ImageOutput(Img))
Select Dir
Case #DI_Vertical
Pas.F = L / 255.0 + 1.0
For i = 0 To 255
x.F = (i * L) / 255.0
Box(x, 0, pas, H, RGB(128 + i / 2, 128 + i / 2, 255) )
Next
Case #DI_Horizontal
Pas = H / 255.0 + 1.0
For i = 0 To 255
y.F = (i * H) / 255.0
Box(0, y, L, pas, RGB(128 + i / 2, 128 + i / 2, 255) )
Next
EndSelect
Rect(0, 0, L, H, #White)
Rect(1, 1, L - 2, H - 2, RGB(128, 128, 255) )
Rect(2, 2, L - 4, H - 4, #White)
StopDrawing()
ProcedureReturn Img
EndProcedure
Procedure FenetreTest(*Fenetre.FenetreInfo)
With *Fenetre
\No = OpenWindow(-1, \X, \Y, \LI, \HI, \Ti, \Op)
\HI = WindowHeight(\No)
ImageGauche = DegradeImage(128, \HI, #DI_Vertical)
ImageGadget(2, 0, 0, 128, \HI, ImageID(ImageGauche) )
SetWindowLong_(GadgetID(2), #GWL_STYLE, GetWindowLong_(GadgetID(2), #GWL_STYLE) | #WS_CLIPSIBLINGS)
ContainerGadget(1, 128, 0, \LI - 128, \HI)
ImageDroite = DegradeImage(\LI - 128, \HI, #DI_Horizontal)
ImageGadget(3, 0, 0, \LI - 128, \HI, ImageID(ImageDroite) )
SetWindowLong_(GadgetID(3), #GWL_STYLE, GetWindowLong_(GadgetID(2), #GWL_STYLE) | #WS_CLIPSIBLINGS)
ButtonGadget(4, 16, 16, 128, 48, "Quitter")
SetWindowPos_(GadgetID(3), GadgetID(4), -1, -1, -1, -1, #SWP_NOSIZE | #SWP_NOMOVE)
CloseGadgetList()
Repeat
Delay(1)
\Evt = WindowEvent()
Select \Evt
Case #PB_Event_Gadget
Select EventGadget()
Case 4
Break
EndSelect
EndSelect
Until \Evt = #PB_Event_CloseWindow
CloseWindow(\No)
EndWith
EndProcedure
Define Fenetre.FenetreInfo
With Fenetre
\X = 0
\Y = 0
\LI = 400
\HI = 300
\Ti = ""
\Op = $CF0001
EndWith
FenetreTest(Fenetre)
End
kernadec a écrit :bonjour Cpl.Bator
je ne comprend pas votre probleme clic?
cordialementCode : Tout sélectionner
OpenWindow(0, 0, 0, 550, 550, "Fenetre", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) CreateImage(0, WindowWidth(0), WindowHeight(0)) ContainerGadget(1, 20, 20, 512, 512 ,#PB_Container_Double) StartDrawing(ImageOutput(0)) DrawingMode(1) For n = 0 To 255 ;Box(0,n*6,512,3,RGB(n,n,n)) ;Box(0,n*5,512,5,RGB(255-n,255-n,255)) ;Box(0,n*10,512,10,RGB(255-n,255-n,255)) Box(0,n*8,512,8,RGB(255-n,255-n,255)) ;Box(0,n*3,512,3,RGB(n,n,255-n)) ;Box(0,n*3,512,3,RGB(n,255-n,n)) ;Box(0,n*3,512,3,RGB(255-n,n,n)) Next StopDrawing() ButtonGadget(2, 40, 40, 80, 20 ,"essai",#PB_Button_Toggle) ImageGadget(0,0,0,ImageWidth(0), ImageHeight(0), ImageID(0)) Repeat Event = WaitWindowEvent() Select Event Case #PB_Event_Gadget Select EventGadget() Case 2 Debug "Voila" EndSelect Case #PB_Event_CloseWindow End EndSelect ForEver
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Pour faire des programmes de test rapidement, il ne reste qu'a rajouter les gadgets et la gestion des évènements.
Enumeration
#Fond
#Fond_Decoupe_H
#Fond_Decoupe_B
#Fond_Decoupe_D
#Fond_Decoupe_G
#Bouton
EndEnumeration
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
; le fond
CreateImage(#Fond, 300, 300)
StartDrawing(ImageOutput(#Fond))
For n = 0 To 299
Line(0, n, 300, 0, RGB(170 + 80 * n / 300, 170 + 80 * n / 300, 170 + 80 * n / 300))
Next
StopDrawing()
; le bouton
CreateImage(#Bouton, 100, 25)
StartDrawing(ImageOutput(#Bouton))
Box(1, 1, 98, 23, $FFFFFF)
DrawingMode(#PB_2DDrawing_Transparent)
Texte.s = "Bonjour"
DrawText((100 - TextWidth(Texte)) / 2, (25 - TextHeight(Texte)) / 2, Texte, $000000)
StopDrawing()
; Affichage
; On découpe le fond pour faire un trou pour le bouton
GrabImage(#Fond, #Fond_Decoupe_H, 0, 0, 300, 200)
GrabImage(#Fond, #Fond_Decoupe_B, 0, 225, 300, 75)
GrabImage(#Fond, #Fond_Decoupe_G, 0, 200, 100, 25)
GrabImage(#Fond, #Fond_Decoupe_D, 200, 200, 100, 25)
; Fond
ImageGadget(#Fond_Decoupe_H, 0, 0, 300, 200, ImageID(#Fond_Decoupe_H))
ImageGadget(#Fond_Decoupe_B, 0, 225, 300, 75, ImageID(#Fond_Decoupe_B))
ImageGadget(#Fond_Decoupe_G, 0, 200, 100, 25, ImageID(#Fond_Decoupe_G))
ImageGadget(#Fond_Decoupe_D, 200, 200, 100, 25, ImageID(#Fond_Decoupe_D))
; Bouton
ImageGadget(#Bouton, 100, 200, 100, 25, ImageID(#Bouton))
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case #Bouton
Select EventType()
Case #PB_EventType_LeftClick
Debug "Clic gauche sur le bouton"
EndSelect
Case #Fond_Decoupe_H, #Fond_Decoupe_B, #Fond_Decoupe_D, #Fond_Decoupe_G
Select EventType()
Case #PB_EventType_LeftClick
Debug "Clic gauche sur le fond"
Case #PB_EventType_RightClick
Debug "Clic droit sur le fond"
EndSelect
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Pour faire des programmes de test rapidement, il ne reste qu'a rajouter les gadgets et la gestion des évènements.
Enumeration
#Fond
#Fond_Decoupe_H
#Fond_Decoupe_B
#Fond_Decoupe_D
#Fond_Decoupe_G
#Bouton
#Bouton1
EndEnumeration
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
; le fond
CreateImage(#Fond, 300, 300)
StartDrawing(ImageOutput(#Fond))
For n = 0 To 299
Line(0, n, 300, 0, RGB(170 + 80 * n / 300, 170 + 80 * n / 300, 170 + 80 * n / 300))
Next
StopDrawing()
font=LoadFont(0,"system",8)
; le bouton
CreateImage(#Bouton, 100, 25)
StartDrawing(ImageOutput(#Bouton))
SetGadgetFont(#PB_Default, font)
;Box(1, 1, 98, 23, $FFFFFF)
Box(1, 1, 98, 23,RGB(243,243,243))
DrawingMode(#PB_2DDrawing_Transparent)
Texte.s = "Bonjour"
DrawText((100 - TextWidth(Texte)) / 2, (34 - TextHeight(Texte)) / 4, Texte, $000000)
StopDrawing()
; Affichage
; On découpe le fond pour faire un trou pour le bouton
GrabImage(#Fond, #Fond_Decoupe_H, 0, 0, 300, 200)
GrabImage(#Fond, #Fond_Decoupe_B, 0, 225, 300, 75)
GrabImage(#Fond, #Fond_Decoupe_G, 0, 200, 100, 25)
GrabImage(#Fond, #Fond_Decoupe_D, 200, 200, 100, 25)
; Fond
ImageGadget(#Fond_Decoupe_H, 0, 0, 300, 200, ImageID(#Fond_Decoupe_H))
ImageGadget(#Fond_Decoupe_B, 0, 225, 300, 75, ImageID(#Fond_Decoupe_B))
ImageGadget(#Fond_Decoupe_G, 0, 200, 100, 25, ImageID(#Fond_Decoupe_G))
ImageGadget(#Fond_Decoupe_D, 200, 200, 100, 25, ImageID(#Fond_Decoupe_D))
; Bouton
ButtonGadget(#Bouton1, 100, 200, 100, 25, "Bonjour")
ImageGadget(#Bouton, 100, 200, 100, 25, ImageID(#Bouton))
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case #Bouton ,#bouton1
Select EventType()
Case #PB_EventType_LeftClick
Debug "Clic gauche sur le bouton"
EndSelect
Case #Fond_Decoupe_H, #Fond_Decoupe_B, #Fond_Decoupe_D, #Fond_Decoupe_G
Select EventType()
Case #PB_EventType_LeftClick
Debug "Clic gauche sur le fond"
Case #PB_EventType_RightClick
Debug "Clic droit sur le fond"
EndSelect
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Pour faire des programmes de test rapidement, il ne reste qu'a rajouter les gadgets et la gestion des évènements.
Enumeration
#Fond
#Fond_Decoupe_H
#Fond_Decoupe_B
#Fond_Decoupe_D
#Fond_Decoupe_G
#Bouton
#Bouton_Survol
EndEnumeration
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
; le fond
CreateImage(#Fond, 300, 300)
StartDrawing(ImageOutput(#Fond))
For n = 0 To 299
Line(0, n, 300, 0, RGB(170 + 80 * n / 300, 170 + 80 * n / 300, 170 + 80 * n / 300))
Next
StopDrawing()
; le bouton
CreateImage(#Bouton, 100, 25)
StartDrawing(ImageOutput(#Bouton))
Box(1, 1, 98, 23, $FFFFFF)
DrawingMode(#PB_2DDrawing_Transparent)
Texte.s = "Bonjour"
DrawText((100 - TextWidth(Texte)) / 2, (25 - TextHeight(Texte)) / 2, Texte, $000000)
StopDrawing()
CreateImage(#Bouton_Survol, 100, 25)
StartDrawing(ImageOutput(#Bouton_Survol))
Box(1, 1, 98, 23, $00FF00)
DrawingMode(#PB_2DDrawing_Transparent)
Texte.s = "Au revoir"
DrawText((100 - TextWidth(Texte)) / 2, (25 - TextHeight(Texte)) / 2, Texte, $000000)
StopDrawing()
; Affichage
; On découpe le fond pour faire un trou pour le bouton
GrabImage(#Fond, #Fond_Decoupe_H, 0, 0, 300, 200)
GrabImage(#Fond, #Fond_Decoupe_B, 0, 225, 300, 75)
GrabImage(#Fond, #Fond_Decoupe_G, 0, 200, 100, 25)
GrabImage(#Fond, #Fond_Decoupe_D, 200, 200, 100, 25)
; Fond
ImageGadget(#Fond_Decoupe_H, 0, 0, 300, 200, ImageID(#Fond_Decoupe_H))
ImageGadget(#Fond_Decoupe_B, 0, 225, 300, 75, ImageID(#Fond_Decoupe_B))
ImageGadget(#Fond_Decoupe_G, 0, 200, 100, 25, ImageID(#Fond_Decoupe_G))
ImageGadget(#Fond_Decoupe_D, 200, 200, 100, 25, ImageID(#Fond_Decoupe_D))
; Bouton
ImageGadget(#Bouton, 100, 200, 100, 25, ImageID(#Bouton))
Repeat
Event = WaitWindowEvent()
Select Event
Case #WM_MOUSEMOVE
x = WindowMouseX(0)
y = WindowMouseY(0)
If x >= GadgetX(#Bouton) And x < GadgetX(#Bouton) + GadgetWidth(#Bouton) And y >= GadgetY(#Bouton) And y < GadgetY(#Bouton) + GadgetHeight(#Bouton)
If Bouton_Actif = 0
Bouton_Actif = 1
SetGadgetState(#Bouton, ImageID(#Bouton_Survol))
EndIf
ElseIf Bouton_Actif
Bouton_Actif = 0
SetGadgetState(#Bouton, ImageID(#Bouton))
EndIf
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case #Bouton
Select EventType()
Case #PB_EventType_LeftClick
Debug "Clic gauche sur le bouton"
EndSelect
Case #Fond_Decoupe_H, #Fond_Decoupe_B, #Fond_Decoupe_D, #Fond_Decoupe_G
Select EventType()
Case #PB_EventType_LeftClick
Debug "Clic gauche sur le fond"
Case #PB_EventType_RightClick
Debug "Clic droit sur le fond"
EndSelect
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Pour faire des programmes de test rapidement, il ne reste qu'a rajouter les gadgets et la gestion des évènements.
Enumeration
#Fond
#Fond_Decoupe_H
#Fond_Decoupe_B
#Fond_Decoupe_D
#Fond_Decoupe_G
#Bouton
#Bouton_Survol
EndEnumeration
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
; le fond
CreateImage(#Fond, 300, 300)
StartDrawing(ImageOutput(#Fond))
For n = 0 To 299
Line(0, n, 300, 0, RGB(170 + 80 * n / 300, 170 + 80 * n / 300, 170 + 80 * n / 300))
Next
StopDrawing()
; le bouton
CreateImage(#Bouton, 100, 25)
StartDrawing(ImageOutput(#Bouton))
Box(1, 1, 98, 23, $FFFFFF)
DrawingMode(#PB_2DDrawing_Transparent)
Texte.s = "Bonjour"
DrawText((100 - TextWidth(Texte)) / 2, (25 - TextHeight(Texte)) / 2, Texte, $000000)
StopDrawing()
CreateImage(#Bouton_Survol, 100, 25)
StartDrawing(ImageOutput(#Bouton_Survol))
Box(1, 1, 98, 23, $00FF00)
DrawingMode(#PB_2DDrawing_Transparent)
Texte.s = "Au revoir"
DrawText((100 - TextWidth(Texte)) / 2, (25 - TextHeight(Texte)) / 2, Texte, $000000)
StopDrawing()
; Affichage
; On découpe le fond pour faire un trou pour le bouton
GrabImage(#Fond, #Fond_Decoupe_H, 0, 0, 300, 200)
GrabImage(#Fond, #Fond_Decoupe_B, 0, 225, 300, 75)
GrabImage(#Fond, #Fond_Decoupe_G, 0, 200, 100, 25)
GrabImage(#Fond, #Fond_Decoupe_D, 200, 200, 100, 25)
; Fond
ImageGadget(#Fond_Decoupe_H, 0, 0, 300, 200, ImageID(#Fond_Decoupe_H))
ImageGadget(#Fond_Decoupe_B, 0, 225, 300, 75, ImageID(#Fond_Decoupe_B))
ImageGadget(#Fond_Decoupe_G, 0, 200, 100, 25, ImageID(#Fond_Decoupe_G))
ImageGadget(#Fond_Decoupe_D, 200, 200, 100, 25, ImageID(#Fond_Decoupe_D))
; Bouton
ImageGadget(#Bouton, 100, 200, 100, 25, ImageID(#Bouton))
Repeat
Event = WaitWindowEvent(50)
If Souris_X <> WindowMouseX(0) Or Souris_Y <> WindowMouseY(0)
Souris_X = WindowMouseX(0)
Souris_Y = WindowMouseY(0)
If Souris_X >= GadgetX(#Bouton) And Souris_X < GadgetX(#Bouton) + GadgetWidth(#Bouton) And Souris_Y >= GadgetY(#Bouton) And Souris_Y < GadgetY(#Bouton) + GadgetHeight(#Bouton)
If Bouton_Actif = 0
Bouton_Actif = 1
SetGadgetState(#Bouton, ImageID(#Bouton_Survol))
EndIf
ElseIf Bouton_Actif
Bouton_Actif = 0
SetGadgetState(#Bouton, ImageID(#Bouton))
EndIf
EndIf
Select Event
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case #Bouton
Select EventType()
Case #PB_EventType_LeftClick
Debug "Clic gauche sur le bouton"
EndSelect
Case #Fond_Decoupe_H, #Fond_Decoupe_B, #Fond_Decoupe_D, #Fond_Decoupe_G
Select EventType()
Case #PB_EventType_LeftClick
Debug "Clic gauche sur le fond"
Case #PB_EventType_RightClick
Debug "Clic droit sur le fond"
EndSelect
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow