Page 1 sur 2
image de fond
Publié : mer. 24/août/2016 11:10
par ChaudEf
Bonjour, j'essaye de mettre une iamge de fond a ma fenetre, mais elle vient devant et je ne peux pas metre des choses dessus.
il y a il un moyen pour la mettre derriere? je parle de l'editeur de fenetre
merci
Re: image de fond
Publié : mer. 24/août/2016 11:28
par falsam
Tu ne pourras pas le faire avec l'éditeur de formulaire ni même en codant nativement. Il y aura superposition des gadgets et certains risquent de ne plus être accessibles.
Re: image de fond
Publié : mer. 24/août/2016 11:40
par Ar-S
Sans éditeur et pour windows uniquement... (utilisation d' API)
Code : Tout sélectionner
; ----------------------------------------------------
; Petites Macros pour simplifier la lisibilité du code
; ----------------------------------------------------
Macro SetBackgroundImage(MyWindowID,MyImage)
; API créant la brosse de l'image
brush = CreatePatternBrush_(MyImage)
; On dessine l'image au fond de la fenêtre via un autre API
SetClassLong_(WindowID(MyWindowID),#GCL_HBRBACKGROUND,brush)
EndMacro
Macro DrawFlag(c1,c2,c3)
Box(0, 0, 90, 296,c1)
Box(90, 0, 90, 296,c2)
Box(180, 0, 90, 296,c3)
EndMacro
; PROGRAMME PRINCIPAL
; ----------------------------------------------------
; Création de l'image du drapeau
; ----------------------------------------------------
image = CreateImage(0,296,296,32,$0)
StartDrawing(ImageOutput(0))
DrawFlag($FF0000,$FFFFFF,$0000FF)
StopDrawing()
If OpenWindow(0, 0, 0, 270, 296, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetBackgroundImage(0,Image)
ButtonGadget (1, 40, 170, 200, 30, "Fermer")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Quite=1
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow Or Quite = 1
; a la fin de ton prog, on libère la brosse
DeleteObject_(brush)
End
EndIf
Re: image de fond
Publié : mer. 24/août/2016 11:53
par majikeyric
sans API.
Code : Tout sélectionner
Enumeration
#MainWindow
#Background
#bgImage
#Button
#TitleFont
#Candidate
#CandidateFont
EndEnumeration
UseJPEGImageDecoder()
LoadImage(#bgImage, "background.jpg")
LoadFont(#TitleFont, "Times New Roman", 24, #PB_Font_Italic)
LoadFont(#CandidateFont, "Times New Roman", 12, #PB_Font_Italic)
wFlags = #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Invisible
OpenWindow(#MainWindow, #PB_Any, #PB_Any, 1000, 550, "Image Background", wFlags)
StartDrawing(ImageOutput(#bgImage))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(#TitleFont))
DrawText(60, 30, "Stairway to Heaven...", RGB(0, 0, 255))
StopDrawing()
ImageGadget(#Background, 0, 0, 1000, 550, ImageID(#bgImage))
StringGadget(#Candidate, 100, 230, 190, 30, "enter your name here...")
ButtonGadget(#Button, 100, 265, 190, 30, "E N T E R !")
SetGadgetFont(#Candidate, FontID(#CandidateFont))
DisableGadget(#Background, #True)
DisableGadget(#Button, #True)
HideWindow(#MainWindow, #False)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
appQuit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case #Button
HideGadget(#Candidate, #True)
HideGadget(#Button, #True)
StartDrawing(ImageOutput(#bgImage))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(#TitleFont))
DrawText(770, 250, "Goodbye...", RGB(255, 200, 255))
StopDrawing()
SetGadgetState(#Background, ImageID(#bgImage))
Case #Candidate
Select EventType()
Case #PB_EventType_Focus
SetGadgetText(#Candidate, "")
Case #PB_EventType_Change
If Trim(GetGadgetText(#Candidate))
DisableGadget(#Button, #False)
Else
DisableGadget(#Button, #True)
EndIf
EndSelect
EndSelect
EndSelect
Until appQuit = 1
image :
http://majikeyric.free.fr/purebasic/background.jpg
Re: image de fond
Publié : mer. 24/août/2016 11:53
par Marc56
L’éditeur de Forms à quelques subtilités.
Il affiche les objets dans l'ordre de création,
mais la prévisualisation est différente de l'édition.
Si pendant cette conception, tes objets semblent disparaitre, il suffit de changer l'ordre en allant sur l'
onglet Objets de la palette d'outils.
(onglet à droite de l'onglet ouvert par défaut). Tu fais un drag'n'drop des objets pour avoir l'image
avant les objets
Exemple de gadget sur image
(genéré par le form designer)
Code : Tout sélectionner
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Enumeration FormWindow
#Window_0
EndEnumeration
Enumeration FormGadget
#Image_0
#Button_0
EndEnumeration
Enumeration FormImage
#Img_Window_0_0
EndEnumeration
LoadImage(#Img_Window_0_0,"C:\Program Files\PureBasic\Examples\Sources\Data\PureBasicLogo.bmp")
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 400)
OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu)
ImageGadget(#Image_0, 10, 10, 381, 68, ImageID(#Img_Window_0_0))
ButtonGadget(#Button_0, 15, 15, 100, 25, "Hello World")
EndProcedure
; --- Ajouté pour rendre le code généré par le form designer autonome
OpenWindow_0()
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend

Re: image de fond
Publié : mer. 24/août/2016 12:02
par falsam
Marc si tu exécutes ton code, tu verras que ton bouton est inaccessible. Ce qui confirme mon commentaire.
Re: image de fond
Publié : mer. 24/août/2016 12:15
par Marc56
Il suffit de cocher la case
Désactivé sur le gadget image,
ce qui ajoute la ligne DisableGadget(#Image_0, 1)
Code : Tout sélectionner
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Enumeration FormWindow
#Window_0
EndEnumeration
Enumeration FormGadget
#Image_0
#Button_0
EndEnumeration
Enumeration FormImage
#Img_Window_0_0
EndEnumeration
LoadImage(#Img_Window_0_0,"C:\Program Files\PureBasic\Examples\Sources\Data\PureBasicLogo.bmp")
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 400)
OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu)
ImageGadget(#Image_0, 10, 10, 381, 68, ImageID(#Img_Window_0_0))
DisableGadget(#Image_0, 1)
ButtonGadget(#Button_0, 15, 15, 100, 25, "Hello World")
EndProcedure
; --- Ajouté pour rendre le code généré par le form designer autonome
OpenWindow_0()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_0
MessageRequester("Hello", "Hello World")
EndSelect
EndSelect
ForEver

Re: image de fond
Publié : mer. 24/août/2016 12:16
par falsam
majikeyric j'ai testé ton code et le souci est le même. Le bouton est parfois accessible et quand on clique dessus il disparaît.
Re: image de fond
Publié : mer. 24/août/2016 12:19
par ChaudEf
le disable marche bien, mais quand je veux creer un nouveau gadget et je clique sur l'endroit de la fenetre ou je veux le positionner, ca fait bouger l'image
Re: image de fond
Publié : mer. 24/août/2016 12:24
par Marc56

De beaucoup ?
C'est parfois le rectangle de sélection d'objet (+1 pixel autour) qui donne une illusion de mouvement de l'image.
Re: image de fond
Publié : mer. 24/août/2016 12:26
par ChaudEf
je me suis mal exprime
quand je veux creer un nouveau gadget, disons un boutton, je clique e maintien clique et bouge la souris et ca fait la forme de mon gadget
et bien a la place de faire ca, ca bouge l'image en drag-drop, et ca ne cree pas le gadget
Re: image de fond
Publié : mer. 24/août/2016 12:33
par Marc56
Je n'arrive pas à reproduire ce problème, mais c'est peut-être parce que je fais pas de la même manière ?
Pour ajouter un objet (ex: un bouton) je fais un doucle-clic sur l'objet dans la liste,
ce qui me met le nouvel objet toujours en haut à gauche (à 10, 10)
ensuite je le déplace et je le redimensionne.
Je vérifie toujours que les poignées de sélection sont sur l'objet créé.
Quand il y a beaucoup d'objets, je sélectionne le bon dans la liste et non pas sur la fenêtre, car le Form Designer perd parfois le focus
Re: image de fond
Publié : mer. 24/août/2016 13:52
par majikeyric
falsam a écrit :majikeyric j'ai testé ton code et le souci est le même. Le bouton est parfois accessible et quand on clique dessus il disparaît.
Le bouton est accessible quand on rentre quelque chose dans le StringGadget puis il disparait quand on clique dessus... rien d'anormal quand on lit le code

Re: image de fond
Publié : mer. 24/août/2016 15:31
par falsam
majikeyric a écrit :rien d'anormal quand on lit le code
Et paf dans ma face :p
Re: image de fond
Publié : mer. 24/août/2016 15:31
par JohnJohnsonSHERMAN
Juste une idée comme ca...
Code : Tout sélectionner
StartDrawing(WindowOutput(#MaFenetre))
DrawImage(ImageID(#MonImageDeFond),0,0,LargeurFenetre,HauteurFenetre)
StopDrawing()
On dessine directement sur le fond de la fenêtre, les gadgets se positionneront dessus ensuite. Utiliser uniquement des gadgets fait que l'application ne sait pas bien lesquels mettre au dessus ou en dessous...
Et ne pas oublier d'inclire dans la boucle d'événements
Code : Tout sélectionner
Case #PB_Event_Repaint
StartDrawing(WindowOutput(#MaFenetre))
DrawImage(ImageID(#MonImageDeFond),0,0,LargeurFenetre,HauteurFenetre)
StopDrawing()
En effet, si la fenêtre est masquée, le fond disparait. Ces quelques lignes redessinent alors l'image sur la fenetre.
Et voila !
