image de fond

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

image de fond

Message 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
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: image de fond

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: image de fond

Message 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

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: image de fond

Message 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
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: image de fond

Message 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:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: image de fond

Message par falsam »

Marc si tu exécutes ton code, tu verras que ton bouton est inaccessible. Ce qui confirme mon commentaire.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: image de fond

Message 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)
Dernière modification par Marc56 le mer. 24/août/2016 12:17, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: image de fond

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: image de fond

Message 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
Windows 10 x64 -- Purebasic 5.70 LTS x86
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: image de fond

Message 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.
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: image de fond

Message 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
Windows 10 x64 -- Purebasic 5.70 LTS x86
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: image de fond

Message 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
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: image de fond

Message 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:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: image de fond

Message par falsam »

majikeyric a écrit :rien d'anormal quand on lit le code
Et paf dans ma face :p
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: image de fond

Message 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
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Répondre