![]() |
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:
das bringt mir aber leider nur die caption des ersten items was mit der action verknüpft ist ;(
((ActionManager1.FindItemByAction((Sender As TAction)).Caption))
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 |
Re: TActionClientItem caption auslesen
|
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 |
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 |
Re: TActionClientItem caption auslesen
|
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:
aber das funzt nicht... da komm ich immerwieder in den else zweig und demzufolge immer nur den name der action ...
with Sender as TAction do
if Assigned(ActionComponent) then ShowMessage(ActionComponent.Name) else ShowMessage(Name); 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 |
Re: TActionClientItem caption auslesen
Zitat:
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:
Nicht schön, aber immerhin.
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; marabu |
Re: TActionClientItem caption auslesen
absolut :) funzt einwandfrei ^^ aber das das so umständlich ist hätte ich net gedacht
danke nochmal gruß lilo |
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:
Ich weiß jetzt nicht genau, ob ich von der Falschen Klasse ableite, um zusätzliche Strings in jedem Item zu hinterlegen. Oder
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 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 |
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 20:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz