Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Speedbutton mit Hauptmenuepunkt? (https://www.delphipraxis.net/187309-speedbutton-mit-hauptmenuepunkt.html)

Mattze 18. Nov 2015 11:21

Speedbutton mit Hauptmenuepunkt?
 
Hallo,

wie kann man einem Speedbutton ein Menuitem (sprich: das zugehörige "Popup"-Menue) zuordnen.

Wäre in meinem Falle günstiger als ein weiterer TToolbutton.

Gruß
Mattze

haentschman 18. Nov 2015 11:27

AW: Speedbutton mit Hauptmenuepunkt?
 
Moin...8-)

zuordnen gar nicht. Du kannst das Popupmenü selbst positionieren, öffen und schließen. :P

Wer lesen kann ist klar im Vorteil. :P Die Property PopupMenu gibt´s doch...

mikhal 18. Nov 2015 11:31

AW: Speedbutton mit Hauptmenuepunkt?
 
Willst du ein Popup-Menu dem SpeedButton zuordnen? Dann der Eigenschaft PopupMenu das entsprechenden PopupMenu Zuweisen.

Soll der SpeedButton die gleiche Aufgabe wie das MenuItel erfüllen: TAction anschauen

Grüße
Mikhal

Mattze 18. Nov 2015 11:37

AW: Speedbutton mit Hauptmenuepunkt?
 
Hallo,

habe ich ja eigentlich geahnt!
Meinst Du mit dem Tipp, ein eigenes Popupmenu mit den "gleichen Einträgen" wie im Hauptmenue basteln?

Daran hatte ich jedenfalls auch schon gedacht. Aber, irgendwie, war das wohl nicht sooo schön bequem...

Auf die Gefahr hin, dass ich jetzt einen lauten Aufschrei höre (obwohl ich gehörlos bin!):
Ich fand TAction immer ziemlich sinnlos. Vielleicht auch deshalb, weil ich das Konzept dahinter nicht richtig verstanden habe. Was hindert mich, mehreren Buttons die gleiche Onclick-Methode zuzuordnen. Was macht TAction besser?

Gruß
Mattze

Ralf Kaiser 18. Nov 2015 11:44

AW: Speedbutton mit Hauptmenuepunkt?
 
Zitat:

Zitat von Mattze (Beitrag 1321744)
Was macht TAction besser?

TAction verwaltet z.B. auch verschiedene Statuswerte (z.B. Enabled, GroupIndex, ImageIndex, Caption usw.) deren Änderung sich auf alle angehängten Clients auswirken. So kann man mit einer Zuweisung gleich alle Buttons/Menus/Popupmenus in- oder ausschalten. Außerdem können mit dem Update-Event einer TAction diese Eigenschaften verwaltet werden ohne selbst viele Statusvariablen verwalten zu müssen.

Mattze 18. Nov 2015 11:58

AW: Speedbutton mit Hauptmenuepunkt?
 
Hallo,

diese Möglichkeit von TAction habe ich vor ganz Kurzem erst bemerkt.
Wenn man einem Menupunkt ein Untermenu zuordnet, geht das automatische Checked setzen nur per TAction.

Komisch, aber (scheinbar) wahr.

Falls das nicht anders zu machen geht, werde ich wohl doch mal auf TAction übergehen müssen...

Gruß
Mattze

Perlsau 18. Nov 2015 12:10

AW: Speedbutton mit Hauptmenuepunkt?
 
@Mattze:

Offenbar hast du ein HauptMenü (TMainMenu) mit diversen Einträgen und dazu entsprechende Event-Handler. Nun möchtest du via Buttonklick eines dieser Events auslösen. Nichts leichter als das: Dem OnClick des Buttons weist du einfach den Event-Handler zu. Bei Verwendung von TAction weist du dem Action-Property einach das jeweilige TAction-Item zu; damit erhält dein Button dieselbe Caption und reagiert auf denselben Event-Handler.

Mattze 18. Nov 2015 17:39

AW: Speedbutton mit Hauptmenuepunkt?
 
Hallo,

das ist schon klar und kein Problem.

Meine Frage, vielleicht deutlicher:
Ich habe ein Hauptmenu mit 4 Items (Datei, Bearbeiten, Ansicht, Hilfe).
An den Items hängen dann natürlich die "Untermenüs" dran.
Mein Problem:
Ich möchte das "Untermenü", das an Hilfe hängt, über einen Speedbutton aufrufen.
Bloß wie? Einen Namen hat es ja nicht, oder?

Gruß
Mattze

nahpets 18. Nov 2015 18:17

AW: Speedbutton mit Hauptmenuepunkt?
 
Schau einfach nach:
Delphi-Quellcode:
  for i := 0 to Application.MainForm.Menu.Items.Count - 1 do begin
    ShowMessage(TMenuItem(Application.MainForm.Menu.Items[i]).Caption + #13
              + TMenuItem(Application.MainForm.Menu.Items[i]).Name);
  end;
Wenn Du ein Hauptmenü (TMainMenu) auf dem Formular hast, dann muss es (eigentlich) auch die entsprechenden Einträge für die Untermenüs geben und die müssten auch Namen haben.

Soll denn das Untermenü der Hilfe dann am Speedbutton erscheinen oder soll im Hauptmenü das Menü Hilfe aufgeklappt werden?

Suchst Du eher sowas hier? http://www.delphi-treff.de/tipps-tri...nu-aufklappen/

Captnemo 18. Nov 2015 19:03

AW: Speedbutton mit Hauptmenuepunkt?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ob ich dich richtig verstanden habe, weiß ich nicht genau.

Zitat:

Zitat von Mattze (Beitrag 1321774)
Bloß wie? Einen Namen hat es ja nicht, oder?

Gruß
Mattze

Ein Menupunkt z.B. Hilfe hat ganz sicher einen Namen. Wenn du ihn über die GUI angelegt hat, dann lautet er wahrscheinlich "Hilfe1". Dieses MenuItem hat dann Items, die selbst auch TMenuItems sind und eben als SubMenu angezeigt werden.
Jetzt könnte man denken, dass sich ein MenuItem auch einem zweiten Menu zuordnen ließe. Dem ist aber nicht so. Man erhält dann die Exception "Menü zweimal eingefügt".

Aber du könnte die dir einfach eine Kopie des Submenus in ein Popupmenu kopieren.

Ich habe mal einen Beispielcode angehängt. Ggf. ist das das was du machen willst. Ist natürlich nur ein Beispiel. Eigenschaften wie ImageIndex, SubMenuImages, Checked, Enabled usw. kannst du ja bei Bedarf selber noch ergänzen.

[Edit] Nach nochmaligem Lesen des Threads habe ich doch das Gefühl dich falsch verstanden zu haben. Aber je nach Delphiversion verfügt ein TButton über die Eigenschaften DropDownMenu und Style, den man auf bsSplitButton setzen kann und mit dem Popupmenu verbinden kann. Das ermöglicht dann vielleicht etwas in der Art, was du dir vorstellst [\Edit]

Perlsau 18. Nov 2015 22:48

AW: Speedbutton mit Hauptmenuepunkt?
 
Zitat:

Zitat von Mattze (Beitrag 1321774)
Hallo, das ist schon klar und kein Problem.

Was genau ist jetzt klar und kein Problem? Ich kann leider nicht hellsehen ...

Zitat:

Zitat von Mattze (Beitrag 1321774)
Meine Frage, vielleicht deutlicher:
Ich habe ein Hauptmenu mit 4 Items (Datei, Bearbeiten, Ansicht, Hilfe).
An den Items hängen dann natürlich die "Untermenüs" dran.
Mein Problem:
Ich möchte das "Untermenü", das an Hilfe hängt, über einen Speedbutton aufrufen.
Bloß wie? Einen Namen hat es ja nicht, oder?

Auch das, was du als "Untermenüs" bezeichnest, sind Items. Alle Einträge in deinem TMainMenu sind Items. Und vor allem: Alle Menü-Items, die du über den Menü-Designer anlegst, erfordern zwingend das Belegen der Name-Eigenschaft. Name, das ist der Name, den deine Menüeinträge angeblich nicht haben.

Die Frage ist doch: Hat das Menü-Item, das du ausführen möchtest, bereits einen Event-Handler? Oder wenn du diese Frage nicht verstehst, anders ausgedrückt: Hast du im Menü-Designer einen Doppelklick auf den Menü-Eintrag ausgeführt und dadurch eine Ereignisbehandlung erzeugt und dort Befehle eingetragen, die ausgeführt werden sollen, sobald der Anwender diesen Menü-Eintrag anklickt? Wenn es da noch keinen Eventhandler gibt, dann wird beim Klick auf diesen Menüeintrag auch nichts ausgeführt. Gibt es bereits einen Eventhandler, dann trage den bei deinem Button in OnClick ein. Was ist daran jetzt so schwierig?

Oder willst du gar nicht dieses Ereignis auslösen und das ausführen, was im Eventhandler zu diesem Menüeintrag steht, sondern lediglich das Menü an dieser Stelle aufklappen? Also irgendwie solltest du schon deutlich machen, was du eigentlich erreichen willst oder was genau es bedeutet, wenn du schreibst: Ich möchte das "Untermenü", das an Hilfe hängt, über einen Speedbutton aufrufen. Das Untermenü kannst du nicht aufrufen, du kannst lediglich den Eventhandler aufrufen. Du kannst auch keinen Button aufrufen, sondern lediglich dessen Eventhandler. Deine Ausdrucksweise ist nicht eindeutig ...

Mattze 19. Nov 2015 08:05

AW: Speedbutton mit Hauptmenuepunkt?
 
Hallo,

ich hatte eigentlich gehofft, dass ich mir den Umweg über das Popupmenue sparen und das "Hilfemenu" im Grunde als Popup am Speedbutton aufrufen kann.

Konkret:
Ich habe eine Toolbar, die mit dem Hauptmenue verknüpft ist.
Das Hilfemenue hätte ich aber gerne am rechten Rand und nicht als Toolbutton. (Ich möchte nur ein "?", keine Caption und die Dimensionen entsprechend einstellen. Das geht aber beim Toolbutton nicht! Wenn man in der Toolbar die Captions anzeigt, kann man den Button nicht mehr auf Bildgröße ändern, selbst, wenn man für den Toolbutton kein Caption angibt. Ist nur eine Kleinigkeit, sieht aber eben hübscher aus, wenn die Dimension des Schalters dem Bild entspricht!)
Also schreibe ich da einen Speedbutton hin. Das geht auch gut.
Das Problem war eben nur, wie kann ich mit dem Speedbutton das Hilfemenue direkt aufrufen und zwar positioniert am Hilfespeedbutton?

Aber mit dem Popup geht es auch. Wenn man da Ownerdraw:=true setzt, gibt es auch diese hässliche vertikalen Linie nicht mehr.

Gruß
Mattze

Perlsau 19. Nov 2015 08:46

AW: Speedbutton mit Hauptmenuepunkt?
 
Eines ist und bleibt mir völlig unverständlich: Wieso schreibt man nicht gleich genau das, was man erreichen will, statt erst mit etwas völlig anderem anzufangen? Von einer Toolbar lese ich jetzt zum ersten Mal. Hilfreich, da du wohl leichte Schwierigkeiten damit hast, dich verständlich auszudrücken, wäre mit Sicherheit auch eine visuelle "Erklärung", also ein Bild davon, wie das, was du erreichen möchtest, aussehen soll.

Du möchtest also neben deiner Toolbar bzw. neben dem Toolbutton, der mit den Items im Menü Hilfe verknüpft ist, diese Items anzeigen. Ist das jetzt so richtig?

Captnemo 19. Nov 2015 13:32

AW: Speedbutton mit Hauptmenuepunkt?
 
Ein Screenshot, wie es zur Zeit aussieht, wäre schon mal ein Anfang. Dann hätten wir besser eine Vorstellung von deinen Wünschen.

Des Weiteren denke ich, aber das ist nur meine Meinung, dass man a) das Mainmenu und seine Einträge dort lassen sollte, wo sie standardmäßig sind, weil jeder sie dort nun mal auch als erstes sucht und b) doppelte Menüs (ich meine natürlich nicht ein Popup für ein Listeneintrag) in einer Oberfläche Platzverschwendung ist. Aber wie gesagt, das ist nur meine Meinung.

Mattze 19. Nov 2015 13:36

AW: Speedbutton mit Hauptmenuepunkt?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Perlsau,

um den Ball zurückzuspielen: Ich dachte doch tatsächlich, Du würdest verstehen, worum es geht.

Im Anhang: So soll es aussehen und so sieht es jetzt aus!

Gruß
Mattze

Captnemo 19. Nov 2015 15:51

AW: Speedbutton mit Hauptmenuepunkt?
 
Na, dann hilft dir vielleicht das hier

Ähm...und wo ist der Unterschied zwischen den beiden Bildern?

Mattze 19. Nov 2015 18:55

AW: Speedbutton mit Hauptmenuepunkt?
 
Hallo,

wieso zwei Bilder? Ich habe doch nur eins geschickt!

Danke für den Link. Das kenne ich natürlich. Aber das war es eben auch nicht, was ich wollte.

Gruß
Mattze

Captnemo 19. Nov 2015 19:25

AW: Speedbutton mit Hauptmenuepunkt?
 
Stimmt. Ist nur ein Bild.

Aber dein Satz "So soll es aussehen und so sieht es jetzt aus" hatte mich zu dem Gedanken gebracht, dass es zwei Bilder wären, was leider auf meinem Bildschirm leicht so aussieht.

Aber jetzt aussieht wie es soll, was ist dann deine Problem?

bepe 19. Nov 2015 19:28

AW: Speedbutton mit Hauptmenuepunkt?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mir war gerade irgendwie danach... Wenn ich das Problem richtig überflogen habe, dann findest du im Anhang eine(n) Lösung(sansatz).

Das Package DPM registrieren, im FormCreate (oder ähnlichem) dem DynamicPopupMenu.MenuItems das Hilfemenü zuweisen und im Button Click öffnen. Beispielprojekt ist dabei.

ACHTUNG, WARNUNG, VORSICHT etc.: Das ist auf die Schnelle, billig und schlecht zusammen geschustert. Das sollte so, vermutlich, nicht in ein echtes Projekt kopiert werden (meinen Segen hast du). Das soll nur als Inspiration dienen. Also keinerlei Haftung :-D

Mattze 19. Nov 2015 19:35

AW: Speedbutton mit Hauptmenuepunkt?
 
Hallo Captnnemo,

das sehe ich auch so. Eigentlich hat es sich ja erledigt.
Aber irgendwie hat es sich offenbar verselbständigt und nun geht es immer weiter...

Also nochmals:

Allen einen großen Dank für Eure Mühe.
Ich hab's doch hinreichend schön hinbekommen.
Nicht zuletzt auch deswegen, weil mich Eure Tipps auch mal wieder den Wald sehen ließen, nicht nur die Bäume!

Gruß
Mattze


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz