Affichage Fenetre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
philou85
Messages : 3
Inscription : jeu. 27/oct./2005 23:37

Affichage Fenetre

Message par philou85 »

Bonjour,
Grande satisfaction d'avoir acquérit PureBasic et enfin découvrir la programmation...

Je suis en train de composer un petit programme qui lit des vidéos avec des options qui ouvre des fentres d'option pour écrire certaines valeurs dans des fichiers Ini.
Ce que je ne comprends pas, si je bascule d'un programme à un autre (alt+tab ex:PureBasic -Exploreur Windows) je perds l'affichage de la lecture de la vidéo quand je retourne dans mon programme...Pourquoi?

Dernière question, existe t'il une documentation en français pour PureVision?

Je vous remercie chaleureusement pour votre réponse avec l'espoir d'avoir de nouveaux échange sur le forum...
Anonyme

Message par Anonyme »

Je te souhaite la bienvenue sur le Forum :wink:
je ne suis pas sur, mais essaye avec :

Code : Tout sélectionner

UpdateWindow_(WindowID())
@++
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

et dans ta boucle des events remplace

"WaitWindowEvent() " par "WindowEvent()" suivi d'un petit "delay(2)"

"WaitWindowEvent() " attend un evenement
alors que "WindowEvent()" laisse la main au system
equivalent de "DoEvents" en VisualBasic ideal pour faire fonctionner un prg
en arriere plan !! :D
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

bonjour je ne sait pas si mon probleme est dans le meme genre mais sa y ressemble .

moi j'ai une fenetre avec une image en fond, mais des que je la reduit ou que je met une autre fenetre devant et que je revient sur ma fenetre, mes bouttons sont cacher par l'image existe t-il un moyen d'eviter sa je pense que oui mais je ne voie pas .

j'ai composer un code vite fait histoire de voir

Code : Tout sélectionner

Enumeration
  #a=0
  #b=1
  #c=2
  #d=3
  #e=4
  #f=5
  #g=6
EndEnumeration

