Wenn ich eine Actionlist dynamisch erstelle und damit arbeite, überprüft die Liste ob die vergebenen Namen eindeutig sind oder obliegt mir für die Eindeutigkeit zu sorgen?
Ich habe leider bei der Recherche keine Hinweise gefunden und möchte mich nicht alleine auf das Experiment verlassen.
Danke im voraus
Klaus Peter
Frage zu Actionlist
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Frage zu Actionlist
Ich bau mir in solchen Fällen ganz kleine Beispielanwendungen um das Verhalten zu überprüfen.kpmais hat geschrieben: Di 18. Mai 2021, 18:10 Wenn ich eine Actionlist dynamisch erstelle und damit arbeite, überprüft die Liste ob die vergebenen Namen eindeutig sind oder obliegt mir für die Eindeutigkeit zu sorgen?
Wenn du die Eigenschaft "Name" der einzelnen Actions meinst: lass den am besten leer. Er müsste ansonsten eindeutig sein. Wenn du die Frage so stellst, wirst du andere Referenzen auf die jeweiligen Actions haben um sie z.B. zuzuweisen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Re: Frage zu Actionlist
Hallo,
von der Sache her ist es schon Unfug zu versuchen, zwei Aktionen mit dem gleichen Namen in die Liste aufzunehmen.
Du kannst ja versuchen in einem Testprogramm zwei mal den gleichen Namen einzugeben und dann über Breakpoints anschauen, was in der Liste wirklich gelandet ist.
Ich würde die Sache selbst so überwachen, das so eine Situation gar nicht erst auftreten kann.
von der Sache her ist es schon Unfug zu versuchen, zwei Aktionen mit dem gleichen Namen in die Liste aufzunehmen.
Du kannst ja versuchen in einem Testprogramm zwei mal den gleichen Namen einzugeben und dann über Breakpoints anschauen, was in der Liste wirklich gelandet ist.
Ich würde die Sache selbst so überwachen, das so eine Situation gar nicht erst auftreten kann.
- kpmais
- Beiträge: 42
- Registriert: Di 26. Mai 2020, 08:51
- OS, Lazarus, FPC: Winux (L 2.0.12, FPC 3.2.0; Debian/Win7)
- CPU-Target: x86-64
- Wohnort: Saarlouis/Saarland
Re: Frage zu Actionlist
Natürlich ist das prinzipiell Unfug.
Es geht um dynamische Listen, die während der Laufzeit immer mal wieder ein Element zugewiesen bekommen.
Und da frage ich mich, ob die Liste das selber erkennt und mir im Vorfeld (also bevor etwas 'passiert') einen Hinweis gibt, oder ob ich mich konsequent darum kümmern muss.
Es geht um dynamische Listen, die während der Laufzeit immer mal wieder ein Element zugewiesen bekommen.
Und da frage ich mich, ob die Liste das selber erkennt und mir im Vorfeld (also bevor etwas 'passiert') einen Hinweis gibt, oder ob ich mich konsequent darum kümmern muss.
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Re: Frage zu Actionlist
Hallo,
Du hast genau zwei Möglichkeiten :
1. weiter im Kaffeesatz rumstochern
oder
2. endlich ein kleines Testprogramm schreiben und sehen was passiert.
Ich bin für Variante 2
Du hast genau zwei Möglichkeiten :
1. weiter im Kaffeesatz rumstochern
oder
2. endlich ein kleines Testprogramm schreiben und sehen was passiert.
Ich bin für Variante 2
Re: Frage zu Actionlist
Die Eigenschaft "Name" braucht man eigentlich nur im Designmode für den Objektinspektor. Wenn du zur Laufzeit Actions erzeugst, lasse einfach "Name" leer, gib der Action aber einen Variablenname, so dass du immer auf sie zugreifen kannst. Zum Beispiel so:
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
acLoad: TAction; // oder evtl. sogar in Formularklasse deklarieren, wenn die du Action auch außerhalb dieser Routine brauchst.
begin
acLoad := TAction.Create(ActionList1);
acLoad.Caption := 'Laden';
acLoad.Hint := 'Datei laden';
acLoad.ImageIndex := 10;
acLoad.OnExecute := @DateiLadenHandler;
acLoad.Name := ''; // Keinen Namen vergeben
acLoad.ActionList := ActionList1;
ToolButton1.Action := acLoad;
MenuItem1.Action := acLoad;
end;