Главная страница
    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
2-1254422185
Johnnnnn
2009-10-01 22:36
2009.11.15
Webbrowser frame active element.


2-1254568749
faiwer
2009-10-03 15:19
2009.11.15
Как реализовать?


2-1254333632
Vorotnyak_nazar
2009-09-30 22:00
2009.11.15
где в Delphi 7 компонент TrotateImage


2-1254110236
Damon
2009-09-28 07:57
2009.11.15
Список методов в published


4-1222095827
denissoft
2008-09-22 19:03
2009.11.15
Как перехватить функцию CreateFile





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский