Bei mir sieht es aktuell so aus. (ganz billig, aber es läuft
)
Delphi-Quellcode:
uses DesignIntf, DesignEditors;
type
TText0 = type Integer;
TText0Property = class(TPropertyEditor)
public
function GetAttributes: TPropertyAttributes; override;
procedure Initialize; override;
procedure Edit; override;
function GetValue: string; override;
procedure SetValue(const Value: string); overload; override;
end;
procedure register;
begin
RegisterPropertyEditor(TypeInfo(TText0), nil, '', TText0Property);
// RegisterPropertyEditor(TypeInfo(WideString), TDeineKlasseWoDasPropertyDrinIst, 'DataField', TDataFieldProperty);
end;
procedure TText0Property.Edit;
var
F: TForm;
G: TDBGrid;
begin
F := TForm.Create(nil);
try
G := TDBGrid.Create(F);
G.Align := alClient;
G.Parent := F;
G.DataSource := TDataSource.Create(F);
G.DataSource.DataSet := DM1.MemTextX;
DM1.MemTextX.Active := True;
DM1.MemTextX.Locate('t_nr', GetOrdValue, []);
F.Position := poScreenCenter;
F.Height := Screen.Height - 100;
F.Width := 500;
F.ShowModal;
SetOrdValue(DM1.MemTextXt_nr.AsInteger);
finally
F.Free;
end;
end;
function TText0Property.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog];
end;
function TText0Property.GetValue: string;
begin
if GetOrdValue <> 0 then
Result := IntToStr(GetOrdValue) + ': ' + makeText(GetOrdValue)
else
Result := IntToStr(GetOrdValue);
end;
procedure TText0Property.Initialize;
begin
inherited;
end;
procedure TText0Property.SetValue(const Value: string);
begin
SetOrdValue(StrToInt(Trim(Copy(Value, 1, Pos(':', Value + ':') - 1))));
end;
Und dazu noch das
Package "DesignIde" in das eigene
Package aufnehmen, bei "Erfordert".
GetValue und SetValue brauchte ich, da ich was anderes "Anzeige", als Wertmäßig in dem Property drinsteht.
In Initialize würdest du, wenn ich das richtig im Kopf hab, dann irgendwie die Liste für deine DropDownBox erstellen/befüllen.
Bei paDialog dann ntürlich was anderes, für das DropDown.
Und Edit ist bei mit der Button im Property-Edit, da im
OI. (so wie bei Lines in TMemo)