Jeg bruger Delphi 7 og arbejder på en komponent, som indeholder et
dynamisk array af farver. Jeg vil gerne tildele farveværdier.
Her følger er et kodeklip:
TColorArray = array of TColor;
TCustomStatusDots = class(TImage)
private
{ Private declarations }
...
FColorIndex : Word;
FStatusColors : TColorArray;
...
end;
procedure TCustomStatusDots.NewColors(NoOfColors: Word);
begin
SetLength(FStatusColors,NoOfColors);
FColorIndex:= 0;
end;
procedure TCustomStatusDots.AddColor(Color: TColor);
begin
if FColorIndex < Length(FStatusColor) then
begin
FStatusColors[FColorIndex]:= Color;
Inc(FColorIndex);
end;
end;
procedure TCustomStatusDots.AssignStatusColors(NewColors: TColorArray);
begin
SetLength(FStatusColors,Length(NewColors));
FStatusColors:= Copy(NewColors,0,High(NewColors));
end;
Mit andet forsøg er dette:
StatusDots.NewColors(5);
StatusDots.AddColor(clBlack);
StatusDots.AddColor(clYellow);
StatusDots.AddColor(clBlue);
StatusDots.AddColor(clLime);
StatusDots.AddColor(clRed);
Det virker, men er ikke elegant.
Mit første forsøg var:
StatusDots.AssignStatusColors([clBlack,clYellow,clBlue,clLime,clRed]);
Det er mere elegent, men virker ikke, fordi index-type har en ulovlig værdi.
Fra Delphi Help: "... each indexType is an ordinal type whose range does
not exceed 2GB").
Har nogen et forslag til en forbedring af mit andet forsøg?
Jeg har ingen erfaring med brug af "property editors". Kunne man lave
én, som ville se sådan ud i Object Inspector?
NoOfColors | 4 |
[-] StatusColors |(TColorArray)|
C1 | clBlack |
C0 | clRed |
C2 | clOlive |
C3 | clSilver |
C4 | clGreen |
Eller mere generelt lave en property editor for et dynamisk array?
Med venlig hilsen
Holger Nielsen
|