XbpMenu Position ermitteln

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Stephan1959
Rookie
Rookie
Beiträge: 11
Registriert: Mo, 20. Mai 2024 17:13

XbpMenu Position ermitteln

Beitrag von Stephan1959 »

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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2871
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 134 Mal
Danksagung erhalten: 31 Mal

Re: XbpMenu Position ermitteln

Beitrag von georg »

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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Stephan1959
Rookie
Rookie
Beiträge: 11
Registriert: Mo, 20. Mai 2024 17:13

Re: XbpMenu Position ermitteln

Beitrag von Stephan1959 »

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
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14918
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 37 Mal
Danksagung erhalten: 130 Mal
Kontaktdaten:

Re: XbpMenu Position ermitteln

Beitrag von Jan »

Stephan,

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.
RolandG
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 377
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Hat sich bedankt: 2 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: XbpMenu Position ermitteln

Beitrag von RolandG »

@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...?
Gruß
Roland
Benutzeravatar
Slavko
Cut&Paste-Entwickler
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

Beitrag von Slavko »

Hi,

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
RolandG
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 377
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Hat sich bedankt: 2 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: XbpMenu Position ermitteln

Beitrag von RolandG »

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
Stephan1959
Rookie
Rookie
Beiträge: 11
Registriert: Mo, 20. Mai 2024 17:13

Re: XbpMenu Position ermitteln

Beitrag von Stephan1959 »

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
RolandG
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 377
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Hat sich bedankt: 2 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: XbpMenu Position ermitteln

Beitrag von RolandG »

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
Gruß
Roland
Benutzeravatar
azzo
1000 working lines a day
1000 working lines a day
Beiträge: 885
Registriert: So, 28. Mär 2010 19:21
Hat sich bedankt: 14 Mal
Danksagung erhalten: 21 Mal

Re: XbpMenu Position ermitteln

Beitrag von azzo »

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.


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


RolandG
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 377
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Hat sich bedankt: 2 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: XbpMenu Position ermitteln

Beitrag von RolandG »

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.
Gruß
Roland
Antworten

Zurück zu „Allgemeine Fragen“