Bouton sur image
Re: Bouton sur image
Hum je ne pense pas que Fred pense comme toi ??
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Bouton sur image
D'une part, il y a ce que pense Fred et, là-dessus, je me garderais bien de prétendre savoir ce qu'il (en) pense, je n'ai pas de don de mediumnité,
D'autre part, il y a ce qui est techniquement faisable.
Tout comme mon exemple ci-dessus démontrait, même si cela n'avait pas beaucoup de sens de procéder ainsi avec la disposition des gadgets telle que définie, que néanmoins leur superposition était tout à fait possible et que cela ne générait aucun bug, mon exemple ci-dessous va lui prouver que la superposition exacte de certains gadgets peut même avoir une utilité fonctionnelle réelle.

Aussi loin que je me souvienne, cette technique a souvent été employée (sans même l'usage de conteneurs) dans des codes pour substituer des gadgets à d'autres en fonction d'options au choix de l'utilisateur. D'aucuns préfèrent plutôt utiliser ResizeGadget en utilisant des coordonnées en dehors de la zone d'affichage de la fenêtre pour les cacher, même si je n'en comprends pas l'intérêt mais bon, là encore, c'est techniquement faisable.
Code : Tout sélectionner
Global.f DPIX=DesktopScaledX(100)/100,DPIY=DesktopScaledY(100)/100
LoadImage(0,#PB_Compiler_Home+"Examples\Sources\Data\PureBasic.bmp")
;
Procedure GestionAffichageConteneur()
Protected.u NoConteneur=GetWindowData(0),NouveauConteneur
Protected.s TexteBouton
Debug "ok"
Select NoConteneur
Case 0:NouveauConteneur=4:TexteBouton="Cacher conteneur 2"
Case 4:NouveauConteneur=0:TexteBouton="Cacher conteneur 1"
EndSelect
SetWindowData(0,NouveauConteneur)
HideGadget(NoConteneur,#True)
HideGadget(NouveauConteneur,#False)
SetGadgetText(8,TexteBouton)
EndProcedure
;
OpenWindow(0,0,0,200,240,"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ContainerGadget(0,0,0,400,155)
ButtonImageGadget(1,10,10,ImageWidth(0),ImageHeight(0),ImageID(0))
ButtonImageGadget(2,10,50,ImageWidth(0),ImageHeight(0),ImageID(0))
ImageGadget(3,10,110,168/DPIX,35/DPIY,ImageID(0))
CloseGadgetList()
ContainerGadget(4,0,0,400,155)
ButtonGadget(5,10,10,168,35,"Bouton normal 1")
ButtonGadget(6,10,50,168,35,"Bouton normal 2")
ButtonGadget(7,10,110,168,35,"Bouton normal 3")
CloseGadgetList()
ButtonGadget(8,10,160,168,35,"Cacher conteneur 1")
HideGadget(4,#True)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget()=8 And EventType()=#PB_EventType_LeftClick
GestionAffichageConteneur()
EndIf
EndSelect
ForEver
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Bouton sur image
Je ne sais pas si tu rencontres aussi le même problème pour les checkbox, mais comme Mesa l'évoque, ici une solution qui fonctionne aussi bien pour les CheckBoxGadget() que pour les OptionGadget().Bmld76 a écrit : Merci si vous avez une solution.
Petite parenthèse : Mon navigateur n'accepte que les liens HTTPS, donc tes images avec un lien Free en HTTP ne s'affichent pas et pour pouvoir les visualiser, c'est tout un beans (je ne pense pas être le seul dans ce cas...). N'hésite-pas à utiliser un hébergeur d'images en HTTPS à la place, y en a plein qui sont gratuits et pour lesquels il n'y a pas forcément besoin d'une inscription

Code : Tout sélectionner
CompilerIf #PB_Compiler_Version=602
CompilerError "Ce code ne fonctionne pas sous PB 6.02 à cause d'un bug !"
End
CompilerEndIf
;
Global CoulFondGadgets=CreateSolidBrush_(#White)
;
Procedure.l Callback(ArgID,ArgMessage,ArgWParam,ArgLParam)
Select ArgMessage
Case #WM_CTLCOLORSTATIC
Select GetDlgCtrlID_(ArgLParam)
Case 0 ; + Autres n° de gadgets si besoin
ProcedureReturn CoulFondGadgets
EndSelect
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0,0,0,200,100,"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetWindowColor(0,#White)
CheckBoxGadget(0,10,10,180,24,"Checkbox 1")
CheckBoxGadget(1,10,50,180,24,"Checkbox 2")
; SetGadgetColor(0,#PB_Gadget_BackColor,#White) ; Inutile car ne fonctionne pas !
SetWindowCallback(@Callback())
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
DeleteObject_(CoulFondGadgets)
Re: Bouton sur image
Je n'est pas parlé de gadget que l'on cache pour en mettre un autre au même endroit, évidement que cela fonctionne parfaitement, mais de gadget sur un autre gadget pour faire une combinaison des deux. (Ceci était possible en VB6) mais pas en PB.
Pour la coloration des checkbox, le code que tu propose est connus depuis longtemps.
Je l'ais en stock dans ma bibliothèque d'outils avec bien d'autres du même genre. pour ma part j'utilise un checkbox perso MLD_coche , le code a été donné avec l'application résistance électrique. Si j'ai donné le code cela veut dire que chacun peu l'utiliser a sa guise.
Bon We a tous
Pour la coloration des checkbox, le code que tu propose est connus depuis longtemps.
Je l'ais en stock dans ma bibliothèque d'outils avec bien d'autres du même genre. pour ma part j'utilise un checkbox perso MLD_coche , le code a été donné avec l'application résistance électrique. Si j'ai donné le code cela veut dire que chacun peu l'utiliser a sa guise.
Bon We a tous
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Bouton sur image
Ok, MLD ! J'arrête là l'échange qui polluerait inutilement ce topic.MLD a écrit : [...]
Un premier et unique contact entre nous ne laissait rien présager d'intéressant pour la suite et il semble que je ne me sois pas trompé.
Quand la mécompréhension et l'ego guident une discussion et n'acceptent pas de remarques, quand bien même ce ne serait que des précisions, rien ne sert de continuer à l'alimenter par des réponses ou des contre-argumentations au final inutiles et stériles.
Je me garderai donc à l'avenir de 'réagir' à quelque message émanant de toi.

Re: Bouton sur image
Tu ne manque pas de culot




Re: Bouton sur image
petit échantillons pour rire
Faite votrechoix







Code : Tout sélectionner
;====================================================
; Program: CheckBox Colors Demo
; Author: netmaestro
; Date: November 29, 2006
;====================================================
Global GadgetBkg = CreateSolidBrush_(#Green)
Global BoxBkg = CreateSolidBrush_(#Yellow)
Global Checkcolor = #Blue
Global Textcolor = #Red
Global NullPen = CreatePen_(#PS_NULL, 0, 0)
Procedure GadgetProc(hwnd, msg, wparam, lparam)
Shared oldproc
result = CallWindowProc_(oldproc, hwnd, msg, wparam, lparam)
Select msg
Case #WM_PAINT, #WM_LBUTTONUP, #WM_LBUTTONDOWN
dc = GetDC_(hwnd)
SelectObject_(dc, BoxBkg)
SelectObject_(dc, NullPen)
Rectangle_(dc,2,5,12,15)
If GetGadgetState(GetDlgCtrlID_(hwnd))
Restore check
For i = 1 To 21
Read x
Read y
SetPixel_(dc,x+2,y+5, CheckColor)
Next
EndIf
ReleaseDC_(hwnd, dc);
EndSelect
ProcedureReturn result
EndProcedure
Procedure WindowProc(hWnd, Msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
If Msg=#WM_CTLCOLORSTATIC
If GetDlgCtrlID_(lparam) = 1
SetBkMode_(wParam,#TRANSPARENT)
SetTextColor_(wParam, Textcolor)
result = GadgetBkg
EndIf
EndIf
ProcedureReturn result
EndProcedure
OpenWindow(0,0,0,260,160,"test",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
SetWindowCallback(@WindowProc())
CheckBoxGadget(1,10,20,245,20,"Checkbox gadget with a green background")
oldproc = SetWindowLong_(GadgetID(1),#GWL_WNDPROC,@GadgetProc())
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
DeleteObject_(GadgetBkg)
DeleteObject_(BoxBkg)
DeleteObject_(NullPen)
DataSection
check:
Data.l 7,1,6,2,7,2,1,3,5,3,6,3,7,3,1,4,2,4,4,4,5,4,6,4,1,5,2,5,3,5,4,5,5,5,2,6,3,6,4,6,3,7
EndDataSection
;***************************************************************************************************************************************************
Enumeration
#MainForm
#Panel
#Wrapper1
#Wrapper2
#Option
#Check
#AnotherCheck
EndEnumeration
Global YellowColor.i, GreenColor.i
YellowColor = CreateSolidBrush_($B2FCFD)
GreenColor = CreateSolidBrush_($B8F8CE)
Procedure WindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_CTLCOLORSTATIC
Select lparam
Case GadgetID(#Option)
SetBkMode_(wParam,#TRANSPARENT)
SetTextColor_(wParam, $0862F7)
Result = YellowColor
Case GadgetID(#Check)
SetBkMode_(wParam,#TRANSPARENT)
SetTextColor_(wParam, $0862F7)
Result = YellowColor
Case GadgetID(#AnotherCheck)
SetBkMode_(wParam,#TRANSPARENT)
;SetTextColor_(wParam, $0862F7)
SetTextColor_(wParam,$0000FF )
Result = GreenColor
EndSelect
EndSelect
ProcedureReturn Result
EndProcedure
Procedure MainformShow()
If OpenWindow(#Mainform, 422, 335, 400, 225, "Test", #PB_Window_SystemMenu)
PanelGadget(#Panel, 10, 20, 250, 180)
AddGadgetItem(#Panel, -1, "Tab #1")
TextGadget(#Wrapper1, 0,0,250,180,"")
SetGadgetColor(#Wrapper1, #PB_Gadget_BackColor, $B2FCFD)
OptionGadget(#Option, 35, 25, 230, 20, "Option Gadget")
CheckBoxGadget(#Check, 35, 50, 230, 20, "Check Gadget")
AddGadgetItem(#Panel, -1, "Tab #2")
TextGadget(#Wrapper2, 0,0,250,180,"")
SetGadgetColor(#Wrapper2, #PB_Gadget_BackColor, $B8F8CE)
CheckBoxGadget(#AnotherCheck,20,20,200,20, "Another Check")
CloseGadgetList()
EndIf
SetWindowCallback(@WindowCallback())
EndProcedure
MainFormShow()
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
;***********************************************************************************************************************************************************
Global GadgetBkg
GadgetBkg = CreateSolidBrush_(#Green)
Procedure WindowProc(hWnd, msg, wParam, lParam)
If msg=#WM_CTLCOLORSTATIC
Select GetDlgCtrlID_(lParam) ;; sweet API call: allows choosing gadgets by their number
Case 1 To 3; ce chiffre peut etre variable de 1 a XX
; uncomment those 2 if compiling WITHOUT XP support
; SetBkMode_(wParam,#TRANSPARENT)
; SetTextColor_(wParam, #Red)
ProcedureReturn gadgetBkg
EndSelect
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0,0,0,260,160,"test",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
SetWindowCallback(@WindowProc())
CheckBoxGadget(1,10,20,245,20,"Checkbox gadget with a green background")
OptionGadget(2,10,40,245,20,"Checkbox gadget with a green background")
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
DeleteObject_(GadgetBkg)
;******************************************************************************************************************************************
Global hBrush = CreateSolidBrush_(RGB(0,$8f,0))
Procedure WinProc(hwnd, msg, wparam, lparam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_CTLCOLORSTATIC
ProcedureReturn hBrush
EndSelect
ProcedureReturn result
EndProcedure
OpenWindow(0,0,0,100,120,"BUTTONSHADOW")
SetWindowColor(0,RGB($00,$8f,$00))
SetWindowCallback(@WinProc())
ButtonGadget(3,10,10,80,40,"Button")
CheckBoxGadget(4,10,60,80,20,"CheckBox")
OptionGadget(5,10,90,80,20,"Option")
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
;****************************************************************************************************************************************************
;========================================================
; CheckOptionColor() sets the foreground & background
; colours of the OptionGadget() and CheckBoxGadget()
;
; requires a window-level callback - for WINDOWS ONLY
;
; tested with PureBasic v5.31 on Windows 8.1 Pro (x64)
;
; by TI-994A - free to use, improve, share...
;
; 30th November 2014
;========================================================
Procedure WndProc(hWnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
If uMsg = #WM_CTLCOLORSTATIC
gadgetNo = GetProp_(lParam, "PB_ID")
fgColor = GetProp_(GadgetID(gadgetNo), "fgc")
bgColor = GetProp_(GadgetID(gadgetNo), "bgc")
If fgColor Or bgColor
SetTextColor_(wParam, fgColor)
SetBkMode_(wParam, #TRANSPARENT)
ProcedureReturn bgColor
EndIf
EndIf
ProcedureReturn result
EndProcedure
Procedure CheckOptionColor(gadgetNo, fgColor = #Black, bgColor = #White)
SetProp_(GadgetID(gadgetNo), "fgc", fgColor)
SetProp_(GadgetID(gadgetNo), "bgc", CreateSolidBrush_(bgColor))
OpenLibrary(0, "uxtheme.dll")
CallFunction(0, "SetWindowTheme", GadgetID(gadgetNo), @none, @none)
CloseLibrary(0)
EndProcedure
;demo code
Enumeration
#MainWindow
#option1
#option2
#option3
#check1
#check2
#check3
EndEnumeration
wFlags = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
OpenWindow(#MainWindow, #PB_Any, #PB_Any, 300, 150, "Options & Checks", wFlags)
SetWindowColor(#MainWindow, #Gray)
SetWindowCallback(@WndProc())
OptionGadget(#option1, 20, 15, 120, 30, "Red/Yellow")
CheckOptionColor(#option1, #Red, #Yellow)
OptionGadget(#option2, 160, 15, 120, 30, "Default/Cyan")
CheckOptionColor(#option2, #Null, #Cyan) ;default fore colour
CheckBoxGadget(#check1, 20, 55, 120, 30, "Blue/Default")
CheckOptionColor(#check1, #Blue) ;default back colour
CheckBoxGadget(#check2, 160, 55, 120, 30, "White/Red")
CheckOptionColor(#check2, #White, #Red)
OptionGadget(#option3, 160, 100, 120, 30, "Standard Option")
CheckBoxGadget(#check3, 20, 100, 120, 30, "Standard Check")
While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend





-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Bouton sur image
Réponse par MP !MLD a écrit : Tu ne manque pas de culot![]()
![]()
petit échantillons pour rire![]()
![]()
![]()
![]()
![]()
![]()
Re: Bouton sur image
Bonsoir
Je rentre de voyage et je viens de lire ces informations que je vais appliquer. Merci
Je rentre de voyage et je viens de lire ces informations que je vais appliquer. Merci
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
Re: Bouton sur image
Rien de concluant, ce ne sera pas beau sur windows, pas grave je n"utilises pas 

_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5
PureBasic 6.11 MacOS
Re: Bouton sur image
bjr Bmld76
Normalement pour afficher un bouton sur une image
il faut simplement utiliser la commande ci-dessous avant la commande bouton
Ps: voici ton code modifié
Cordialement
Normalement pour afficher un bouton sur une image
il faut simplement utiliser la commande ci-dessous avant la commande bouton
Code : Tout sélectionner
DisableGadget(Image du fond,1)
Code : Tout sélectionner
If OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateImage(0, 1400-20, 2200, 32, RGB(239, 239, 239)) And StartDrawing(ImageOutput(0))
Box(1,i,1400-20, 40, RGB(216, 244, 254))
StopDrawing()
ImageGadget(0, 0, 0, 200, 200, ImageID(0))
EndIf
DisableGadget(0,1)
ButtonGadget(1, 10, 10, 200, 20, "Standard Button")
Repeat
Event = WaitWindowEvent()
Gadget = EventGadget();
Type_Event= EventType()
Select Event
Case #PB_Event_Gadget
Select Gadget
Case 1
Debug "bouton"
EndSelect
EndSelect
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Bouton sur image
Bonjour Kernadec
Ce que tu fait est OK., Mais j'avais compris que c'était un boutonGadget sur une un Gadget ImageGaget. Et cela est impossible me semble t’il.
A plus
Ce que tu fait est OK., Mais j'avais compris que c'était un boutonGadget sur une un Gadget ImageGaget. Et cela est impossible me semble t’il.
A plus
Re: Bouton sur image
slt MLD
Mais un bouton sur un gadget "ImageGadget"
c'est le code qu'il donne dans son post de départ
sinon j ai rien compris a son problème
bon!, je vais me recoucher
Cordialement
Mais un bouton sur un gadget "ImageGadget"
c'est le code qu'il donne dans son post de départ

sinon j ai rien compris a son problème

bon!, je vais me recoucher

Cordialement
Re: Bouton sur image
bjr @MLD après la sieste
j 'ai repensé a ton message peut être que tu voulais dire un ButtonImage()
alors j'en ai ajouté un pour voir et voilà le code, si c'est autre chose, il me faut encore du sommeil
Cdt
j 'ai repensé a ton message peut être que tu voulais dire un ButtonImage()
alors j'en ai ajouté un pour voir et voilà le code, si c'est autre chose, il me faut encore du sommeil

Cdt
Code : Tout sélectionner
If OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If LoadImage(0, #PB_Compiler_Home + "/Examples/Sources/Data/PureBasic.bmp"): EndIf
If CreateImage(1, 1400-20, 2200, 32, RGB(239, 239, 239)) And StartDrawing(ImageOutput(1))
Box(1,i,1400-20, 100, RGB(216, 244, 254))
StopDrawing()
ImageGadget(0, 0, 0, 200, 200, ImageID(1))
EndIf
DisableGadget(0,1)
ButtonGadget(1, 10, 10, 200, 20, "Standard Button")
ButtonImageGadget(2, 10, 40, 180, 40, ImageID(0))
Repeat
Event = WaitWindowEvent(2)
Gadget = EventGadget();
Type_Event= EventType()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Debug "bouton"
Case 2
Debug "bouton img"
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
Re: Bouton sur image
Bonjour Kernadec
Ma sieste a été plus longue que la tienne.
Je confirme que ton code fonctionne parfaitement.
Je me suis un peu fourvoyé en pensant qu'un disabled sur l'imagegadget pouvait si une autre fenêtre en superposition a la première l'or son effacement
mangerais une partie de la surface de l'imagegadget.
J'ai fait un petit test:
Je retient la méthode. Merci Kernadec
a+
Michel
Ma sieste a été plus longue que la tienne.
Je confirme que ton code fonctionne parfaitement.
Je me suis un peu fourvoyé en pensant qu'un disabled sur l'imagegadget pouvait si une autre fenêtre en superposition a la première l'or son effacement
mangerais une partie de la surface de l'imagegadget.
J'ai fait un petit test:
Code : Tout sélectionner
Procedure im2()
OpenWindow(2, WindowX(0)+ 100, WindowY(0) +110, 222, 50, "ButtonGadgets 2")
EndProcedure
If OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If LoadImage(0, #PB_Compiler_Home + "/Examples/Sources/Data/PureBasic.bmp"): EndIf
If CreateImage(1, 1400-20, 2200, 32, RGB(239, 239, 239)) And StartDrawing(ImageOutput(1))
Box(1,i,1400-20, 100, RGB(216, 244, 254))
StopDrawing()
ImageGadget(0, 0, 0, 200, 200, ImageID(1))
EndIf
DisableGadget(0,1)
ButtonGadget(1, 10, 10, 200, 20, "Standard Button")
ButtonImageGadget(2, 10, 40, 180, 40, ImageID(0))
Repeat
Event = WaitWindowEvent(2)
Gadget = EventGadget();
Type_Event= EventType()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
im2()
Debug "bouton"
Case 2
Debug "bouton img"
CloseWindow(2)
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
a+
Michel