![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как вызвать процедуру по ссылке?
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;