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 | 3.112 Views |  
 Themeninformationencet Thema hat 3 participant:  |