Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TActionList und TButton (https://www.delphipraxis.net/55733-tactionlist-und-tbutton.html)

wolfgang4711 26. Okt 2005 06:54


TActionList und TButton
 
Hallo zusammen,
ich arbeite gerade, nach längerer Absitenz, mit D6. Meine Aufgabe ein
kleines Programm zu modifizieren. Keine grosse Sache.

In diesem Programm wird mit TButton und TActionlist gearbeitet.
Eine merkwürdigkeit gibt es jetzt. Wenn ich ein neuen TButton anlege und
eine neue Action (Katgorie auswählen und rechte Maustaste neue Aktion),
diese Action mit dem TButton verlinke (Eigenschaften TButton ->Action)
dann sind meine neuen TButton disabled, verlinke ich sie mit einer
bestehenden, das Programm enthält schon ein paar Aktion, dann sind diese
Button enabled. Man kann also mit diesen Buttons arbeiten.

Wieso ist das so ? Ich kann mich nicht errinern, das dies eine Delphi
Geschichte wäre ?

Vielen Dank im Voraus.


einen schönen Tag noch
Wolfgang Herfter
btw. und ->TButton->Eigenschaften->Action->OnExecute habe ich natürlich auch durchgeführt.

mikhal 26. Okt 2005 07:01

Re: TActionList und TButton
 
Hast du bereits die Execute-Methode von TAction programmiert? Erst wenn eine entsprechende Methode mit Leben gefüllt ist, wird dein Button "enabled".

Grüße
Mikhal

teebee 26. Okt 2005 07:04

Re: TActionList und TButton
 
Du musst die Action noch "einschalten" (im OnUpdate), das enabled des Buttons ist an das enabled der Action gekoppelt:
Delphi-Quellcode:
procedure TForm1.Action1Update(Sender: TObject);
begin
  TAction(Sender).Enabled := True; //je nachdem an- oder ausschalten...
end;
Gruß, teebee

wolfgang4711 26. Okt 2005 07:12

Re: TActionList und TButton
 
Zitat:

Zitat von teebee
Du musst die Action noch "einschalten" (im OnUpdate), das enabled des Buttons ist an das enabled der Action gekoppelt:
Delphi-Quellcode:
procedure TForm1.Action1Update(Sender: TObject);
begin
  TAction(Sender).Enabled := True; //je nachdem an- oder ausschalten...
end;
Gruß, teebee

cool damit funktioniert es.
Allerdings, ich schrieb ja das ich ein bestehendes Programm modifiziere, haben die in ihren bereits bestehenden TButton und TActionList diesen Eintrag nicht und es funzt bei denen auch so.
Oder die haben das in irgend einer Uses versteckt. Leider gibt es überhaubt keine Doku. zu dem bestehenden Programm.

Danke für die Antwort.

wolfgang

teebee 26. Okt 2005 07:26

Re: TActionList und TButton
 
Wahrscheinlich ist dann etwas in der Art im Programm:
Delphi-Quellcode:
procedure TForm1.ActionList1Update(Action: TBasicAction;
  var Handled: Boolean);
begin
 TAction(Action).Enabled := True;
 Handled := True;
end;
Wenn für eine einzelne Action kein OnUpdate existiert kümmert sich die ActionList darum. Wenn da auch nix ist, geht es weiter an die Application. Vielleicht ist spätestens in Application.OnActionUpdate was drin.

Gruß, teebee

marabu 26. Okt 2005 07:33

Re: TActionList und TButton
 
Hallo Wolfgang,

die Eigenschaft Enabled einer Action ist standardmäßig auf TRUE gesetzt. Im OnUpdate-Event der Action Enabled einfach auf TRUE zu setzen macht keinen Sinn. Da gehört eine bedingte Zuweisung rein. Ich vermute wie Mikhal, dass du noch keinen Execute-Code für deine Action geschrieben hattest, als der Button disabled erschien.

Was meinst du eigentlich damit:
Zitat:

Zitat von wolfgang4711
btw. und ->TButton->Eigenschaften->Action->OnExecute habe ich natürlich auch durchgeführt.

Grüße vom marabu

und herzlich willkommen in der Delphi-PRAXiS.

wolfgang4711 26. Okt 2005 07:54

Re: TActionList und TButton
 
Zitat:

Zitat von teebee
Wahrscheinlich ist dann etwas in der Art im Programm:
Delphi-Quellcode:
procedure TForm1.ActionList1Update(Action: TBasicAction;
  var Handled: Boolean);
begin
 TAction(Action).Enabled := True;
 Handled := True;
end;
Wenn für eine einzelne Action kein OnUpdate existiert kümmert sich die ActionList darum. Wenn da auch nix ist, geht es weiter an die Application. Vielleicht ist spätestens in Application.OnActionUpdate was drin.

Gruß, teebee

Nein, ich habe mit der Suche das ganze Projekt durchsuchen lassen, da ist nichts zu finden.
Merkwürdig.

cu
wolf

teebee 26. Okt 2005 07:58

Re: TActionList und TButton
 
@Wolfgang: Dann hab ich im Moment auch keine Idee, woran es liegen könnte.
@marabu: Dass Wolfgang das OnExecute der Action schon gefüllt hat, hat er in seinem ersten Posting geschrieben. Also bin ich davon ausgegangen, dass an einer anderen, Action.OnUpdate übergeordneten Stelle, das enabled der Action auf False gesetzt wird. Daher der Tip mit dem Setzen auf TRUE in Action.OnUpdate. Dass da natürlich eigentlich eine bedingte Zuweisung hingehört, sollte sich von selbst verstehen.
Zitat:

Zitat von wolfgang4711
btw. und ->TButton->Eigenschaften->Action->OnExecute habe ich natürlich auch durchgeführt.

Ich denke Wolfgang hat das Ereignis über den OI gesetzt.

Gruß, teebee

wolfgang4711 26. Okt 2005 08:13

Re: TActionList und TButton
 
Zitat:

Zitat von teebee
Dass da natürlich eigentlich eine bedingte Zuweisung hingehört, sollte sich von selbst verstehen.
Zitat:

Zitat von wolfgang4711
btw. und ->TButton->Eigenschaften->Action->OnExecute habe ich natürlich auch durchgeführt.

Ich denke Wolfgang hat das Ereignis über den OI gesetzt.

Gruß, teebee

Habe ich und in der Methode natürlich die notwendigen Anweisungen geschrieben.
Das Programm ist auch (gelinde gesagt) ziemlich krank programmiert worden.
Ich baue jetzt die Anweisung (TAction(Sender).Enabled := True;) ein und Ruhe ist.
Wenn das nicht gewünscht ist, sollen die mir sagen wie sie das gelöst haben möchten.
Meine Sorge war ja, dass ich eine Einstellung vergessen habe die von Delphi erwartet wird und jeder Programmierer kennt.
Aber dem scheint ja nicht so zu sein.
(Man glaubt ja doch das man die Muttersprache (Delhpi) nicht verlernt, aber mit den Jahren schleicht sich ein Akzent ein und Fehler in der Aussprache)
Ich danke euch allen für euere Hilfe und wünsche einen schönen Tag

viel Spass noch

wolfgang


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 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