Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];

Вниз

Список методов в published   Найти похожие ветки 

 
Damon   (2009-09-28 07:57) [0]

Подскажите как получить список всех методов в published ? Функцией MethodAdress я могу определить существование определенного метода в классе, но как получить весь список? Спасибо.


 
Leonid Troyanovsky ©   (2009-09-28 08:18) [1]


> Damon   (28.09.09 07:57)  

> Подскажите как получить список всех методов в published

http://rsdn.ru/?forum/delphi/1162818.1.aspx

--
Regards, LVT.


 
Damon   (2009-09-28 08:37) [2]

Либо я что-то не так делаю, либо процедура эта работает не правильно. Например:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure GetMethodNames(aClass: TClass; List: TStrings);
type
 TMethodTable = packed record
   Count: SmallInt;
 //[...methods...]
 end;
var
 aTable : ^TMethodTable;
 aName  : ^ShortString;
 K      : Integer;
begin
 List.BeginUpdate;
 try
   while aClass <> nil do
   begin
     asm
       mov  EAX, [aClass]
       mov  EAX,[EAX].vmtMethodTable { fetch pointer to method table }
       mov  [aTable], EAX
     end;
     if aTable <> nil then
     begin
       aName  := Pointer(PChar(aTable) + 8);
       for K := 1 to aTable.Count do
       begin
         if List.IndexOf (aName^) < 0 then
           List.Add (aName^);
         aName := Pointer(PChar(aName) + length(aName^) + 7)
       end;
     end;
     aClass := aClass.ClassParent;
   end;
 finally
   List.EndUpdate;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var
 SL:TStringList;
begin
 SL:=TStringList.Create;
 try
   GetMethodNames(TForm1, SL);
   ShowMessage(SL.Text);
 finally
   SL.Free;
 end;
end;

end.

Результат: "Button1Click" который не находится в секции Published...


 
MBo ©   (2009-09-28 08:39) [3]

>Результат: "Button1Click" который не находится в секции Published...
Как раз таки в этой секции он и находится (секция по умолчанию в начале объявления класса - published)


 
Damon   (2009-09-28 08:46) [4]

да, извиняюсь за неграмотность. Спасибо большое.


 
Дмитрий С ©   (2009-09-28 09:03) [5]


>      asm
>        mov  EAX, [aClass]
>        mov  EAX,[EAX].vmtMethodTable { fetch pointer to
> method table }
>        mov  [aTable], EAX
>      end;

А тут без асма никак чтоли?


 
Юрий Зотов ©   (2009-09-28 10:38) [6]

> секция по умолчанию в начале объявления класса - published

Для тех классов, которые либо сами откомпилированы с опцией {$M+}, либо отнаследованы от классов, откомпилированых с опцией {$M+} (в VCL это класс TPersistent и все его потомки).

Для остальных классов дефолтная секция - public.


 
Юрий Зотов ©   (2009-09-28 10:38) [7]

> секция по умолчанию в начале объявления класса - published

Для тех классов, которые либо сами откомпилированы с опцией {$M+}, либо отнаследованы от классов, откомпилированых с опцией {$M+} (в VCL это класс TPersistent и все его потомки).

Для остальных классов дефолтная секция - public.


 
MBo ©   (2009-09-28 15:19) [8]

>откомпилированых с опцией {$M+}
Да, действительно, забыл про эти грабли...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
8-1200165615
КуХ
2008-01-12 22:20
2009.11.15
BitBlt


2-1254411102
V
2009-10-01 19:31
2009.11.15
Запуск чужой exe из ресурса


2-1254144458
Drowsy
2009-09-28 17:27
2009.11.15
Просмотры в InterBase.


15-1253166116
Andy BitOff
2009-09-17 09:41
2009.11.15
Работа с .pdf


2-1254420825
Drowsy
2009-10-01 22:13
2009.11.15
Текстовый файл и пустые строки.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский