Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Popupmenü zur Laufzeit erweitern (https://www.delphipraxis.net/58987-popupmenue-zur-laufzeit-erweitern.html)

JSB 15. Dez 2005 13:21


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.

dahead 15. Dez 2005 13:46

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:
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;
Du könntest dir natürlich auch ein Array vom Typ TMenuItem erstellen, aber ich denke das sollte dir als Grundlage erstmal ausreichen.

marabu 15. Dez 2005 13:46

Re: Popupfenster zur Laufzeit erweitern
 
Oder so:

Delphi-Quellcode:
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;
Grüße vom marabu

JSB 15. Dez 2005 16:15

Re: Popupmenü zur Laufzeit erweitern
 
Hallo!

Leider benutze ich nicht TMenuItem sondern TTBCustomItem.

Delphi-Quellcode:
A            := TMenuItem.Create(Self);
Funktioniert so nicht.... :cry:

Was kann ich in diesem Fall benutzen?

JSB 19. Dez 2005 16:03

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.

Lannes 19. Dez 2005 16:35

Re: Popupmenü zur Laufzeit erweitern
 
Hallo,

das gewählte Item kannst Du mit PopupComponent herrausfinden.
Ein Beispiel aus der Delphi-Hilfe:
Delphi-Quellcode:
procedure TForm1.Copy1Click(Sender: TObject);
begin
  if PopupMenu1.PopupComponent = Edit1 then
   Edit1.CopyToClipboard
//...
Zum Thema TTBCustomItem lies mal das:
http://www.delphi-forum.de/viewtopic...e3196d5#230569

marabu 19. Dez 2005 16:58

Re: Popupmenü zur Laufzeit erweitern
 
Beim Hinzufügen eines items ist kein großer Unterschied zwischen TPopupMenu und TTBPopupMenu:

Delphi-Quellcode:
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;
Grüße vom marabu

JSB 22. Dez 2005 12:23

Re: Popupmenü zur Laufzeit erweitern
 
Zitat:

Zitat von Lannes
Hallo,

das gewählte Item kannst Du mit PopupComponent herrausfinden.
Ein Beispiel aus der Delphi-Hilfe:
Delphi-Quellcode:
procedure TForm1.Copy1Click(Sender: TObject);
begin
  if PopupMenu1.PopupComponent = Edit1 then
   Edit1.CopyToClipboard
//...
Zum Thema TTBCustomItem lies mal das:
http://www.delphi-forum.de/viewtopic...e3196d5#230569

Leider erkennt Delphi Edit1 aber nicht weil Edit1 zur Zeit der Compilierung nicht existiert. Außerdem: In welches Ereigniss sollte ich das reinbringen? :?: :cry: :cry:

dahead 22. Dez 2005 12:26

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;

JSB 22. Dez 2005 13:01

Re: Popupmenü zur Laufzeit erweitern
 
Zitat:

Zitat von dahead
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;

:wiejetzt:

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 16:23 Uhr.
Seite 1 von 2  1 2      

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