MenuBar() und :LockUpdate() o.ä möglich? [erledigt]
Moderator: Moderatoren
MenuBar() und :LockUpdate() o.ä möglich? [erledigt]
Hallo
gibt es eine Möglichkeit die Top-Menü-Einträge beu XbpCrt():MenuBar() erst anzuzeigen wenn das Menü fertig aufgebaut ist?
Der Aufruf von oXbpCrt:MenuBar() zeigt automatisch das entsprechende XbpCrt-Fenster (hatte ich schon in einem anderen Thema geschrieben). OK -muss man damit leben.
Wenn ich auf dem nun sichtbaren XbpCrt-Fenster das gesamte Menü erzeuge sieht man wie das Top-Menü nach und nach erstellt wird. Zwar recht schnell, es macht aber den Eindruck als würden die Texte von Links nach Rechts auf Ihren endgültigen Platz "zappeln". Bei großem Schrift-Font ist das schon sehr deutlich und erinnert an Laufschrift.
oXbpCrt:LockUpdate( .T. ) und oMenuBar:LockUpdate() zeigen keine Wirkung.
oXbpCrt:Hide() -> Menüaufbau -> oXbpCrt:Show() kommt nicht in Frage, der "Blinkeffekt" bei "Crt da" -> "Crt weg" -> "Crt wieder da" ist doof...
Auch die Verwendung des Parameters Visible := .F. beim Menüaufbau scheint nichts zu nutzen.
Weiß jemand wie das geht, dass das Top-Menü erst nach dem kompletten Aufbau angezeigt wird?
gibt es eine Möglichkeit die Top-Menü-Einträge beu XbpCrt():MenuBar() erst anzuzeigen wenn das Menü fertig aufgebaut ist?
Der Aufruf von oXbpCrt:MenuBar() zeigt automatisch das entsprechende XbpCrt-Fenster (hatte ich schon in einem anderen Thema geschrieben). OK -muss man damit leben.
Wenn ich auf dem nun sichtbaren XbpCrt-Fenster das gesamte Menü erzeuge sieht man wie das Top-Menü nach und nach erstellt wird. Zwar recht schnell, es macht aber den Eindruck als würden die Texte von Links nach Rechts auf Ihren endgültigen Platz "zappeln". Bei großem Schrift-Font ist das schon sehr deutlich und erinnert an Laufschrift.
oXbpCrt:LockUpdate( .T. ) und oMenuBar:LockUpdate() zeigen keine Wirkung.
oXbpCrt:Hide() -> Menüaufbau -> oXbpCrt:Show() kommt nicht in Frage, der "Blinkeffekt" bei "Crt da" -> "Crt weg" -> "Crt wieder da" ist doof...
Auch die Verwendung des Parameters Visible := .F. beim Menüaufbau scheint nichts zu nutzen.
Weiß jemand wie das geht, dass das Top-Menü erst nach dem kompletten Aufbau angezeigt wird?
Zuletzt geändert von DelUser01 am Fr, 06. Apr 2018 2:14, insgesamt 1-mal geändert.
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: MenuBar() und :LockUpdate() o.ä möglich?
mit (Ownerdraw) Menu in XbpCRT() habe ich keine Erfahrung was deine Erkenntnisse angeht.
wenn du nun Ownerdraw Menu machst "könnte" man vielleicht einen Schalter "lSHOW" setzen.
ausgehend vom Beispiel \SOURCE\samples\basics\OWNERDRW\MENUS.prg
Code: Alles auswählen
// horizontal
FUNCTION DrawMenubarItem( oDlg, oMbar, oPS, aInfo, lSHOW )
//vertikal
METHOD XbpImageMenu:DrawItem( oPS, aInfo , lSHOW )
gruss by OHR
Jimmy
Jimmy
Re: MenuBar() und :LockUpdate() o.ä möglich?
Hallo Jimmy
Du nenst ads lShow ich habe dasselbe mit lVisible in meinem Beitrag geschrieben.
Da scheint eben auch keine Wirkung zu zeigen.
Du nenst ads lShow ich habe dasselbe mit lVisible in meinem Beitrag geschrieben.
Da scheint eben auch keine Wirkung zu zeigen.
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: MenuBar() und :LockUpdate() o.ä möglich?
wie schon gesagt habe ich es noch nicht probiert aber beim Ownerdraw hat man ja die Kontrolle "was" und "wo" man was anzeigt. so lange lShow = .F. "malst" du nichts ... oder ausserhalb des Sicht Bereich ( negative Koordinaten )
Tip : falls lShow als Parameter im "Xbase++ GUI Thread" nicht funktioniert dann über eine Function auslagern.
Code: Alles auswählen
FUNCTION ShowIt(lValue)
STATIC lShow := .F.
IF PCOUNT() > 0
lShow := lValue
ENDIF
RETURN lShow
ich bin kein Fan von "freien" XbpCRT() Fenstern. XbpCRT() sind IMHO Client Fenstern.
Ich habe lieber ein XbpDialog() als Parent für ein XbpCRT() Fenstern.
Da gibt es auch (weniger) Problem im Zusammenspiel mit dem Menu oder anderen XbParts.
gruss by OHR
Jimmy
Jimmy
Re: MenuBar() und :LockUpdate() o.ä möglich?
Hallo Jimmy
bin der Sache auf der Spur:
In XbpImageMenu():DrawItem ist :LockUpdate() nicht implementiert.
Das habe ich jetzt eingebaut.
Nun muss ich noch herausfinden wie man die Top-Manü-BAr neu zeichnet. Jetzt zeigt er gerade nur einen leeren Balken und wenn man drüberfährt tauchen die Elemente auf.
oMenuBar:InvalidateRect hilft nicht, eventuell muss ich das über alle Objekte rekursiv machen...
bin der Sache auf der Spur:
In XbpImageMenu():DrawItem ist :LockUpdate() nicht implementiert.
Das habe ich jetzt eingebaut.
Nun muss ich noch herausfinden wie man die Top-Manü-BAr neu zeichnet. Jetzt zeigt er gerade nur einen leeren Balken und wenn man drüberfährt tauchen die Elemente auf.
oMenuBar:InvalidateRect hilft nicht, eventuell muss ich das über alle Objekte rekursiv machen...
Re: MenuBar() und :LockUpdate() o.ä möglich?
Habe einen möglichen Weg gefunden:
Mit eigener MenuBarLockUpdate() und MS API DrawMenuBar()
MenüBar erstellen
Nebeneffekt - gemessene Laufzeit im Durchschnitt:
ohne Lock: 0.28 bis 030 Sekunden
mit Lock: 0.21 bis 0.23 Sekunden
also ca. 25% schneller mit Lock!
Mit eigener MenuBarLockUpdate() und MS API DrawMenuBar()
Code: Alles auswählen
DLLFUNCTION DrawMenuBar( nWindowHandle ) ;
Using STDCALL ;
From USER32.DLL
---
Function MenuBarLockUpdate( lSet , oXbpCrt )
Static lLock := .F.
If ValType( lSet ) == "L"
lLock := lSet
If ! lLock
DrawMenuBar( oXbpCrt:GetHwnd() )
EndIf
EndIf
EndIf
Return( lLock )
---
in DrawBarItem gleich zu Beginn:
If MenuBarLockUpdate()
Return oMBar
EndIf
:
Code: Alles auswählen
oMenuBar := oXbpCrt:MenuBar()
MenuBarLockUpdate( .T. )
:
...das Menü zusammenstellen...
:
MenuBarLockUpdate( .F. , oXbpCrt )
ohne Lock: 0.28 bis 030 Sekunden
mit Lock: 0.21 bis 0.23 Sekunden
also ca. 25% schneller mit Lock!