Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.11;
Скачать: CL | DM;

Вниз

Как передать данные в форму?   Найти похожие ветки 

 
artko ©   (2002-03-29 12:21) [0]

есть нек. софтина, в которой формы создаются динамически в нужном кол-ве экземпляров каждого класса. требуется по действиям в любой другой форме передать всем остальным(или нек. их части) определенное событие. Попытка реализовать вызов определенного метода по указателю - получается, но нет доступа к конкретному экземпляру формы, передача методу указателя на экземпляр формы - не работает.
делаем так:
form := TForm.Create(self) ; в основной форме
заносим в список(Tlist) модуля @form, @form.EvHandler(процедурный тип, принимающий в качестве параметров запись с именем события и указателем на форму)
если вызывать метод как
var
mt : TEvent;
@mt:=list.items[0];
mt(params)
то управление передается в нужное место, но при попытке обратиться к форме метода(Self.Edit1.Text:="dd" к примеру) AV
при передаче методу указателя на форму и приведении типа
var
frm : TMyForm
frm:=TMyForm(params.parent типа pointer)
и вызове frm.Edit1.Text:="dd" просто ничего не происходит.

Где ошибка, подскажите?
Спасибо.


 
MBo ©   (2002-03-29 12:35) [1]

а Screen.Forms[i] не поможет?


 
artko ©   (2002-03-29 14:00) [2]

формы разных классов, посему Screen слабо помогает. а городить тучу кода для приведения типов неохота.


 
MBo ©   (2002-03-29 14:11) [3]

сомнения такие -
вместо @form заносить в список просто form - это уже указатель.
evHandler- как TMethod, т.е. Code и Data


 
reonid ©   (2002-03-29 14:20) [4]

Для форм разных классов неплохо подойдёт механизм сообщений
Определи своё сообщение
WM_YOURMSG = WM_USER + 222;

И в своих формах пишешь обработчик

TMyForm = ...
procedure WMYOURMSG(var Msg: TMessage); message WM_YOURMSG;
end;

А потом в цикле посылаешь всем формам
Screen.Forms[i].Perform(WM_YOURMSG, wP, lP);

(если не хватает параметров - в wP и lP можешь хранить ссылку на
структуру с большим числом параметров)

PS Кстати, ссылку на метод объекта в TList не засунешь - это не указатель (см TMethod - он занимает 8 байт).


 
artko ©   (2002-03-29 14:20) [5]

попытка использовать Screen с приведением типа - оказывается, что новая форма добавляется в начало списка. :) сейчас попробую придумать способ получить нужный номер :)


 
artko ©   (2002-03-29 14:29) [6]

2reonid:
PS Кстати, ссылку на метод объекта в TList не засунешь - это не указатель
я определяю тип
TMyEvent=procedure(EventData:TMyEventData) of object;
в форме описываю такую процедуру и засовываю ее в список как
List.Add(@myproc);
во всяком случае потом процедура вызывается, но вот только Self внутри этой процедуры показывает на деревню дедушке.
а со своим сообщением сейчас попробую, спасибо.


 
reonid ©   (2002-03-29 14:35) [7]

2artko ©
Именно это я и имел в виду
(и MBo тебе о том же говорил, я не заметил)

Тип
TMyEvent=procedure(EventData:TMyEventData) of object;

в действительности представляет собой
запись

TMethod = record
Code, Data: Pointer;
end;

Он хранит в себе адрес процедуры (в Code) и Self (в Data) и
занмает 8 байт. Для его хранения нужен специализированный список
(Если хочешь, пришлю)



 
deleon ©   (2002-03-29 14:42) [8]

Прикалываетесь?
Если все формы создаются от одного объекта, вот и переберите все компоненты этого объекта, через owner дочерней формы!


 
artko ©   (2002-03-29 14:45) [9]

2reonid: не отказался бы от списка.

2deleon: формы могут быть как разными, так и неск. одного типа


 
artko ©   (2002-03-29 15:16) [10]

спасибо за ответы, добился нужного эффекта определением собственного сообщения.



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

Текущий архив: 2002.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
1-32747
Manwe
2002-03-30 13:45
2002.04.11
RectInRect


1-32778
СРОЧНО
2002-03-31 14:19
2002.04.11
ПОМОГИТЕ


1-32850
AFROLOV
2002-03-28 15:37
2002.04.11
Как узнать что пользователь нажал функциональную клавишу (F1-F12)


1-32897
BAHO
2002-03-28 19:15
2002.04.11
Обработка событий в денамически созданных обьектах


1-32777
AndrewK
2002-03-28 14:10
2002.04.11
Конвертация таблицы в Excel