![]() |
Popupmenü zur Laufzeit erweitern
Hallo!
Wie erweitere ich einen Popup (um ein paar Einträge) zur laufzeit? Werde warscheinlich die "Objekte" zur laufzeit erstellen müssen. Aber wie? :gruebel: Danke im Vorraus. |
Re: Popupfenster zur Laufzeit erweitern
Hallo,
du solltest deinen Titel in PopupMenü ändern, da es sonst wohl schlecht gefunden wird in Zukunft. Zur Frage: Du brauchst dazu eine Variable vom Typ TMenuItem. In der Hilfe findest du einiges dazu. Hier ein kurzes Beispiel:
Delphi-Quellcode:
Du könntest dir natürlich auch ein Array vom Typ TMenuItem erstellen, aber ich denke das sollte dir als Grundlage erstmal ausreichen.
var
I: Integer; A: TMenuItem; SL: TStringList; begin SL := TStringList.Create; //Items der Stringliste laden oder sonstwas mit machen SL.Add('1'); SL.Add('Test'); // ich habe hier eine TStringListe mit den Items for I := 0 to SL.Count - 1 do begin A := TMenuItem.Create(Self); //A.RadioItem := True; // Wenn du willst, dass es RadioItems (Kreise) sind //A.GroupIndex := 1; // -dito- A.AutoCheck := True; // Autom. markieren bei Klick an A.Caption := SL[I]; // Text A.Hint := SL[I]; // Hinweis-Text A.OnClick := MenuClick; // Diese Prozedur reagiert auf die Klicks A.Tag := I; // Um später gezielt darauf zugreifen zu können, speichern wir den SL Index als Tag ab. ... MeinPopUpMenu.Items.Add(A); // Fügt das Item zum Popupmenü end; SL.Free; end; |
Re: Popupfenster zur Laufzeit erweitern
Oder so:
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.FormCreate(Sender: TObject);
var mi: TMenuItem; begin mi := NewItem('So geht''s', TextToShortCut('F9'), false, true, F9Click, 0, ''); PopupMenu.Items.Add(mi); end; |
Re: Popupmenü zur Laufzeit erweitern
Hallo!
Leider benutze ich nicht TMenuItem sondern TTBCustomItem.
Delphi-Quellcode:
Funktioniert so nicht.... :cry:
A := TMenuItem.Create(Self);
Was kann ich in diesem Fall benutzen? |
Re: Popupmenü zur Laufzeit erweitern
Hallo!
Hab mich mit dem Standart abfinden müssen. Wäre trotzdem net wenn jemand noch was schreiben könnte wenn er TTBCustomItem kennt. Allerdings (ja.. ja... das hätte ich mir vorher überlegen sollen....) will ich abfragen was der Anwender nun gewählt hat. Da es beliebig viele (oder wenige) TMenuItem's sind, kann ich doch keine Procedur zur Laufzeit erstellen die die Auswahl abfängt, ..oder? In den Ereignissen der Popup-Komponente finde ich nix passendes. |
Re: Popupmenü zur Laufzeit erweitern
Hallo,
das gewählte Item kannst Du mit PopupComponent herrausfinden. Ein Beispiel aus der Delphi-Hilfe:
Delphi-Quellcode:
Zum Thema TTBCustomItem lies mal das:
procedure TForm1.Copy1Click(Sender: TObject);
begin if PopupMenu1.PopupComponent = Edit1 then Edit1.CopyToClipboard //... ![]() |
Re: Popupmenü zur Laufzeit erweitern
Beim Hinzufügen eines items ist kein großer Unterschied zwischen TPopupMenu und TTBPopupMenu:
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.CustomItemClick(Sender: TObject);
begin with Sender as TTBItem do ShowMessage(IntToStr(Tag)); end; procedure TDemoForm.IdontCare; var item: TTBItem; begin item := TTBItem.Create(self); with item do begin Caption := '&Whatsup?'; OnClick := CustomItemClick; Tag := ContextPopupMenu.Items.Count; end; ContextPopupMenu.Items.Add(item); end; |
Re: Popupmenü zur Laufzeit erweitern
Zitat:
|
Re: Popupmenü zur Laufzeit erweitern
Da es dynamisch erstellt wird, existiert es zur Designzeit logischerweise noch nicht.
Daher musst du das Popupmenü den Edits (z.b. nach deren Erstellung zuweisen). Klickt dann der Benutzer auf bspw. Copy1, prüfst du in der Routine, um welches Edit es sich handelt und führst dann den Code (CopyToClipboard) aus. Beispiel:
Delphi-Quellcode:
if Sender is TEdit then
(Sender as TEdit).CopyToClipBoard; |
Re: Popupmenü zur Laufzeit erweitern
Zitat:
Hab ich es richtig verstanden ?:? ich brauche eine TEdit die ich zu dem Popupmenü "zuweisen" (zuweisen? in wie fern?) muss? :oops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz