Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
Delphi 8 Architect
|
Re: Hilfe bei Komponente
9. Feb 2005, 10:25
Im DesignTimePackage:
Delphi-Quellcode:
type
TDeinProperty = class;
TDeinProperty = class(TComponentProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure GetValues(Proc: TGetStrProc); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('DeinePalletenDeite'
,[TDeineComponente]);
RegisterPropertyEditor(TypeInfo(TDeinProperty)
,TDeineComponente
,'DeinProperty '
,TDeinProperty);
end;
function TDeinProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paMultiSelect, paValueList, paSortList, paRevertable];
end;
procedure TDeinProperty.GetValues(Proc: TGetStrProc);
var
i,j: Integer;
SchonDa : Boolean;
UnserParent : TWinControl;
WirSelbst: TComponent; // das ist Deine Komponente
Konkurent: TComponent;
DasControl : TControl;
begin
WirSelbst := nil;
// wir gehen alle Componenten des
// Designers durch, bis wir uns selbst
// gefunden haben...
for i := 0 to Designer.GetRoot.ComponentCount - 1 do begin
WirSelbst := Designer.GetRoot.Components[i];
if (WirSelbst is TDeineComponente) and ((WirSelbst as TComponent)=GetComponent(0)) then break;
end;
UnserParent := (WirSelbst as TLsLabel).Parent;
for i := 0 to UnserParent.ControlCount-1 do begin
DasControl := UnserParent.Controls[i];
if (DasControl is TWincontrol)
and not ( (DasControl is TDeineComponente) // wollen wir nicht in der Liste haben
or (DasControl is TButton) // und was Du sonst nicht haben möchtest
or (DasControl is ...))
and ( (DasControl is TEdit)
or (DasControl is TSonstwas)) then begin
// wenn Du verhindern möchtest, dass sich 2 Deiner Komponenten
// an das selbe Ziel "hängen":
SchonDa := False;
for j := 0 to Designer.GetRoot.ComponentCount-1 do begin
Konkurent := Designer.GetRoot.Components[j];
if (Konkurent is TDeineComponente) then begin
if ((Konkurent as TDeineComponente).Associate = (DasControl as TWincontrol)) then begin
SchonDa := True;
end;
end;
end;
if not SchonDa then Proc(ContentStr((DasControl as TWincontrol).Name));
end;
end;
Proc(ContentStr(''));
end;
im RuntimPackage:
Delphi-Quellcode:
type
TDeineComponente = class(TCustomControl)
private
FDeinProp : TDeinProperty;
procedure SetDeinProp(Value:TDeinProperty);
...
published
property DeinProperty : TDeinProperty read FDeinProp write SetDeinProp;
end;
implementation
TDeineComponente.SetDeinProp(Value:TDeinProperty);
begin
FDeinProp := Value;
end;
Gruß
Tim Leuschner Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
|
|
Zitat
|