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
Code qui ne fonctionne pas correctement
Code : Tout sélectionner
; 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
ajoutez
Code : Tout sélectionner
ResizeGadget(0,#PB_Ignore,#PB_Ignore,#PB_Ignore,#PB_Ignore)
Code qui fonctionne
Code : Tout sélectionner
; 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