![]() |
Probleme mit onClick procedure
Hi,
ich habe mein dynamisch erzeugtes TMenuItem. Das zuweisen von Eigenschaften usw. funktioniert wunderbar. Ich stecke aber beim zuweisen des onClick Ereignisses Fest. Eine Procedure kann ich hier problemlos hinterlegen - solange sie keine Übergabewerte hat. Also folgendes funktioniert:
Delphi-Quellcode:
ASub.OnClick := meineProcedure;
Die Procedure dazu ist in folgendem Format deklariert:
Delphi-Quellcode:
Nun würde ich an die Procedure aber noch gerne zusätzlich einen String übergeben.
procedure meineProcedure(Sender:TObject);
Wie mache ich das? Einfach die Parameterliste erweitern funktioniert nicht, das wäre wohl auch zu einfach. Jemand ne Idee? Gruß, Andreas |
AW: Probleme mit onClick procedure
Müsste man über das Senderobjekt machen. Wenn es ein Integer wäre infach im Tag. so müsstest du dort eine Pointer auf den Inhalt ( in diesem Fall den String oder einer datenstruktur) hinterlegen.
|
AW: Probleme mit onClick procedure
Jupp, genau für solche Zusatzinformationen ist
![]() Woher soll denn das OnClick die Info hernehmen, welche sie für dich senden soll, wenn man draufklickt? Du rufst das OnClick ja vermutlich nicht selber (manuell) auf. Der Sender ist das Item, von welchem die Nachricht kommt und schon kann man darüber auf .Tag zugreifen. |
AW: Probleme mit onClick procedure
Ok, das hab ich befürchtet. Aus irgendeinem Grund ist mir .Tag Suspekt, deshalb hatte ich gehofft es geht auch anders... eben mit konkreter Stringübergabe.
Aber dann mache ich es halt im Tag, danke :). |
AW: Probleme mit onClick procedure
Ab Delphi 2009 ist ein TDictionary dafür ideal. Wenn man zum Beispiel zu jeder Komponente nur einen String zwischenspeichern will, kann man sich den Datenspeicher so deklarieren und erzeugen:
Delphi-Quellcode:
var
ZusatzInfo : TObjectDictionary<TComponent, string>; begin ZusatzInfo := TObjectDictionary<TComponent, string>.Create; Und dann speichern:
Delphi-Quellcode:
ZusatzInfo.Add(Button1, 'Infotext zu Button 1');
Lesen:
Delphi-Quellcode:
Text := ZusatzInfo[Button1]; // Text enthält jetzt 'Infotext zu Button 1'
|
AW: Probleme mit onClick procedure
Schade, ich benutze noch Delphi2007.
|
AW: Probleme mit onClick procedure
Zitat:
Delphi-Quellcode:
Erzeuge dynamisch:
type
TSpecMenuItem = class(TMenuItem) private Message : string; EinWert : Integer; end;
Delphi-Quellcode:
Und benutze:
var
aMenuItem : TSpecMenuItem; begin aMenuItem := TSpecMenuItem.Create(Self); aMenuItem.Message := 'Hi'; aMenuItem.EinWert := 4711; aMenuItem.OnClick := actMenuClickExecute; FPopupMenu.Items.Add(aMenuItem); end;
Delphi-Quellcode:
Das geht auch mit D2007.
procedure TMyForm.actMenuClickExecute(Sender : TObject);
var aMenuItem : TSpecMenuItem; begin aMenuItem := Sender as TSpecMenuItem; ShowMessage(Format('%s : %d', [aMenuItem.Message, aMenuItem.EinWert])); end; Da fällt mir noch ein: Wenn Dir das Arbeiten mit einer eigenen abgeleiteten Klasse nicht behagt, kannst Du mit dem Interceptor Pattern die gewünschte Erweiterung auch einem TMenuItem "unterschieben". Dazu deklariert man in einer separaten Unit:
Delphi-Quellcode:
Diese Unit bindest Du dann als letzte Unit in Deiner Form-Unit ein und schon kannst Du Deinem TMenuItem beliebige Werte (hier MeinWert) mit auf den Weg geben.
unit uMenuItemInterceptor;
interface uses Menus; type TMenuItem = class(Menus.TMenuItem) MeinWert : string end; implementation end. Diese Technik funktioniert immer nur einmal pro Klasse (ähnlich wie bei den Class Helper). |
AW: Probleme mit onClick procedure
Danke für die Hilfe aber ich habe es jetzt über den Tag gelöst. Das ging schneller als ich dachte... da der String den ich übergeben wollte eh nur eine Art Datum war, konnte ich das leicht als Integer im Tag ablegen.
|
AW: Probleme mit onClick procedure
Zitat:
Wenn man schon dynamisch Kompononenten erzeugt, dann ist der Rückgriff auf die Tag-Lösung etwas für "Baumarkt-Handwerker". |
AW: Probleme mit onClick procedure
Zitat:
Ich teste mal mit dem Code von Dir rum, danke dafür :). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 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