PureBasic

Forums PureBasic
Nous sommes le Ven 20/Sep/2019 23:39

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: ASTUCE: dialog (redessiner un canvas)
MessagePosté: Jeu 18/Mai/2017 11:20 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1655
Localisation: Belgique
Bonjour à tous,

Cela fait quelque jours que je joue avec les dialogs de Pb qui sont excellents pour une mise en forme efficace des gadgets dans une fenêtre.

Cependant voici un code exemple ou vous aller constater que quand on agrandis la fenêtre le dessin du canvas ne fonctionne pas correctement (même si le canvas est bien redimensionné)

Note; je donne l'astuce après le code :wink:

Code qui ne fonctionne pas correctement
Code:
; Requiered : PB 5.60
; Author    : MicrodevWeb
; Name      :Dialogue redessiner le canvas
Global gForm
Procedure Draw()
  Protected w=GadgetWidth(0)
  Protected h=GadgetHeight(0)
  Protected i,x,wc=w/4
  Protected Dim color(4)
  color(0)=$FF0000FF
  color(1)=$FF00FC7C
  color(2)=$FFFF901E
  color(3)=$FF13458B
  StartVectorDrawing(CanvasVectorOutput(0))
  For i=0 To 3
    VectorSourceColor(color(i))
    AddPathBox(x,0,wc,h)
    FillPath()
    x+wc
  Next
  StopVectorDrawing()
EndProcedure
Procedure EventCanvas()
  Select EventType()
    Case #PB_EventType_Resize
      Draw()
  EndSelect
EndProcedure
Procedure Open()
  Protected Font=LoadFont(#PB_Any,"Arial",11,#PB_Font_HighQuality)
  Protected xml.s,myXml
  ; Contruction dynamique du fichier xml
  ; Note: j'ajoute Chr(10) pour mieu repèrer la ligne d'erreur :)
  xml="<window name='mainForm' width='800' height='600' text='Teste'"+
      " flags='#PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered'>"+Chr(10)+
      "   <hbox> "+Chr(10)+
      "       <hbox expand='item:1'> "+Chr(10)+
      "         <canvas id='0' name='canvas'/> "+Chr(10)+
      "         <button id='1' name='bt_new' text='Nouveau' width='90' height='30' /> "+Chr(10)+
      "       </hbox> "+Chr(10)+
      "   </hbox> "+Chr(10)+
      "</window>"
  ; On utilise une police par défaut
  SetGadgetFont(#PB_Default,FontID(Font))
  ; Chargement du fichier xml
  myXml=CatchXML(#PB_Any, @xml, StringByteLength(xml), 0,#PB_UTF8)
  If Not myXml Or XMLStatus(myXml) <> #PB_XML_Success
    MessageRequester("XML ERROR",XMLError(myXml)+" line "+Str(XMLErrorLine(myXml)),#PB_MessageRequester_Error)
    End
  EndIf
  ; Création du dialog
  gForm=CreateDialog(#PB_Any)
  If Not gForm
    MessageRequester("DIALOG ERROR","Impossible de créer le dialog",#PB_MessageRequester_Error)
    End
  EndIf
  ; Ouverture de la fenêtre
  If Not OpenXMLDialog(gForm,myXml,"mainForm")
    MessageRequester("DIALOG ERROR","Impossible d'ouvrir la fenêtre",#PB_MessageRequester_Error)
    End
  EndIf
  ; Dessin des colonnes sur le canvas
  Draw()
  ; Mise en place des callback
  BindGadgetEvent(0,@EventCanvas())
EndProcedure

Open()

Repeat
  WaitWindowEvent()
Until Event()=#PB_Event_CloseWindow


L'astuce pour que cela fonctionne est la suivante
:arrow: ajoutez
Code:
ResizeGadget(0,#PB_Ignore,#PB_Ignore,#PB_Ignore,#PB_Ignore)

avant de redessiner et la cela fonctionne parfaitement

Code qui fonctionne

Code:
; Requiered : PB 5.60
; Author    : MicrodevWeb
; Name      :Dialogue redessiner le canvas
Global gForm
Procedure Draw()
  Protected w=GadgetWidth(0)
  Protected h=GadgetHeight(0)
  Protected i,x,wc=w/4
  Protected Dim color(4)
  color(0)=$FF0000FF
  color(1)=$FF00FC7C
  color(2)=$FFFF901E
  color(3)=$FF13458B
  StartVectorDrawing(CanvasVectorOutput(0))
  For i=0 To 3
    VectorSourceColor(color(i))
    AddPathBox(x,0,wc,h)
    FillPath()
    x+wc
  Next
  StopVectorDrawing()
EndProcedure
Procedure EventCanvas()
  Select EventType()
    Case #PB_EventType_Resize
      ; Ajoute ceci pour que cela fonctionne
      ResizeGadget(0,#PB_Ignore,#PB_Ignore,#PB_Ignore,#PB_Ignore)
      Draw()
  EndSelect
EndProcedure
Procedure Open()
  Protected Font=LoadFont(#PB_Any,"Arial",11,#PB_Font_HighQuality)
  Protected xml.s,myXml
  ; Contruction dynamique du fichier xml
  ; Note: j'ajoute Chr(10) pour mieu repèrer la ligne d'erreur :)
  xml="<window name='mainForm' width='800' height='600' text='Teste'"+
      " flags='#PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered'>"+Chr(10)+
      "   <hbox> "+Chr(10)+
      "       <hbox expand='item:1'> "+Chr(10)+
      "         <canvas id='0' name='canvas'/> "+Chr(10)+
      "         <button id='1' name='bt_new' text='Nouveau' width='90' height='30' /> "+Chr(10)+
      "       </hbox> "+Chr(10)+
      "   </hbox> "+Chr(10)+
      "</window>"
  ; On utilise une police par défaut
  SetGadgetFont(#PB_Default,FontID(Font))
  ; Chargement du fichier xml
  myXml=CatchXML(#PB_Any, @xml, StringByteLength(xml), 0,#PB_UTF8)
  If Not myXml Or XMLStatus(myXml) <> #PB_XML_Success
    MessageRequester("XML ERROR",XMLError(myXml)+" line "+Str(XMLErrorLine(myXml)),#PB_MessageRequester_Error)
    End
  EndIf
  ; Création du dialog
  gForm=CreateDialog(#PB_Any)
  If Not gForm
    MessageRequester("DIALOG ERROR","Impossible de créer le dialog",#PB_MessageRequester_Error)
    End
  EndIf
  ; Ouverture de la fenêtre
  If Not OpenXMLDialog(gForm,myXml,"mainForm")
    MessageRequester("DIALOG ERROR","Impossible d'ouvrir la fenêtre",#PB_MessageRequester_Error)
    End
  EndIf
  ; Dessin des colonnes sur le canvas
  Draw()
  ; Mise en place des callback
  BindGadgetEvent(0,@EventCanvas())
EndProcedure

Open()

Repeat
  WaitWindowEvent()
Until Event()=#PB_Event_CloseWindow

_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 1 message ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye