Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TadvMainMenu (https://www.delphipraxis.net/182147-tadvmainmenu.html)

Walter Landwehr 4. Okt 2014 09:39

TadvMainMenu
 
Hallo,

Kann mir einer sagen wie ich zur Laufzeit Untermenü punkte im TadvMain Menu erzeuge.

Delphi-Quellcode:
  AdvMenu.BeginUpdate;
  While not BausteineQry.Eof do
  begin
     item := TMenuItem.Create(Self);
    Item.Caption := BausteineQry.FieldByName('Suchwort').AsString;
    Item.OnClick := InsertTextbaustein;
    AdvMenu.Items[3].Insert(7,Item); ----------> Hier musß ein Problem sein
    BausteineQry.Next;
  end;
  AdvMenu.EndUpdate;
Der obige Code fügt zwar Menuüunkte ein abder keine Submenüs.

Vielen Dank schon mal für die Hilfe.

zeras 4. Okt 2014 10:34

AW: TadvMainMenu
 
Bei einem normalen Menu musst du einfach den Namen des Punktes übergeben, welches der Ausgangspunkt des Untermenus sein soll. Das müsste bei TMS auch so sein.
Bei mir sieht das so aus:

Delphi-Quellcode:
        NewItem := TMenuItem.Create(NamedesMenuüunktes); //<-- hier kein self

Walter Landwehr 4. Okt 2014 11:20

AW: TadvMainMenu
 
Hallo,

hab ich mal abgeändert, mit dem gleichen Ergebnis. Es werden immer Menu punkte aber keine Submenüpunkte erstellt.

zeras 4. Okt 2014 11:48

AW: TadvMainMenu
 
Mit TMS geht es auch bei mir nicht.
Dann vielleicht in den Newsgroup von TMS nachfragen.

Volker Z. 4. Okt 2014 21:11

AW: TadvMainMenu
 
Hallo,

Zitat:

Kann mir einer sagen wie ich zur Laufzeit Untermenü punkte im TadvMain Menu erzeuge
Delphi-Quellcode:
  [...]
  AdvMenu.Items[3].Insert(7,Item);
Der obige Code fügt zwar Menuüunkte ein abder keine Submenüs
:shock: :gruebel: Was willst Du den eigentlich erreichen?

Soll Deine Menüstruktur in etwa so aussehen?
Code:
Datei | Bearbeiten | Ansicht | Textbausteine       <-- AdvMenu.Items [3]
                                Neu...             <-- AdvMenu.Items [3].Items [0]
                                Öffnen...          <-- AdvMenu.Items [3].Items [1]
                                Löschen...         <-- AdvMenu.Items [3].Items [2]
                                Organisieren...    <-- AdvMenu.Items [3].Items [3]
                                Reorganisieren...  <-- AdvMenu.Items [3].Items [4]
                                Zerlegen...        <-- AdvMenu.Items [3].Items [5]
                                Zusammenführen...  <-- AdvMenu.Items [3].Items [6]
                                                   <-- hier was einfügen ??
Oder sollte es in etwa so aussehen:
Code:
Datei | Bearbeiten | Ansicht | Extras                <-- AdvMenu.Items [3]
                                Extra (0)
                                Extra (1)
                                Extra (2)
                                Extra (3)
                                Extra (4)
                                Extra (5)
                                Extra (6)
                                Textbausteine        <-- AdvMenu.Items [3].Items [7]
                                  Textbaustein (0)   <-- ab hier was einfügen ??
                                  Textbaustein (1)
Wenn ich Deinen Post richtig interpretiere, dann möchtest Du etwas wie in Variante II erreichen - oder(?) -, und: Dann,
Delphi-Quellcode:
  AdvMenu.BeginUpdate;
  While not BausteineQry.Eof do
  begin
    [...]
    AdvMenu.Items[3].Insert(7,Item); ----------> Hier musß ein Problem sein
    [...]
  end;
  AdvMenu.EndUpdate;
hast Du das schon richtig erkannt.

Es könnte:
Delphi-Quellcode:
  AdvMenu.BeginUpdate;
  While not BausteineQry.Eof do
  begin
    [...]
    AdvMenu.Items [3].Items [7].Add (Item);
    [...]
  end;
  AdvMenu.EndUpdate;
in die richtige Richtung gehen.

Allerdings würde ich auf die hardcodierten Indizes verzichten und die Referenz des entsprechende Menüpunkts zur Laufzeit ermitteln; also irgendwie so:
Delphi-Quellcode:
procedure TForm.AddTextBlockItems;
var
  p : TMenuItem;
begin
  p := GetTextBlockMainItem;
  AdvMenu.BeginUpdate;
  try
    while not BausteineQry.Eof do
      begin
        item := TMenuItem.Create (nil);
        item.Caption := BausteineQry.FieldByName('Suchwort').AsString;
        item.OnClick := InsertTextbaustein;

        p.Add (Item);

        BausteineQry.Next
      end
  finally
    AdvMenu.EndUpdate
  end
end;
Aber, das ist alles stochern im Nebel. Vielleicht bringst Du mal etwas Licht (Erläuterung, Screenshot, etc.) in die Geschichte.

Gruß

Walter Landwehr 5. Okt 2014 09:18

AW: TadvMainMenu
 
Danke Volker,

diese Zeile war der entscheidende Tipp:

AdvMenu.Items [3].Items [7].Add (Item);

Nun funktioniert alles richtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 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