![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
использовать IBQuery в разных юнитах [D7, XP]
Fynjy © (2008-08-21 11:02:00)Здраствуите! такое дело: есть две формы, в форме1 есть IBQuery и DBGrid, как сделать так чтобы компанент IBQuery можно было бы использовать и в форме2 (коротко осути: В форме2 задаются параметры поиска, а в форме1 выводятся результаты).
Fynjy (2008-08-21 13:09:00) [1]Сергей М., спасибо!
Сергей М. (2008-08-21 12:07:00) [2]Ну тогда, например, объяви и реализуй конструирующий метод Ф2, в которым предусмотрена передача доп.параметром ссылки на объект, с Ф2 будет работать после конструирования.
TForm2 = class(TForm)
..
private
..
FIBQuery: TIBQuery;
..
public
..
constructor Create(AOwner: TComponent; AQuery: TIBQuery);
..
end;
..
constructor TForm2.Create(AOwner: TComponent; AQuery: TIBQuery);
begin
Create(AOwner);
FIBQuery := AQuery;
end;
..
Form2 := TForm2.Create(Application, IBQuery);
Fynjy (2008-08-21 11:51:00) [3]Ф1 это MainFraim на ней все завязано, так что если закрыть Ф1, то ничего не будет-это выход из программы
Сергей М. (2008-08-21 11:46:00) [4]А если Ф1 будет разрушена узером, что должно произойти с Ф2 ?
Ведь она пользовала живой объект с живой Ф1, а теперь ни Ф1 ни объекта на ней не существует ..
Fynjy (2008-08-21 11:43:00) [5]Вот что касается модальности, нужна форма (форма 2) немодальная и чтобы при клике на форме 1, форма 2 не пропадала.
Сергей М. (2008-08-21 11:34:00) [6]
> что делать - то?
Для начала однозначно определиться со временем жизни/показа Формы2 и с ее модальностью ее показа ..
MsGuns (2008-08-21 11:34:00) [7]Внимательно прочитать и ПОНЯТЬ что написано в [5]
Fynjy (2008-08-21 11:32:00) [8]Я сейчас работаю не со своим кодом, мне придется разбираться еще дольше если я перемещю эти компаненты в дата модуль. Друзья, вы наверное не учли что я начинающий самоучка, поэтому мне не доконца понятно, что делать - то?
Сергей М. (2008-08-21 11:28:00) [9]
> MsGuns © (21.08.08 11:26) [5]
>
> Бывают, однако, исключения
Бесспорно.
MsGuns (2008-08-21 11:26:00) [10]>Сергей М. © (21.08.08 11:11) [3]
>Вообще-то дейтамодули как раз для таких потребностей и предназначены.
Бывают, однако, исключения. Например, в MDI может быть энное кол-во экземпляров одного и того же класса формы, а на форме свой собственный набор компонент доступа. В этом случае датамодуль не решает проблемы.
В целом же есть довольно простое правило, соблюдение которого позволяет сократить "непонятки" с "межмодульными" обращениями если не до нуля, то до минимума:
формы не должны обращаться друг к другу по явным ссылкам. Вместо этого используются сообщения либо внешние указатели (в главной форме или том же датамодуле) либо посредством процедур, в которых ссылки на объекты представлены параметрами.
Fynjy (2008-08-21 11:14:00) [11]Действительно изврат, но спасибо за идею, буду пробовать!
Сергей М. (2008-08-21 11:11:00) [12]Вообще-то дейтамодули как раз для таких потребностей и предназначены.
> по другому никак?
Форма2 видит Форму1 ?
Тогда объяви в Форме1 публичное свойство типа TIBQuery и в его методе-геттере возвращай указатель на объект IBQuery.
Но вообще-то это изврат)
Fynjy (2008-08-21 11:08:00) [13]А по другому никак?
Amoeba (2008-08-21 11:05:00) [14]Размести IBQuery и DataSource на DataModule.