AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Popupmenü zur Laufzeit erweitern

Ein Thema von JSB · begonnen am 15. Dez 2005 · letzter Beitrag vom 9. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
JSB

Registriert seit: 4. Okt 2004
Ort: Mönchengladbach
150 Beiträge
 
Delphi 7 Enterprise
 
#1

Popupmenü zur Laufzeit erweitern

  Alt 15. Dez 2005, 14:21
Hallo!

Wie erweitere ich einen Popup (um ein paar Einträge) zur laufzeit?
Werde warscheinlich die "Objekte" zur laufzeit erstellen müssen. Aber wie?



Danke im Vorraus.
MFG:
JoeSchnapsBurner
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#2

Re: Popupfenster zur Laufzeit erweitern

  Alt 15. Dez 2005, 14:46
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Popupfenster zur Laufzeit erweitern

  Alt 15. Dez 2005, 14:46
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
  Mit Zitat antworten Zitat
JSB

Registriert seit: 4. Okt 2004
Ort: Mönchengladbach
150 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Popupmenü zur Laufzeit erweitern

  Alt 15. Dez 2005, 17:15
Hallo!

Leider benutze ich nicht TMenuItem sondern TTBCustomItem.

A := TMenuItem.Create(Self); Funktioniert so nicht....

Was kann ich in diesem Fall benutzen?
MFG:
JoeSchnapsBurner
  Mit Zitat antworten Zitat
JSB

Registriert seit: 4. Okt 2004
Ort: Mönchengladbach
150 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Popupmenü zur Laufzeit erweitern

  Alt 19. Dez 2005, 17:03
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.
MFG:
JoeSchnapsBurner
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: Popupmenü zur Laufzeit erweitern

  Alt 19. Dez 2005, 17:35
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
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Popupmenü zur Laufzeit erweitern

  Alt 19. Dez 2005, 17:58
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
  Mit Zitat antworten Zitat
JSB

Registriert seit: 4. Okt 2004
Ort: Mönchengladbach
150 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Popupmenü zur Laufzeit erweitern

  Alt 22. Dez 2005, 13:23
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?
MFG:
JoeSchnapsBurner
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#9

Re: Popupmenü zur Laufzeit erweitern

  Alt 22. Dez 2005, 13:26
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;
  Mit Zitat antworten Zitat
JSB

Registriert seit: 4. Okt 2004
Ort: Mönchengladbach
150 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Popupmenü zur Laufzeit erweitern

  Alt 22. Dez 2005, 14:01
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;


Hab ich es richtig verstanden ?

ich brauche eine TEdit die ich zu dem Popupmenü "zuweisen" (zuweisen? in wie fern?) muss?
MFG:
JoeSchnapsBurner
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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