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. 8)

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

:wink:

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
8)

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 :roll:

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... :idea:

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 ! :P