16. april 2002 - 13:14Der er
9 kommentarer og 1 løsning
Træstruktur i properties i komponent
Hej,
Jeg er ved at lave en komponent i Delphi. Jeg skal have en property i Object Inspectoren med flere niveauer ligesom f.eks. en forms Font. Altså sådan at der kommer et plus ud for Font.
Jeg vil lave det sådan at man har en property der hedder BorderColor som så skal poppe ud og vise ColorLeft, ColorRight, ColorTop og ColorBottom som 4 underproperties.
Først prøvede jeg at lave en record med disse 4 variabler i, og bruge den som property, men det virkede ikke...
TMyPropertyEditor = class(TClassProperty) Public Procedure Edit;Override; Function GetAttributes:TPropertyAttributes;Override; end;
Procedure TMyPropertyEditor.Edit; begin // Kode som skal udføres når værdier ændres end;
Function TMyPropertyEditor.GetAttributes:TPropertyAttributes; begin Result:=Inherited GetAttributes+[paSubProperties]; end;
Procedure Register; begin RegisterPropertyEditor(TypeInfo(TMyObject), TMyComponent,'MyProperty',TMyPropertyEditor); end;
TMyObject = obkjektet som refereres til TMyComponent = komponenten som har den givne property MyProperty = property'ens navn TMyPropertyEditor = propertyeditor'en
Se iøvrigt emnet "TPropertyEditor" i onlinehjælpen, der findes nogle funktioner til at få fat i subproperties med.
Jeg vil ikke lave min egen property editor, jeg vil bare have nogle under-properties i stil med dem under Font...altså IKKE den dialog der kommer frem...men de underpunkter der er f.eks. color, size osv..
/SpEeDy
Synes godt om
Slettet bruger
17. april 2002 - 22:17#4
prøv at se på mit forslag og prøv at hive hjælpen frem for TFont der kan du se at den består af en komponent.
jeps, jeg har kigget på dit eksempel, og jeg kan ikke få det til at virke...Det tætteste jeg har været på noget der virkede var at der var et plus ud for property'en men det kunne ikke åbnes..-
Kan du ikke lave en simpel komponent hvor det eneste man kan er at vælge farver på den måde jeg har forklaret...for jeg kan ikke få det til at virke...
undskyld mit sene svar men jeg har haft travlt med nogle prøver
dette duer hos mig du skal bare sikre dig at den bliver lavet (Create) inden den bliver hentet.
unit Sub;
interface
uses Classes, ExtCtrls, SysUtils, Graphics;
type TChar=(a,b,c,d,e); TCharSet=Set of TChar; TSab = class(TPersistent) private { Private declarations } fOnChange: TNotifyEvent; I1,I2:Integer; procedure SetI1(I:Integer); procedure SetI2(I:Integer); protected { Protected declarations } public { Public declarations } constructor Create; destructor Destroy; procedure Assign(Source: TPersistent); override; published { Published declarations } Property X:Integer read I1 write SetI1 default 1; Property Y:Integer read I2 write SetI2 default 2; property OnChange: TNotifyEvent read fOnChange write fOnChange; end; TSub = class(TImage) private { Private declarations } FSab:TSab; FChar:TCharSet; function GetSab:TSab; protected { Protected declarations } public { Public declarations } destructor Destroy; constructor Create(AOwner: TComponent); published { Published declarations } property B:TSab read GetSab write FSab; property A:TCharSet read FChar write FChar; //Set hvis du ønsker sand falsk kun end;
procedure Register;
implementation
{TSab}
constructor TSab.Create; Begin I1:=1; I2:=2; If Assigned(FOnChange) Then FOnChange(Self); Inherited Create; End;
destructor TSab.Destroy; Begin Inherited Destroy; end;
procedure TSab.Assign(Source: TPersistent); Begin If Assigned(Source) and (Source is TSab) Then Self:=TSab(Source); If Assigned(FOnChange) Then FOnChange(Self); End;
procedure TSab.SetI1(I:Integer); Begin I1:=I; If Assigned(FOnChange) Then FOnChange(Self); End;
procedure TSab.SetI2(I:Integer); Begin I2:=I; If Assigned(FOnChange) Then FOnChange(Self); End;
{TSub}
function TSub.GetSab:TSab; Begin If not Assigned(FSab) Then FSab:=TSab.Create; Result:=FSab; End;
constructor TSub.Create(AOwner: TComponent); Begin FSab:=TSab.Create; Inherited Create(AOwner); End;
destructor TSub.Destroy; Begin FSab.Free; Inherited Destroy; End;
procedure Register; begin RegisterComponents('Egne', [TSub]); end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.