Foro | | | | - Página 1 - |
| Normann Strübli | Moin moin,
es ya una wenig her seitdem Yo mich intensiver con Xprofan beschäftigt habe also hoffentlich no dumme Cuestión:
Lo una Statusbar en el Ventana principal, el Yo en Fenstergrößenänderung neu dibujar möchte. Leider flackert todos furchtbar, como hay doch sicherlich una bessere Solución?
Das Subclassing se obtener bleiben.
$H windows.ph
$H messages.ph
'Statusbar
DEF CreateStatusWindow(4) ! "comctl32","CreateStatusWindow"
Declarar Dialog&,Status&,SText$,Positions#
Declarar CLASSNAME$,PROGRESSHandle&,HWND&,ProgressZähler&
Dim Positions#,16
Largo Positions#,0=250
Largo Positions#,4=500
Largo Positions#,8=-1
'**********************
SUBCLASSPROC
declarar dis#,rect#,tcitem#,b#,t$,mx%,my%,i%,o%
if &sWnd=%HWnd
if %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#)
Disponer Positions#
SubClass %HWnd, 1
Mientras que 1
Waitinput
EndWhile
subclass %HWnd,0
End
|
| | | | |
| | « Dieser Contribución wurde como Solución gekennzeichnet. » | | H.Brill | Das Flackern entsteht por el Abfragen des ~wm_sizing. Das heißt, jedesmal, si la Ratón el Ventana en el Größe verändert, se also bewegt, va auch el Message ~wm_sizing una.
Aber el necesidad du eigentlich no. Como reicht auch el Ende el Bewegung para Neuzeichnen. Also laß el ~wm_sizing simplemente weg.
Anbei el Verschlimmbesserung, wo el aktuelle Breite la ventana auch el Longitud el Felder en el Statusbar neu setzt.
$H windows.ph
$H messages.ph
'Statusbar
DEF CreateStatusWindow(4) ! "comctl32","CreateStatusWindow"
Declarar Dialog&,Status&,SText$,Positions#
Declarar CLASSNAME$,PROGRESSHandle&,HWND&,ProgressZähler&
Dim Positions#,16
Largo Positions#,0=250
Largo Positions#,4=500
Largo Positions#,8=-1
'**********************
SUBCLASSPROC
declarar Positions#, dis#,rect#,tcitem#,b#,t$,mx%,my%,i%,o%
if &sWnd=%HWnd
if %sMessage= ~wm_size
SetWindowPos Status& = 0,0 - 0,0; 0'Redraw Statusbar
Dim Positions#, 16
Largo Positions#, 0 = Width(%HWnd, 0) / 4
Largo Positions#, 4 = Width(%Hwnd, 0) / 2
Largo 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#)
Disponer Positions#
SubClass %HWnd, 1
Mientras que 1
Waitinput
EndWhile
subclass %HWnd,0
Disponer Positions#
End
Yo denke, el es qué du media. PS : El Statusbar hay auch integriert como StatusWindow en Profano. Crear("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 klar - tener Yo abgeändert y todos war trotzdem al flackern. Tuve así viel hin - y herprobiert y luego dieses Ejemplo de media Code zusammengestellt, como war el setwindowpos entonces sowohl en ~wm_size como auch ~wm_sizing drin
Usted hast mich trotzdem en el Solución gebracht, porque lo sí en deinem geänderten Ejemplo no flackert.
Tuve una überlappendes Static Control - eigentlich Tuve el höhe el Statusbar abgezogen, por una pequeña Schreibfehler war dieser Valor aber 0. Passiert wohl si uno demasiado tiempo el Fehler a el falschen Punto sucht.
Vielen Dank otra vez !!! |
| | | | |
| | Georg Teles | Nabend, innerhalb el SUBCLASS fehlt de paso una EndIf, para Fehler kommt no, por qué De todos modos no
Ebenfalls tut el gleiche folgender Code, si alguien antes XProfan 11 sin SubClassing arbeitet
$H windows.ph
$H messages.ph
'Statusbar
DEF CreateStatusWindow(4) ! "comctl32","CreateStatusWindow"
Declarar Dialog&,Status&,SText$,Positions#,OldWndProc&
Declarar CLASSNAME$,PROGRESSHandle&,HWND&,ProgressZähler&
Dim Positions#,16
Largo Positions#,0=250
Largo Positions#,4=500
Largo Positions#,8=-1
'**********************
Proc ChangeControl
Parámetros hWnd&, Message&, wParam&, lParam&
declarar Positions#, dis#,rect#,tcitem#,b#,t$,mx%,my%,i%,o%
if hWnd&=%HWnd
if Message&= ~wm_size
SetWindowPos Status& = 0,0 - 0,0; 0'Redraw Statusbar
'Dim Positions#, 16
'Largo Positions#, 0 = Width(%HWnd, 0) / 4
'Largo Positions#, 4 = Width(%Hwnd, 0) / 2
'Largo Positions#, 8 = -1
'SendMessage(Status&, $404, 3, Positions#)
ElseIf %sMessage = ~wm_sizing
SetText %HWnd, "Fensterbreite : " + Str$(Width(%HWnd))
EndIf
EndIf
Volver ~CallWindowProc(OldWndProc&, hWnd&, Message&, wParam&, lParam&)
ENDPROC
Conjunto("FastMode", 1)'FastMode
CLS
Var TEXT$ = ""
Status&=CreateStatusWindow($50000920,@ADDR(TEXT$),%HWND,1000)
SendMessage(Status&,$404,3,Positions#)
Disponer Positions#
OldWndProc& = ~GetWindowLong(%hWnd, ~GWL_WNDPROC)' save old WindowLong
~SetWindowLong(%hWnd, ~GWL_WNDPROC, @ProcAddr("ChangeControl", 4))' set new WindowLong
Mientras que 1
Waitinput
EndWhile
~SetWindowLong(%hWnd, ~GWL_WNDPROC, OldWndProc&)' restore WindowLong
Disponer Positions#
End
Grüße |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 3 subscriber: |