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 TActionClientItem caption auslesen (https://www.delphipraxis.net/67447-tactionclientitem-caption-auslesen.html)

Lilo 14. Apr 2006 13:56


TActionClientItem caption auslesen
 
moin ^^

habe folgendes problem...

ich lade zur Laufzeit aus einer datenbank mehrere sachen und erzeuge zu jedem Datensatz einen eintrag im Actionmenue... so weit so gut ^^

jetzt bekommen alle einträge die selbe action zugwiesen und dann geht mein problem los ^^

in der action soll das caption des jeweiligen Items ausgewertet werden welches die action aufruft und da komme ich atm nicht weiter... hab bis jetzt nur folgendes gefunden:

Delphi-Quellcode:
((ActionManager1.FindItemByAction((Sender As TAction)).Caption))
das bringt mir aber leider nur die caption des ersten items was mit der action verknüpft ist ;(

wäre nett wenn mir da jemand weiterhelfen könnte wie ich die caption des jeweilig aufrufenden items herausbekommen könnte ^^

und nein ich möchte nicht zu jedem item eine eigene action anlegen ;)

gruß lilo

mirage228 14. Apr 2006 14:02

Re: TActionClientItem caption auslesen
 
Hi,

mit der Eigenschaft Delphi-Referenz durchsuchenActionComponent von TAction sollt's gehen ;)

mfG
mirage228

Lilo 14. Apr 2006 14:34

Re: TActionClientItem caption auslesen
 
edit... danke erstmal^^

kannst du mir eventuell noch sagen wie ich das genau raus bekomme? irgendwie bin ich wohl zu blöd das hinzubekommen ;( in der hilfe steht zwar auch drin das es genau das macht was ich brauche, aber wie baue ich das dann in den code ein ^^

gruß lilo

Lilo 15. Apr 2006 11:28

Re: TActionClientItem caption auslesen
 
kann mir da keiner mal en beispiel geben plz? ich fummel da ez schon einen tag dran rum ^^ wäre echt nett wenn mit da einer mal auf die sprünge helfen könnte :)

gruß
lilo

marabu 15. Apr 2006 12:48

Re: TActionClientItem caption auslesen
 
Hi Lilo,

schau mal in diesen thread: klick

Grüße vom marabu

Lilo 15. Apr 2006 13:12

Re: TActionClientItem caption auslesen
 
genau das hab ich mir auch schon angeschaut aber das ist nicht das was ich brauche ...
im prinzip gehts ja nur darum

Delphi-Quellcode:
  with Sender as TAction do
    if Assigned(ActionComponent)
      then ShowMessage(ActionComponent.Name)
      else ShowMessage(Name);
aber das funzt nicht... da komm ich immerwieder in den else zweig und demzufolge immer nur den name der action ...

mein prob ist atm das ich nicht weiss wie ich nach dem aufruf meiner aktion an den ActionComponent komme bzw wie ich diesen abfrufe... denn wenn ich es mache wie es oben im code geschrieben steht, dann ist der zeiger auf ActionComponent immer nil in meiner action...

ich brauche nur die caption des aufrufenden items in meiner Actionmainmenuebar ^^

ka woran es liegt ^^ vielleicht sollte ich mir lieber ne playstation zulegen ;)

gruß
lilo

marabu 15. Apr 2006 13:47

Re: TActionClientItem caption auslesen
 
Zitat:

Zitat von Lilo
ka woran es liegt

Zumindest da kann ich dir helfen: wenn du eine Action an ein TMenuItem oder einen TButton bindest, dann hast du das Problem nicht. Die automatische Mitteilung der auslösenden Komponente in ActionComponent gibt es leider nur für Abkömmlinge von TComponent.

Fertigen Code zur Ermittlung des auslösenden ActionClient-Items (dein Anwendungsfall) habe ich in diesem Augenblick nicht, aber ich vermute, dass der Zugriff auf das protected member FSelectedItem des ActionMainMenuBar die gewünschte Information liefern könnte.

