Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как вызвать процедуру по ссылке?


Страницы:   1 2

HRustBB ©   (2010-01-14 20:01:00) 

добавляем в TreeView1 нод


sub2node:=TreeView1.Items.AddChild(subnode,'CommentAttr');
sub2node.Data:=@TreeClick;


необходимо чтобы по двойному клику вызывалась соответствующая процедура (TreeClick)



procedure TForm8.TreeView1DblClick(Sender: TObject);
begin
if not(TreeView1.Selected.Data=nil) then begin
//Что здесь писать ?
end;
end;


Игорь Шевченко   (2010-01-17 02:20:00) [21]


> а параметры в фунцию можно поместить какнибудь


можно


HRustBB   (2010-01-17 02:03:00) [22]

в функцию указатель на которую помещен в TreeView1.Selected.Data.
Почитайте посты выше (если интересно), не описывать же всю проблемму поновы.


Германн   (2010-01-17 01:45:00) [23]


> а параметры в фунцию можно поместить какнибудь
>

В какую функцию?


HRustBB   (2010-01-17 01:31:00) [24]


> Демо ©   (14.01.10 20:08) [2]
> procedure TForm8.TreeView1DblClick(Sender: TObject);begin
> if not(TreeView1.Selected.Data=nil) then begin    
>  TMyProc(TreeView1.Selected.Data);  
> end;
> end;


а параметры в фунцию можно поместить какнибудь


oxffff   (2010-01-14 23:16:00) [25]


> Совершенно ничего страшного поскольку


Ну страшное есть в любом случае(что с случае вызова процедуры или метода), поскольку нет возможности обеспечить безопасность типов в случае вызова через сырой указатель. Но это уже из другой оперы.


oxffff   (2010-01-14 23:10:00) [26]


>
> А это ничего, что не все методы сигнатурой с TWndMethod
> совпадают и им StdWndProc не надо вызывать ?


Совершенно ничего страшного поскольку передача происходит по ссылке(var), если я правильно понял Ваш вопрос.


Игорь Шевченко   (2010-01-14 22:47:00) [27]

oxffff ©   (14.01.10 22:29) [5]

А это ничего, что не все методы сигнатурой с TWndMethod совпадают и им StdWndProc не надо вызывать ?


oxffff   (2010-01-14 22:29:00) [28]


> Игорь Шевченко ©   (14.01.10 20:23) [3]
> Только метод туда таким образом не поместится, а автору
> (я больше чем уверен) понадобится метод туда впихнуть


Ну смотря у кого. :)
Метод обернутый в процедуру отлично помещается.

см. пример из forms
function MakeObjectInstance(Method: TWndMethod): Pointer;
begin
{$IFDEF LINUX}
 Result := WinUtils.MakeObjectInstance(Method);
{$ENDIF}
{$IFDEF MSWINDOWS}
 Result := Classes.MakeObjectInstance(Method);
{$ENDIF}
end;


Ганя   (2010-01-14 21:03:00) [29]

Проще в Data хранить некий тег, а обработчик повесить единый, а внутри него уже по тегу разбираться, что делать


Игорь Шевченко   (2010-01-14 20:23:00) [30]

Только метод туда таким образом не поместится, а автору (я больше чем уверен) понадобится метод туда впихнуть


Демо   (2010-01-14 20:08:00) [31]

procedure TForm8.TreeView1DblClick(Sender: TObject);
begin
 if not(TreeView1.Selected.Data=nil) then
 begin
   TMyProc(TreeView1.Selected.Data);
 end;
end;


Демо   (2010-01-14 20:07:00) [32]

type
 TMyProc=procedure;

var
 mp: TMyProc;

procedure MyProc;
begin
 ShowMessage('Моя процедура');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 mp := @MyProc;
 mp;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо