Autor Beitrag
Atreyu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137


Delphi 7 Enterprise
BeitragVerfasst: Mo 26.11.07 20:23 
Ich möchte mein Popupmenü in der Laufzeit editieren, zB neue Menüs dazu oder wegmachen. Ich hab bisher noch nichts gefunden und kann es nur in der Umgebung von Derlphi verändern, geht das irgendwie?
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 26.11.07 20:34 
Klar geht das. z.B. so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var newItem: TMenuItem;
begin
  newItem := TMenuItem.Create(self);
  newItem.Caption := 'Neues Item';
  newItem.OnClick := Button1Click;
  PopupMenu1.Items.Add(newItem);
end;

_________________
We are, we were and will not be.
Atreyu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137


Delphi 7 Enterprise
BeitragVerfasst: Mo 26.11.07 20:40 
OH DANKE! Jetzt kann ich mein langersehntes neues Feature einbauen!
Atreyu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137


Delphi 7 Enterprise
BeitragVerfasst: Mo 26.11.07 22:30 
Oh, sorry, aber wenn cih etwas in einem Submenu added will?

Weil deine Funktion added mir das direkt ins popup, aber das muss in ein Submenü.

edit:

ausblenden Quelltext
1:
MenuSkins.Add(newItem);					


MenuSkins ist mein Submenu. So klappts, BIS auf die Tatsache, dass das erste item leer bleibt.

Also die Items werden in einer Schleife hinzugefügt, ich kriege die auch schön in eine Liste, nur leider fehlt die Caption im ersten Item des Submenüs.

Was fehlt?

und: Er springt ja beim Klick auf jedes der Items in eine procedure. Nur wie kriege ich in der procedure raus, welches Item jetzt das Event ausgelöst hat?


Zuletzt bearbeitet von Atreyu am Mo 26.11.07 22:42, insgesamt 1-mal bearbeitet
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mo 26.11.07 22:40 
meinst du so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var newItem: TMenuItem;
begin
  newItem := TMenuItem.Create(self);
  newItem.Caption := 'Neues Item';
  newItem.OnClick := Button1Click;
  PopupMenu1.Items[0].Add(newItem);  // Wobei 0 der index des submenüs ist
end;

?

// Edit: zeig mal deine Schleife. Vielleicht hast du nicht berücksichtigt das die zählung bei 0 beginnt?

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Atreyu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137


Delphi 7 Enterprise
BeitragVerfasst: Mo 26.11.07 22:59 
Beginnt bei 0, ja, spüielt aber keine Rolle, da ich ja Add nehme.

Ich habe jetzt Item[0] sowieso anderweitig belegt, ist also ander gelöst.

Nur kann ich (wie editiert oben) nicht ermittelt, auf welches Item der User geklickt hat. Wie kann ich das machen?
Ich lasse alle Items zu einer Funktion mit parameter Sender: TObject springen, aber dort muss ich ja wissen, welches Menuitem es genau war.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mo 26.11.07 23:12 
Ich hab das immer so gemacht dass ich tag entsprechend gesetzt habe.
Also in der Schleife z.B.

ausblenden Delphi-Quelltext
1:
MenuItem.tag := i;					


Und später kannst du dann in der Behandlungsroutine, im Beispiel war das ja Button1Click, so vorgehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  index: Integer;
begin
  index := (sender as TMenuItem).tag;
  case index of
    0: ;  // erstes item
    1: ;  // zweites item
    2: ;  // drittes item
  end;
end;


natürlich kannst du auch caption abfragen oder so.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Atreyu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137


Delphi 7 Enterprise
BeitragVerfasst: Mo 26.11.07 23:19 
Ahhh, dankedankedanke!

Genau, was ich suche. Auf das "as" wäre ich nie gekommen!

edit: Kann es sein, dass er Strings verändert, wenn er sie aus ner INI liest? Auf einmal haben Buchstaben ein "_" drunter...
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Mi 28.11.07 11:00 
hi

Nein, setz die Eigenschaft Autohotkeys des Menüeintrags auf maManual, deafault ist maAutomatic

Gruß

Aga

_________________
Gruß Aga
Atreyu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137


Delphi 7 Enterprise
BeitragVerfasst: Mi 28.11.07 11:32 
Danke dir, aber ich habe das Problem in diesem Thread forgeführt, da es hier nicht reinpasste.

www.delphi-forum.de/...e+Strings_78606.html