Stunden später ... na bitte:

Delphi-Quellcode:
type
  THack = class(TActionMainMenuBar);

procedure TDemoForm.ActionExecute(Sender: TObject);
begin
  if not Assigned(Sender) then
    ShowMessage('triggered by shortcut') else
  if not (Sender is TAction) then
    ShowMessage('someone blew it') else
  with Sender as TAction do
    if Assigned(ActionComponent) then
      ShowMessage(ActionComponent.Name)
    else if Assigned(THack(ActionMainMenuBar).FSelectedItem) then
      ShowMessage(THack(ActionMainMenuBar).FSelectedItem.Caption)
    else ShowMessage(Name);
end;
Nicht schön, aber immerhin.

marabu

Lilo 15. Apr 2006 14:01

Re: TActionClientItem caption auslesen
 
absolut :) funzt einwandfrei ^^ aber das das so umständlich ist hätte ich net gedacht

danke nochmal

gruß
lilo

Lun 1. Dez 2006 11:39

Re: TActionClientItem caption auslesen
 
Hallo zusammen,

ich habe folgendes Problem, ich bin jetzt sozusagen an der gleichen Stelle. Ich habe mein Problem jetzt so gelöst
mit den Captions wie hier beschrieben. Ich habe jetzt aber das Problem, das ich nicht die Captions haben möchte sondern
2 andere String Variablen. Da das ActionClientItem, aber nur die Eigenschaft Caption hat. Dachte ich mir das ich die Klasse ableite
und 2 String Variablen anhänge. Leider funktioniert das nicht.

hier zu der Code:

erst die Abgleitete Klasse:

Delphi-Quellcode:

type
  TMyActionClientItem = class(TActionClientItem)

  private
       speicher : String;
  public

  end;

Mein Item aus dem ActionMainMenubar:

Delphi-Quellcode:
itemX:TActionClientItem;


//Das Menü wird Dynamisch erstellt und an dieser stelle ist eine for schleife
itemX := ActionManager.ActionBars[0].Items[7].Items[i].Items.Add;
//Und hier wird das Item zu dem Menü mit Index i geaddet.
itemX.Action := iAction;

//achtung jetzt kommt das Problem

itemX.Caption := 'blub';
TMyActionClientItem(itemX).speicher := 'speicher';
Ich weiß jetzt nicht genau, ob ich von der Falschen Klasse ableite, um zusätzliche Strings in jedem Item zu hinterlegen. Oder
ich einen Fehler mache beim ableiten der Klasse. Ich will eigentlich nur dem item zwei neue String Variablen hinzufügen,
damit ich noch mehr als nur die Caption jedem Item mitgeben kann.
Wenn ich so compeliere bekomme ich eine Execption EAccesViolation, Fehler beim Lesen speicherstelle blub.
Wenn ich itemX direkt als mein TMyActionClientItem instanziere, bekomme ich den Fehler an dieser Stelle, dass
itemX := ActionManager.ActionBars[0].Items[7].Items[i].Items.Add;
Incompatible Typen : TMyActionClient und TActionclientItem.

Vielleicht versuche ich gerade was unmögliches keine Ahnung.

Schon mal thx for help.

greetz Lun

Lun 1. Dez 2006 16:32

Re: TActionClientItem caption auslesen
 
Also das mit dem inkompatiblen Typen ist mir jetzt kar, ich kann ja schlecht der Kindklasse die Parentklasse zuweisen.
Geht nur anders herum, aber selbst wenn ich das tue begreift die Parentklasse nicht das sie jetzt eigentlich noch das Attribut
Speicher : String mehr haben sollte.

Ich denke ich habe irgendwo einen Denkfehler. *grummel*

Ob ich TMyActionClientItem(itemX).speicher := 'speicher';

schreibe oder (itemX as TMyActionClientItem).speicher := 'hmpf'; ist auch pott wie deckel nur das ich ne andere Fehlermeldung
bekomme "Ungültige Typumwandlung".

greetz Lun


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