ich habe mein dynamisch erzeugtes TMenuItem.
Dann deklariere im Interface-Teil:
Delphi-Quellcode:
type
TSpecMenuItem = class(TMenuItem)
private
Message : string;
EinWert : Integer;
end;
Erzeuge dynamisch:
Delphi-Quellcode:
var
aMenuItem : TSpecMenuItem;
begin
aMenuItem := TSpecMenuItem.Create(Self);
aMenuItem.Message := 'Hi';
aMenuItem.EinWert := 4711;
aMenuItem.OnClick := actMenuClickExecute;
FPopupMenu.Items.Add(aMenuItem);
end;
Und benutze:
Delphi-Quellcode:
procedure TMyForm.actMenuClickExecute(Sender : TObject);
var
aMenuItem : TSpecMenuItem;
begin
aMenuItem := Sender as TSpecMenuItem;
ShowMessage(Format('%s : %d', [aMenuItem.Message, aMenuItem.EinWert]));
end;
Das geht auch mit D2007.
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:
unit uMenuItemInterceptor;
interface
uses
Menus;
type
TMenuItem =
class(Menus.TMenuItem)
MeinWert :
string
end;
implementation
end.
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.
Diese Technik funktioniert immer nur einmal pro Klasse (ähnlich wie bei den Class Helper).