XbpMenu Position ermitteln
Moderator: Moderatoren
-
- Rookie
- Beiträge: 11
- Registriert: Mo, 20. Mai 2024 17:13
XbpMenu Position ermitteln
Hallo zusammen,
habe folgendes Problem:
Ich möchte ein XbpMenu dynamisch mit Items erstellen.
Das funktioniert soweit auch.
Jetzt soll abhängig vom gewählten Item ein PopUpMenu genau neben dem Eintrag angezeigt werden, welches abhängig vom gewählten Item unterschiedlich aufgebaut wird.
oMenu:itemSelected := {| nItemIndex, uNIL, self | test( nItemIndex, uNil, self ) }
PROCEDURE test( p1, p2, p3 )
LOCAL oSubMenu
oSubMenu := XbpMenu():new( SetAppWindow():MenuBar() ):create()
oSubMenu:addItem( { "~Belege bearbeiten", NIL } )
oSubMenu:addItem( { "B~elege drucken", NIL } )
oSubMenu:popup( SetAppWindow(), { 100, 100 } )
RETURN
Wie kann ich für :popup die richtigen Koordinaten ermitteln ?
Hat jemand eine Idee ?
Gruß Stephan
habe folgendes Problem:
Ich möchte ein XbpMenu dynamisch mit Items erstellen.
Das funktioniert soweit auch.
Jetzt soll abhängig vom gewählten Item ein PopUpMenu genau neben dem Eintrag angezeigt werden, welches abhängig vom gewählten Item unterschiedlich aufgebaut wird.
oMenu:itemSelected := {| nItemIndex, uNIL, self | test( nItemIndex, uNil, self ) }
PROCEDURE test( p1, p2, p3 )
LOCAL oSubMenu
oSubMenu := XbpMenu():new( SetAppWindow():MenuBar() ):create()
oSubMenu:addItem( { "~Belege bearbeiten", NIL } )
oSubMenu:addItem( { "B~elege drucken", NIL } )
oSubMenu:popup( SetAppWindow(), { 100, 100 } )
RETURN
Wie kann ich für :popup die richtigen Koordinaten ermitteln ?
Hat jemand eine Idee ?
Gruß Stephan
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2872
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 134 Mal
- Danksagung erhalten: 31 Mal
Re: XbpMenu Position ermitteln
Hallo, Stephan -
schau doch mal hier rein: https://www.xbaseforum.de/viewtopic.php ... enu#p37956
Allerdings habe ich das Original nicht mit der Suche lokalsieren können.
schau doch mal hier rein: https://www.xbaseforum.de/viewtopic.php ... enu#p37956
Allerdings habe ich das Original nicht mit der Suche lokalsieren können.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
-
- Rookie
- Beiträge: 11
- Registriert: Mo, 20. Mai 2024 17:13
Re: XbpMenu Position ermitteln
Hallo Georg,
Der Link beschreibt die Vorgehensweise für ein Contextmenu welches dort dargestellt wird wo die Maustaste gedrückt wird.
Ich benötige allerdings die Koordinaten vom ausgelösten Menuitem.
Grüße Stephan
Der Link beschreibt die Vorgehensweise für ein Contextmenu welches dort dargestellt wird wo die Maustaste gedrückt wird.
Ich benötige allerdings die Koordinaten vom ausgelösten Menuitem.
Grüße Stephan
- Jan
- Marvin
- Beiträge: 14927
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 130 Mal
- Kontaktdaten:
Re: XbpMenu Position ermitteln
Stephan,
kannst Du da eventuell :lbDown abfragen? Da wäre die Position der zweite Paramter im Codeblock.
Jan
kannst Du da eventuell :lbDown abfragen? Da wäre die Position der zweite Paramter im Codeblock.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 384
- Registriert: Mi, 09. Jan 2019 16:02
- Wohnort: Neresheim
- Hat sich bedankt: 5 Mal
- Danksagung erhalten: 18 Mal
- Kontaktdaten:
Re: XbpMenu Position ermitteln
@Stephan
Frage:
wenn Du auf ein Menü-Item klickst verschwindet doch das (Sub?-)Menü.
Falls Du die Koordinaten des geklickten Item hättest würde Dein Pop-Up doch optisch dann in der Luft hängen...?
Frage:
wenn Du auf ein Menü-Item klickst verschwindet doch das (Sub?-)Menü.
Falls Du die Koordinaten des geklickten Item hättest würde Dein Pop-Up doch optisch dann in der Luft hängen...?
Gruß
Roland
Roland
- Slavko
- Cut&Paste-Entwickler
- Beiträge: 42
- Registriert: Mi, 20. Dez 2023 11:03
- Wohnort: Negotin
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 7 Mal
- Kontaktdaten:
Re: XbpMenu Position ermitteln
Hi,
Try GetPointerPos(). Or, in oSubMenu:beginMenu() method examine ::currentPos().
Try GetPointerPos(). Or, in oSubMenu:beginMenu() method examine ::currentPos().
Slavoljub Damnjanovic
SD-SoftDesign, Alaska Software Technology Partner
https://www.sd-softdesign.com
https://www.sd-softdesign.rs
SD-SoftDesign, Alaska Software Technology Partner
https://www.sd-softdesign.com
https://www.sd-softdesign.rs
-
- Rekursionen-Architekt
- Beiträge: 384
- Registriert: Mi, 09. Jan 2019 16:02
- Wohnort: Neresheim
- Hat sich bedankt: 5 Mal
- Danksagung erhalten: 18 Mal
- Kontaktdaten:
Re: XbpMenu Position ermitteln
ich verwende ein "owner-drawn menu", da müsste man die TextBox-Werte abfragen bzw. bereits bei der Menü-Erzeugung bei Bedarf zwischenspeichern können.
Gruß
Roland
Roland
-
- Rookie
- Beiträge: 11
- Registriert: Mo, 20. Mai 2024 17:13
Re: XbpMenu Position ermitteln
Hallo Roland,
hast du eine Idee wie ich das realisieren kann.
Es soll ein xbpmenu mit Belegarten( rechnung,Gutschrift etc. ) erzeugt werden .
Abhängig vom gewählten Eintrag soll ein Submenu öffnen mit Items abhängig vom gewählten Item im übergeordneten Menu( Rechnung bearbeiten,Rechnung drucken,etc. )
Hast du eine Idee ?
Gruß
Stephan
hast du eine Idee wie ich das realisieren kann.
Es soll ein xbpmenu mit Belegarten( rechnung,Gutschrift etc. ) erzeugt werden .
Abhängig vom gewählten Eintrag soll ein Submenu öffnen mit Items abhängig vom gewählten Item im übergeordneten Menu( Rechnung bearbeiten,Rechnung drucken,etc. )
Hast du eine Idee ?
Gruß
Stephan
-
- Rekursionen-Architekt
- Beiträge: 384
- Registriert: Mi, 09. Jan 2019 16:02
- Wohnort: Neresheim
- Hat sich bedankt: 5 Mal
- Danksagung erhalten: 18 Mal
- Kontaktdaten:
Re: XbpMenu Position ermitteln
in den Samples von Xbase++ ist ein MENUS.PRG mit "owner-drawn menu".
Das habe ich als Vorlage genommen und umgebaut.
Wenn Du hier im Forum nach "ownerdrw" suchst findest Du Beiträge mit verschiedenen Problemstellungen dazu.
...\Dokumente\Xbase++\source\samples\basics\ownerdrw\menus.prg
Das habe ich als Vorlage genommen und umgebaut.
Wenn Du hier im Forum nach "ownerdrw" suchst findest Du Beiträge mit verschiedenen Problemstellungen dazu.
...\Dokumente\Xbase++\source\samples\basics\ownerdrw\menus.prg
Gruß
Roland
Roland
- azzo
- 1000 working lines a day
- Beiträge: 919
- Registriert: So, 28. Mär 2010 19:21
- Hat sich bedankt: 15 Mal
- Danksagung erhalten: 21 Mal
Re: XbpMenu Position ermitteln
ChatGPT schlägt vor:
Hier ist ein kleines, vollständiges Beispiel für ein dynamisch erzeugtes Menü mit Submenüs, bei dem die Popup-Position automatisch berechnet wird – funktioniert mit Maus und Tastatur:
Was zeigt dieses Beispiel?
Hauptmenü wird dynamisch aus einer Liste (aBaseItems) aufgebaut.
Jeder Menüpunkt erhält automatisch eine feste Popup-Position.
Der Benutzer kann das Menü mit Maus oder Tastatur bedienen.
Beim Klick oder Drücken von ENTER wird ein kontextabhängiges Submenü geöffnet.
Hier ist ein kleines, vollständiges Beispiel für ein dynamisch erzeugtes Menü mit Submenüs, bei dem die Popup-Position automatisch berechnet wird – funktioniert mit Maus und Tastatur:
Was zeigt dieses Beispiel?
Hauptmenü wird dynamisch aus einer Liste (aBaseItems) aufgebaut.
Jeder Menüpunkt erhält automatisch eine feste Popup-Position.
Der Benutzer kann das Menü mit Maus oder Tastatur bedienen.
Beim Klick oder Drücken von ENTER wird ein kontextabhängiges Submenü geöffnet.
PROCEDURE Main()
LOCAL oWnd, oMenu, aBaseItems, aMenuItems, i, nStartY
oWnd := SetAppWindow()
oWnd:title := "Dynamisches Menü mit Submenus"
oWnd:create()
oMenu := XbpMenu():new( oWnd ):create()
// Dynamische Menüeinträge (z. B. aus DB, Datei, User-Rolle etc.)
aBaseItems := { "Rechnung", "Gutschrift", "Storno" }
// Popup-Positionen automatisch berechnen
aMenuItems := {}
nStartY := 300
FOR i := 1 TO Len( aBaseItems )
AAdd( aMenuItems, { "~" + aBaseItems, {150, nStartY - (i - 1) * 30} } )
oMenu:addItem( { aMenuItems[1], NIL } )
NEXT
// Callback, wenn Menüpunkt ausgewählt wird
oMenu:itemSelected := {|nIndex,uNil,self| ShowSubMenu(nIndex, aMenuItems) }
oWnd:menuBar := oMenu
oWnd:show()
RETURN
//------------------------------------------------------------------
PROCEDURE ShowSubMenu( nIndex, aMenuItems )
LOCAL oSubMenu, aPos
aPos := aMenuItems[nIndex][2]
oSubMenu := XbpMenu():new( SetAppWindow():MenuBar() ):create()
DO CASE
CASE nIndex == 1
oSubMenu:addItem( { "~Bearbeiten", NIL } )
oSubMenu:addItem( { "~Drucken", NIL } )
CASE nIndex == 2
oSubMenu:addItem( { "Gutschrift ~anzeigen", NIL } )
oSubMenu:addItem( { "Gutschrift ~löschen", NIL } )
CASE nIndex == 3
oSubMenu:addItem( { "Storno-~Vorschau", NIL } )
ENDCASE
oSubMenu:popup( SetAppWindow(), aPos )
RETURN
-
- Rekursionen-Architekt
- Beiträge: 384
- Registriert: Mi, 09. Jan 2019 16:02
- Wohnort: Neresheim
- Hat sich bedankt: 5 Mal
- Danksagung erhalten: 18 Mal
- Kontaktdaten:
Re: XbpMenu Position ermitteln
Hallo Stephan
ich kann Dir per PN mein Owner-Draw Menü zukommen lassen. Du musst die Stellen anpassen wo ich Funktionen meiner weiteren Libs eingebunden habe.
ich kann Dir per PN mein Owner-Draw Menü zukommen lassen. Du musst die Stellen anpassen wo ich Funktionen meiner weiteren Libs eingebunden habe.
Gruß
Roland
Roland