Wenn Du schon den Vergleich mit TColor heranziehst... Sowas geht nur mit PropertyEditor. Abhängig von deiner Delphi Version sind die aber nicht überall gleich einzusetzen. Dazu mehr gibts
hier
Um anzufangen solltest Du deine Karte nicht als Integer auswählen, sondern als String, oder besse noch als eigenen Typ, der nur die gewünschten Werte erlaubt.
Hier mal ein Grundgerüst, wie das mit den PropertyEditors geht
Delphi-Quellcode:
unit MailTemplateClasses6_reg;
interface
procedure Register ;
implementation
uses classes, MailTemplateClasses6, DesignEditors, DesignIntf, adoint, sysutils,
olectrls, dialogs ;
type
TMailFileOpen =
class (TPropertyEditor)
public
procedure Edit;
override;
function GetAttributes: TPropertyAttributes;
override;
function GetValue:
string;
override;
end ;
procedure Register ;
begin
RegisterPropertyEditor (TypeInfo(
string),TMailTemplateFile,'
Filename',TMailFileOpen) ;
end ;
{ TMailFileOpen }
procedure TMailFileOpen.Edit;
var
OD : TOpenDialog ;
begin
//inherited;
OD := TOpenDialog.create (
nil) ;
if OD.Execute
then begin
TMailTemplateFile(GetComponent(0)).Filename := OD.Filename ;
end ;
end;
function TMailFileOpen.GetAttributes: TPropertyAttributes;
begin
GetAttributes := [paDialog];
end;
function TMailFileOpen.GetValue:
string;
begin
GetValue := TMailTemplateFile(GetComponent(0)).Filename ;
end;
end.
unit Unit1;
interface
implementation
end.
Wichtig ist, dass du Die
Unit, in der du deine Komponente (und Propertyeditors) registrierst (Procedure Register) trennst von deiner Komponente. Aber das steht alles sauber erklärt im obigen Link.