Forum | | | | - page 1 - |
| Normann Strübli | Moin moin,
ist déjà un peu her seitdem je mich intensiver avec Xprofan beschäftigt habe alors hoffentlich aucun dumme Frage:
Es um une Statusbar im Hauptfenster, qui je chez Fenstergrößenänderung récente zeichnen voudrais. malheureusement flackert cela ganze furchtbar, là gibt es doch sicherlich une bessere Solution?
cela Subclassing soll conservé rester.
$H windows.ph
$H messages.ph
'Statusbar
DEF CreateStatusWindow(4) ! "comctl32","CreateStatusWindow"
Déclarer Dialog&,Status&,SText$,Positions#
Déclarer CLASSNAME$,PROGRESSHandle&,HWND&,ProgressZähler&
Faible Positions#,16
Long Positions#,0=250
Long Positions#,4=500
Long Positions#,8=-1
'**********************
SUBCLASSPROC
declare dis#,rect#,tcitem#,b#,t$,mx%,my%,i%,o%
si &sWnd=%HWnd
si %sMessage= ~wm_size
SetWindowPos Status& = 0,0 - 0,0; 0'Redraw Statusbar
ElseIf %sMessage= ~wm_sizing
SetWindowPos Status& = 0,0 - 0,0; 0'Redraw Statusbar
EndIf
ENDPROC
CLS
Var TEXT$ = »
Status&=CreateStatusWindow($50000920,@ADDR(TEXT$),%HWND,1000)
SendMessage(Status&,$404,3,Positions#)
Dispose Positions#
SubClass %HWnd, 1
Tandis que 1
Waitinput
Endwhile
subclass %HWnd,0
Fin
|
| | | | |
| | « cette Beitrag wurde comme Solution gekennzeichnet. » | | H.Brill | cela Flackern entsteht par cela Abfragen des ~wm_sizing. cela est, chaque fois, si le souris cela la fenêtre dans qui Taille modifié, sich alors bewegt, allez aussi qui Message ~wm_sizing un.
mais cela brauchst du eigentlich pas. là reicht aussi cela Ende qui Bewegung zum Neuzeichnen. alors laß cela ~wm_sizing simple weg.
Anbei qui Verschlimmbesserung, wohin qui aktuelle Breite des Fensters aussi qui Longueur qui Felder dans qui Statusbar récente mets.
$H windows.ph
$H messages.ph
'Statusbar
DEF CreateStatusWindow(4) ! "comctl32","CreateStatusWindow"
Déclarer Dialog&,Status&,SText$,Positions#
Déclarer CLASSNAME$,PROGRESSHandle&,HWND&,ProgressZähler&
Faible Positions#,16
Long Positions#,0=250
Long Positions#,4=500
Long Positions#,8=-1
'**********************
SUBCLASSPROC
declare Positions#, dis#,rect#,tcitem#,b#,t$,mx%,my%,i%,o%
si &sWnd=%HWnd
si %sMessage= ~wm_size
SetWindowPos Status& = 0,0 - 0,0; 0'Redraw Statusbar
Faible Positions#, 16
Long Positions#, 0 = Width(%HWnd, 0) / 4
Long Positions#, 4 = Width(%Hwnd, 0) / 2
Long Positions#, 8 = -1
SendMessage(Status&, $404, 3, Positions#)
ElseIf %sMessage = ~wm_sizing
SetText %HWnd, "Fensterbreite : " + Str$(Width(%HWnd))
EndIf
ENDPROC
CLS
Var TEXT$ = »
Status&=CreateStatusWindow($50000920,@ADDR(TEXT$),%HWND,1000)
SendMessage(Status&,$404,3,Positions#)
Dispose Positions#
SubClass %HWnd, 1
Tandis que 1
Waitinput
Endwhile
subclass %HWnd,0
Dispose Positions#
Fin
je denke, c'est quoi du meinst. PS : qui Statusbar gibt es aussi integriert comme StatusWindow dans Profan. Créer("StatusWindow",N1,S[,N2,B]) |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 04.02.2023 ▲ |
| | |
| | Normann Strübli | Moin,
Im Grunde völlig bien sûr - hab je abgeändert et cela ganze était quand même am flackern. je hatte so viel hin - et herprobiert et ensuite cet Beispiel aus meinen Code zusammengestellt, là était cela setwindowpos ensuite sowohl chez ~wm_size comme aussi ~wm_sizing drin
tu as mich quand même sur qui Solution gebracht, weil es oui dans deinem modifié Beispiel pas flackert.
je hatte un überlappendes Static Contrôle - eigentlich J'ai eu qui höhe qui Statusbar abgezogen, par une kleinen Schreibfehler était cette Wert mais 0. Passiert wohl si on trop longtemps den faute à qui falschen Stelle cherchez.
Vielen Dank nochmal !!! |
| | | | |
| | Georg Teles | Nabend, dedans qui SUBCLASS fehlt incidemment un EndIf, zum faute venez es pas, pourquoi De toute façon pas
également tut cela gleiche suivant Code, si quelqu'un avant XProfan 11 sans SubClassing arbeitet
$H windows.ph
$H messages.ph
'Statusbar
DEF CreateStatusWindow(4) ! "comctl32","CreateStatusWindow"
Déclarer Dialog&,Status&,SText$,Positions#,OldWndProc&
Déclarer CLASSNAME$,PROGRESSHandle&,HWND&,ProgressZähler&
Faible Positions#,16
Long Positions#,0=250
Long Positions#,4=500
Long Positions#,8=-1
'**********************
Proc ChangeControl
Paramètres hWnd&, Message&, wParam&, lParam&
declare Positions#, dis#,rect#,tcitem#,b#,t$,mx%,my%,i%,o%
si hWnd&=%HWnd
si Message&= ~wm_size
SetWindowPos Status& = 0,0 - 0,0; 0'Redraw Statusbar
'Faible Positions#, 16
'Long Positions#, 0 = Width(%HWnd, 0) / 4
'Long Positions#, 4 = Width(%Hwnd, 0) / 2
'Long Positions#, 8 = -1
'SendMessage(Status&, $404, 3, Positions#)
ElseIf %sMessage = ~wm_sizing
SetText %HWnd, "Fensterbreite : " + Str$(Width(%HWnd))
EndIf
EndIf
Retour ~CallWindowProc(OldWndProc&, hWnd&, Message&, wParam&, lParam&)
ENDPROC
Set("Fastmode", 1)'FastMode
CLS
Var TEXT$ = »
Status&=CreateStatusWindow($50000920,@ADDR(TEXT$),%HWND,1000)
SendMessage(Status&,$404,3,Positions#)
Dispose Positions#
OldWndProc& = ~GetWindowLong(%hWnd, ~GWL_WNDPROC)' save old WindowLong
~SetWindowLong(%hWnd, ~GWL_WNDPROC, @ProcAddr("ChangeControl", 4))' set new WindowLong
Tandis que 1
Waitinput
Endwhile
~SetWindowLong(%hWnd, ~GWL_WNDPROC, OldWndProc&)' restore WindowLong
Dispose Positions#
Fin
Grüße |
| | | | |
|
répondreOptions du sujet | 2.088 Views |
Themeninformationencet Thema hat 3 participant: |