Zitat von
Mavarik:
Hi Frank
Und haste ne Idee? Wie erzeuge ne Komponente "für" den Objectinspector?
Grüsse
Wie gesagt, es kommt ja erstmal drauf an, was gemacht werden soll.
Wenn dein Panel wie ein "normales" Panel sein soll, also alle erzeugten Komponenten auch normal behandelt werden sollen, dann hat es bei mir immer gereicht, wenn ich die Komponenten einfach ganz normal erzeugt hatte.
Also Owner = Panel.Owner (die Form) und Parent = dein Panel .
z.B. folgender Code erstellt jetzt einfach mal testweise ein Panel und darin ein paar Buttons.
Das ist jetzt zwar nur schnell mal in den Code meines HintManagers gehackt, weil der halt verfügbar war und es ist FMX und nicht
VCL, aber dieses Verhalten ist überall gleich.
Delphi-Quellcode:
procedure THintManagerLink.ExecuteVerb(Index: Integer);
var
X: TPanel;
begin
case Index of
0: ...;
1: //raise EProgrammerNotFound.Create('Nicht implementiert.');
begin
X := TPanel.Create(Component.Owner);
with X do begin
Name := 'Panel12346';
Parent := Component.Owner as TFmxObject;
end;
with TButton.Create(Component.Owner) do begin
Position.X := Position.X + 20;
Position.Y := Position.Y + 20;
Name := 'dsadsa';
Parent := X;
end;
with TButton.Create(Component.Owner) do begin
Position.X := Position.X + 40;
Position.Y := Position.Y + 40;
Name := 'gfdsgfd';
Parent := X;
end;
with TButton.Create(Component.Owner) do begin
Position.X := Position.X + 60;
Position.Y := Position.Y + 60;
Name := 'efklj';
Parent := X;
end;
end;
end;
end;
(Component ist ein HintManager, welcher auf der Form liegt, also Component.Owner ist erstmal nur die Form selber)
Wird die Kompoente nur in deinem Panel "manuel" erstellt und jeweils im Constructor beim Laden wieder selbst erstellt/geladen und ist sie nur über ein Published-Property sichtbar, dann kann man über SetSubComponent dafür sorgen, daß Delphi die Eigenschaften dieser Komponente läd/speichert.
siehe z.B. die ColorMap der TActionMainMenuBar