If OpenWindow(0, 0, 0, 600, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "exemple avec button")And CreateGadgetList(WindowID(0));#PB_Window_ScreenCentered sert a metre automatiquement la fenetre au centre de l'ecrant , #PB_Window_MinimizeGadget sert a metre le boutton en haut a droite pour metre la fenetre dans la barre des taches , #PB_Window_maximizeGadget lui sert a agrandire la fenetre sur tout l'ecrant c'est entre la croix et minimizegadget  
  ButtonGadget(#a, 0, 1, 60, 60, "droite", #PB_Button_Right) ;#PB_Button_Right Aligne le texte du bouton à droite
  ButtonGadget(#b, 108, 1, 60, 60, "gauche", #PB_Button_Left) ;#PB_Button_left Aligne le texte du bouton à gauche
  ButtonGadget(#c, 216, 1, 60, 60, "normal") ; ce boutton est un boutton normal (standard)
  ButtonGadget(#f, 332, 1, 60, 60, "toggle", #PB_Button_Toggle) ;#PB_Button_Toggle sert a alterne l'état appuye et normal
  ButtonGadget(#g, 450, 1, 60, 60, "disable") : DisableGadget(#g, 1) ;DisableGadget(#g, 1) sert a la fonction disable sa veut dire qu'il n'est pas activer
  ; etceterra.....
  
  If CreateMenu(0, WindowID()) ; on cree la barre de menu position 1 (en haut a gauche de la fenetre)
    MenuTitle("menu") ; le nom qui s'affiche dans la barre des menu
    MenuItem(1, "Ouvrir") ; le nom qui s'affiche quand on clic sur menu le 1er
    MenuItem(2, "Sauvegarder") ; le 2eme
    MenuItem(3, "Fermer") ; le 3eme
    ; etceterra.....
    
    MenuTitle("edition") ; on cree edition dans la barre de menu position 2 (en haut a coter de la position 1)
    MenuItem(4, "annuler") ; le nom qui s'affiche quand on clic sur edition 1er
    MenuItem(5, "copier") ; le 2eme
    MenuItem(6, "coller") ; le 3eme
    ; etceterra.....
    
    MenuTitle("disable") ; on cree disable dans la barre de menu position 3
    MenuItem(7, "activer") ; le boutton qui s'affiche est activer
    MenuItem(8, "desactiver") ; le boutton qui s'affiche n'est pas activer
    DisableMenuItem(8, 3) ; ceci sert a desactiver un boutton la c'est le 2eme car (8,3) le 8 c'est le numero du boutton et le 3 c'est la position du menu que l'on veut desactiver la c'est menu "disable donc le troisieme menu"
    
    If LoadImage(10, "d:/windows/Vent de prairie.bmp")
    ImageGadget(10, 10,10,100,83,UseImage(10))
   EndIf
         
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow ; fermer la fenetre avec la croix
  EndIf
EndIf

voila :) merci
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

au faite pour le code c'est a vous de metre une image

Code : Tout sélectionner

If LoadImage(10, "c:/windows/Vent de prairie.bmp") 
    ImageGadget(10, 10,10,100,83,UseImage(10)) 
   EndIf 
par exemple :wink:
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Essaye ça!

Code : Tout sélectionner

UseJPEGImageDecoder()

Enumeration 
  #a=0 
  #b=1 
  #c=2 
  #d=3 
  #e=4 
  #f=5 
  #g=6 
EndEnumeration 

LoadImage(10, "D:\PureBasic\Compilers\collines.jpg")

Procedure CallBack(Hnd,msg,wParam,lParam)
  Resultat = #PB_ProcessPureBasicEvents
  If msg = #WM_PAINT Or msg = #WM_ACTIVATE
      StartDrawing(WindowOutput())
      DrawImage(UseImage(10), 0, 0)
      StopDrawing()
      ResizeGadget(#a, -1, -1, -1, -1)
      ResizeGadget(#b, -1, -1, -1, -1)
      ResizeGadget(#c, -1, -1, -1, -1)
      ResizeGadget(#f, -1, -1, -1, -1)
      ResizeGadget(#g, -1, -1, -1, -1)
    EndIf
  ProcedureReturn Resultat 
EndProcedure 


If OpenWindow(0, 0, 0, 600, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "exemple avec button")And CreateGadgetList(WindowID(0));#PB_Window_ScreenCentered sert a metre automatiquement la fenetre au centre de l'ecrant , #PB_Window_MinimizeGadget sert a metre le boutton en haut a droite pour metre la fenetre dans la barre des taches , #PB_Window_maximizeGadget lui sert a agrandire la fenetre sur tout l'ecrant c'est entre la croix et minimizegadget  
  
  ButtonGadget(#a, 0, 1, 60, 60, "droite", #PB_Button_Right) ;#PB_Button_Right Aligne le texte du bouton à droite 
  ButtonGadget(#b, 108, 1, 60, 60, "gauche", #PB_Button_Left) ;#PB_Button_left Aligne le texte du bouton à gauche 
  ButtonGadget(#c, 216, 1, 60, 60, "normal") ; ce boutton est un boutton normal (standard) 
  ButtonGadget(#f, 332, 1, 60, 60, "toggle", #PB_Button_Toggle) ;#PB_Button_Toggle sert a alterne l'état appuye et normal 
  ButtonGadget(#g, 450, 1, 60, 60, "disable") : DisableGadget(#g, 1) ;DisableGadget(#g, 1) sert a la fonction disable sa veut dire qu'il n'est pas activer 
  ; etceterra..... 
  
  If CreateMenu(0, WindowID()) ; on cree la barre de menu position 1 (en haut a gauche de la fenetre) 
    MenuTitle("menu") ; le nom qui s'affiche dans la barre des menu 
    MenuItem(1, "Ouvrir") ; le nom qui s'affiche quand on clic sur menu le 1er 
    MenuItem(2, "Sauvegarder") ; le 2eme 
    MenuItem(3, "Fermer") ; le 3eme 
    ; etceterra..... 
    
    MenuTitle("edition") ; on cree edition dans la barre de menu position 2 (en haut a coter de la position 1) 
    MenuItem(4, "annuler") ; le nom qui s'affiche quand on clic sur edition 1er 
    MenuItem(5, "copier") ; le 2eme 
    MenuItem(6, "coller") ; le 3eme 
    ; etceterra..... 
    
    MenuTitle("disable") ; on cree disable dans la barre de menu position 3 
    MenuItem(7, "activer") ; le boutton qui s'affiche est activer 
    MenuItem(8, "desactiver") ; le boutton qui s'affiche n'est pas activer 
    DisableMenuItem(8, 3) ; ceci sert a desactiver un boutton la c'est le 2eme car (8,3) le 8 c'est le numero du boutton et le 3 c'est la position du menu que l'on veut desactiver la c'est menu "disable donc le troisieme menu" 
    
    SetWindowCallback(@CallBack())
    
    
    
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow ; fermer la fenetre avec la croix 
  EndIf 
EndIf
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

cool 8) :D exelent merci chris j'ai vu quoi maintenant merci pour cette reponce efficasse et rapide chapeau 8)


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

venom a écrit :cool 8) :D exelent merci chris j'ai vu quoi maintenant merci pour cette reponce efficasse et rapide chapeau 8)
@++
Il y a quand même un bug dans la callback, quand tu fermes la fenêtre, le debugger affiche "#Image Object not initialized"

Il faut mettre "If (msg = #WM_PAINT Or msg = #WM_ACTIVATE) And ImageID()".
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

:) j'etais venue pour te faire remarquer ce bug. mais bon c'est trop tard :wink: .
donc comme tu a dit j'ai mis

Code : Tout sélectionner

If (msg = #WM_PAINT Or msg = #WM_ACTIVATE) And ImageID()".
au lieu de

Code : Tout sélectionner

If msg = #WM_PAINT Or msg = #WM_ACTIVATE 
mais moi y me dit toujours le meme c'est bizarre et c'est pour dire aussi mon vrais code contient des frames3d qui n'apparaisse pas lors du demarrage de la fenetre bin tien voici mon vrai code tu verra y me dit toujours l'erreur. c'est bizarre :!:

Code : Tout sélectionner

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Frame3D_0
  #IPAddress_0
  #Button_0
  #ProgressBar_0
  #Button_1
  #TrackBar_0
  #Frame3D_2
  #Frame3D_3
  #Frame3D_4
  #Text_1
  #Text_2
  #Text_3
  #Image
EndEnumeration

LoadImage(#image, "c:/fond.bmp") 

Procedure CallBack(Hnd,msg,wParam,lParam) 
  Resultat = #PB_ProcessPureBasicEvents 
If (msg = #WM_PAINT Or msg = #WM_ACTIVATE) And ImageID() 
      StartDrawing(WindowOutput()) 
      DrawImage(UseImage(#image), 0, 0,485,250) 
      StopDrawing() 
      ResizeGadget(#Frame3D_0, -1, -1, -1, -1) 
      ResizeGadget(#IPAddress_0, -1, -1, -1, -1) 
      ResizeGadget(#Button_0, -1, -1, -1, -1) 
      ResizeGadget(#ProgressBar_0, -1, -1, -1, -1) 
      ResizeGadget(#Button_1, -1, -1, -1, -1)
      ResizeGadget(#TrackBar_0, -1, -1, -1, -1)
      ResizeGadget(#Frame3D_2, -1, -1, -1, -1)
      ResizeGadget(#Frame3D_3, -1, -1, -1, -1)
      ResizeGadget(#Frame3D_4, -1, -1, -1, -1)
      ResizeGadget(#text_1, -1, -1, -1, -1)
      ResizeGadget(#text_2, -1, -1, -1, -1)
      ResizeGadget(#text_3, -1, -1, -1, -1)
    EndIf 
  ProcedureReturn Resultat 
EndProcedure 

  If OpenWindow(#Window_0, 303, 103, 485, 250,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "virtual cb")

    If CreateGadgetList(WindowID())
      Frame3DGadget(#Frame3D_0, 5, 5, 235, 240, "", #PB_Frame3D_Double)
      IPAddressGadget(#IPAddress_0, 35, 55, 175, 20)
      ButtonGadget(#Button_0, 35, 120, 175, 35, "connexion", #PB_Button_Default)
      ProgressBarGadget(#ProgressBar_0, 35, 195, 175, 15, 0, 10)
      ButtonGadget(#Button_1, 280, 170, 170, 30, "parler", #PB_Button_Toggle)
      TrackBarGadget(#TrackBar_0, 280, 50, 170, 15, 0, 10)
      Frame3DGadget(#Frame3D_2, 270, 155, 190, 55, "", #PB_Frame3D_Double)
      Frame3DGadget(#Frame3D_3, 270, 30, 190, 55, "", #PB_Frame3D_Double)
      TextGadget(#Text_1, 290, 10, 155, 20, "           volume du micro")
      TextGadget(#Text_2, 275, 135, 180, 15, "               appuillez pour parler")
      TextGadget(#Text_3, 45, 30, 155, 20, "entree l'adresse ip du recepteur")
      Frame3DGadget(#Frame3D_4, 245, 5, 235, 240, "", #PB_Frame3D_Double)
      SetGadgetState(#TrackBar_0, 100) : volume = 100
    SetWindowCallback(@CallBack())
    EndIf
  EndIf
  
  Repeat
   Event = WaitWindowEvent()
    If Event = #PB_EventGadget
     Select EventGadgetID()
        

        
     EndSelect
    EndIf  
  Until Event = #PB_EventCloseWindow
voila :wink:
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

8O je ne comprend pas :? maintenant sa marche :oops: 8O bizarre mais fodra que je vois quand meme pour les fram qui eux n'apparaisse que si on cache la fenetre et qu'on la remet je vais essayer de trouver si je trouve je vous dui quoi a tout
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Quand tu dessines, tu le fais sur un support; donc soit c'est la fenêtre principale, soit les frames etc...

Si tu veux dessiner partout à la fois il faut traiter toutes les fenêtres concernées!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

C'est un vieux bout de code que j'avais sur mon disque et que j'ai adapté, mais j'ai pas trop regardé pour tous les gadgets.

Sinon, tu as essayé avec la lib de Danilo : PureTools

Il y a une fonction qui est faite pour ça
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Ce que j'ai dis n'est pas tout à fait exact, comme les frames ne sont pas des gadgets au sens window, elles sont prises en compte aussi mais on doit pouvoir les dessiner séparément avec le Hdc de chaque fenêtre.

Il a été démontré sur le Forum Anglais qu'il valait mieux utiliser BeginPaint pour dessiner sur la fenêtre.


Cet exemple fonctionne bien chez moi:

Code : Tout sélectionner

Enumeration 
  #Window_0 
EndEnumeration 

Enumeration 
  #Frame3D_0 
  #IPAddress_0 
  #Button_0 
  #ProgressBar_0 
  #Button_1 
  #TrackBar_0 
  #Frame3D_2 
  #Frame3D_3 
  #Frame3D_4 
  #Text_1 
  #Text_2 
  #Text_3 
  #Image 
EndEnumeration 

LoadImage(#Image, "c:/test.bmp") 

Procedure CallBack(Hnd,msg,wParam,lParam) 
  Resultat = #PB_ProcessPureBasicEvents 
  If msg = #WM_PAINT 
    ps.PAINTSTRUCT
    hdc=BeginPaint_(Hnd, ps)
    hdc_source=CreateCompatibleDC_(hdc)
    selectobject_(hdc_source,UseImage(#Image))
    
    BitBlt_(hdc, 0, 0, 600, 400,hdc_source, 0, 0, #SRCCOPY)
    
    EndPaint_(Hnd,ps) 
    DeleteDC_(hdc_source)
  EndIf 
  ProcedureReturn Resultat 
EndProcedure 


If OpenWindow(#Window_0, 303, 103, 485, 250,  #PB_Window_SizeGadget|#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "virtual cb") 
  If CreateGadgetList(WindowID()) 
    Frame3DGadget(#Frame3D_0, 5, 5, 235, 240, "", #PB_Frame3D_Double) 
    IPAddressGadget(#IPAddress_0, 35, 55, 175, 20) 
    ButtonGadget(#Button_0, 35, 120, 175, 35, "connexion", #PB_Button_Default) 
    ProgressBarGadget(#ProgressBar_0, 35, 195, 175, 15, 0, 10) 
    ButtonGadget(#Button_1, 280, 170, 170, 30, "parler", #PB_Button_Toggle) 
    TrackBarGadget(#TrackBar_0, 280, 50, 170, 15, 0, 10) 
    Frame3DGadget(#Frame3D_2, 270, 155, 190, 55, "", #PB_Frame3D_Double) 
    Frame3DGadget(#Frame3D_3, 270, 30, 190, 55, "", #PB_Frame3D_Double) 
    TextGadget(#Text_1, 290, 10, 155, 20, "           volume du micro") 
    TextGadget(#Text_2, 275, 135, 180, 15, "               appuillez pour parler") 
    TextGadget(#Text_3, 45, 30, 155, 20, "entree l'adresse ip du recepteur") 
    Frame3DGadget(#Frame3D_4, 245, 5, 235, 240, "", #PB_Frame3D_Double) 
    SetGadgetState(#TrackBar_0, 100) : volume = 100 
    SetWindowCallback(@CallBack()) 
  EndIf 
EndIf 
  InvalidateRect_(WindowID(0),0,1)
Repeat 
  event = WaitWindowEvent() 
  If event = #PB_EventGadget 
    Select EventGadgetID() 

    EndSelect 
  EndIf  
Until event = #PB_EventCloseWindow
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

salut nico, chez moi aussi le code fonctionne bien .
mais je ne connaissais pas la fonction "BeginPaint" fodra que je regarde bien le code est essayer de comprendre. encore merci nico :wink:

chris: bin preso je ne sait pas gerer les libs et tout autres fichier exterieur :oops: pourtant sa fait un moment que je fait un peut de programmation mais malhereusement pas asser de temps pour moi evoluer :cry:. je suis encore au stade debutant :lol: mais j'espert un jour savoir utiliser ou meme cree des libs et tout. fin sa on vera par la suite :lol:. deja je vais essayer de finir mon programme ensuite on verra. :wink: :D

encore merci a vous

@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Petite modif du code de Nico, pour que les textes n'aient pas le fond gris de la fenêtre.

Ajoute ça au début de la callback, sous "If msg = #WM_PAINT"

Code : Tout sélectionner

    UseImage(#Image)
    StartDrawing(ImageOutput())
    DrawingMode(1):DrawingFont(GetStockObject_(#DEFAULT_GUI_FONT))
    
    Locate(320, 35) : DrawText("Volume du micro")
    Locate(315,135) : DrawText("Appuyez pour parler")
    Locate(45,35)   : DrawText("Entrez l'adresse IP du récepteur")
    StopDrawing()
    
     ... et la suite du code est la même...
et retire les trois TextGadget() dans la GadgetList()

Et j'ai pas pu m'en empêcher, j'ai corrigé les fôtes dortografe :roll:
:lol:
Répondre