Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  4 628

•  TDictionary Custom Sort  6 632

•  Fast Watermark Sources  6 411

•  3D Designer  9 353

•  Sik Screen Capture  6 742

•  Patch Maker  7 127

•  Айболит (remote control)  7 134

•  ListBox Drag & Drop  5 993

•  Доска для игры Реверси  97 575

•  Графические эффекты  7 327

•  Рисование по маске  6 614

•  Перетаскивание изображений  5 485

•  Canvas Drawing  5 862

•  Рисование Луны  5 586

•  Поворот изображения  5 095

•  Рисование стержней  3 661

•  Paint on Shape  2 893

•  Генератор кроссвордов  3 792

•  Головоломка Paletto  3 044

•  Теорема Монжа об окружностях  3 856

•  Пазл Numbrix  2 537

•  Заборы и коммивояжеры  3 249

•  Игра HIP  2 218

•  Игра Go (Го)  2 150

•  Симулятор лифта  2 530

•  Программа укладки плитки  2 171

•  Генератор лабиринта  2 668

•  Проверка числового ввода  2 321

•  HEX View  2 653

•  Физический маятник  2 286

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Как получить список всех published свойств (имена и типы) 2



Автор: Grega Loboda

uses
  TypInfo

procedure ListProperties(AInstance: TPersistent; AList: TStrings);
var
  i: integer;
  pInfo: PTypeInfo;
  pType: PTypeData;
  propList: PPropList;
  propCnt: integer;
  tmpStr: string;
begin
  pInfo := AInstance.ClassInfo;
  if (pInfo = nil) or (pInfo^.Kind <> tkClass) then
    raise Exception.Create('Invalid type information');
  pType := GetTypeData(pInfo); {Pointer to TTypeData}
  AList.Add('Class name: ' + pInfo^.Name);
  {If any properties, add them to the list}
  propCnt := pType^.PropCount;
  if propCnt > 0 then
  begin
    AList.Add(EmptyStr);
    tmpStr := IntToStr(propCnt) + ' Propert';
    if propCnt > 1 then
      tmpStr := tmpStr + 'ies'
    else
      tmpStr := tmpStr + 'y';
    AList.Add(tmpStr);
    FillChar(tmpStr[1], Length(tmpStr), '-');
    AList.Add(tmpStr);
    {Get memory for the property list}
    GetMem(propList, sizeOf(PPropInfo) * propCnt);
    try
      {Fill in the property list}
      GetPropInfos(pInfo, propList);
      {Fill in info for each property}
      for i := 0 to propCnt - 1 do
        AList.Add(propList[i].Name + ': ' + propList[i].PropType^.Name);
    finally
      FreeMem(propList, sizeOf(PPropInfo) * propCnt);
    end;
  end;
end;

function GetPropertyList(AControl: TPersistent; AProperty: string): PPropInfo;
var
  i: integer;
  props: PPropList;
  typeData: PTypeData;
begin
  Result := nil;
  if (AControl = nil) or (AControl.ClassInfo = nil) then
    Exit;
  typeData := GetTypeData(AControl.ClassInfo);
  if (typeData = nil) or (typeData^.PropCount = 0) then
    Exit;
  GetMem(props, typeData^.PropCount * SizeOf(Pointer));
  try
    GetPropInfos(AControl.ClassInfo, props);
    for i := 0 to typeData^.PropCount - 1 do
    begin
      with Props^[i]^ do
        if (Name = AProperty) then
          result := Props^[i];
    end;
  finally
    FreeMem(props);
  end;
end;

And calling this code by:

ListProperties(TProject(treeview1.items[0].data), memo3.lines); 

My tProject is defined as

type
  TProject = class(tComponent)
  private
    FNaam: string;
    procedure SetNaam(const Value: string);
  public
    constructor Create(AOwner: tComponent);
    destructor Destroy;
  published
    property Naam: string read FNaam write SetNaam;
  end;

Also note the output, there seem to be 2 standard properties (Name and Tag) !

Memo3
Class name: TProject

3 Properties
-------------------
Name: TComponentName
Tag: Integer
Naam: String





Похожие по теме исходники

Список запущенных процессов

Список установленных устройств




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте