Tuesday, October 26, 2010

Zobrazení vlastností komponent

Tento příklad zřejmě nevyužijete v reálných aplikacích či přesněji řečeno, nejedná o funkci, kterou by uživatelé vašich aplikací na první pohled mohli ocenit. Ukážeme si, jak jednoduchým způsobem zjišťovat za běhu aplikace vlastnosti všech komponent, které obsahuje. Může to být neocenitelná pomoc při ladění aplikace při fázi vývoje, při logování chyb v případě pádu aplikace a podobně.
Umístěte si na formulář komponentu Memo, do které budeme v naší ukázce vlastnosti komponent vypisovat. Poté můžete na formulář umístit libovolné další komponenty, na kterých si ověříte funkčnost našeho příkladu.
procedure ListComponentProperties(Component: TComponent; Strings: TStrings);
var
Count, Size, I: Integer;
List: PPropList;
PropInfo: PPropInfo;
PropOrEvent, PropValue: string;
begin
Count := GetPropList(Component.ClassInfo, tkAny, nil);
Size := Count * SizeOf(Pointer);
GetMem(List, Size);
try
Count := GetPropList(Component.ClassInfo, tkAny, List);
for I := 0 to Count - 1 do
begin
PropInfo := List^[I];
if PropInfo^.PropType^.Kind in tkMethods then
PropOrEvent := 'Event'
else
PropOrEvent := 'Property';
PropValue := VarToStr(GetPropValue(Component, PropInfo^.Name));
Strings.Add(Format('[%s] %s: %s = %s', [PropOrEvent, PropInfo^.Name,
PropInfo^.PropType^.Name, PropValue]));
end;
finally
FreeMem(List);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.BeginUpdate;
Memo1.Lines.Clear;
ListComponentProperties(Button1, Memo1.Lines);
Memo1.Lines.EndUpdate;
end;
Nejdůležitějším parametrem je pochopitelně komponenta, jejíž vlastnosti chceme zjistit (v naší ukázce je to Button1).

Labels: