![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ShowModal и locate [D7, Yaffil]
Belkova © (2005-05-05 10:06:00)Мастера Delphi! Подскажите пожалуйста. Вызываю форму с DBGrideh, и нужно, чтобы курсор стоял на определеной записи. Раньше делала так. Form1.Show;
IBQuery.Locate();
проблем не было.
сейчас Form1.ShowModal;
IBQuery.Locate();
не ищет. Помогите, пожалуйста.
KSK (2005-05-05 12:12:00) [1]можно использовать событие FormShow
procedure TForm1.FormShow(Sender: TObject);
begin
IBQuery.Locate();
end;
msguns (2005-05-05 11:02:00) [2]>Belkova © (05.05.05 10:19) [7]
Для взаимодействия различных частей приложения (Например, Гл.формы с дочерними) часто требуется передавать в создаваемые формы данные. Однако не всегда получается "мирно" сделать это по типу
with TChildForm.Create(Self) do
begin
Par1 := ...;
Par2 := ...;
Par3 := ...;
Show;
end;
, т.к. в случае MDI приложения "дочка" показывается сразу после конструктора, не дожидаясь шоу, поэтому если в событии
FormCreate или FormShow написать
... := Par1;
... := Par2;
...
, то в левой части вместо значений, "присвоенных" Гл.формой, будут нули или бланки.
Можно, конечно, переопределить конструктор, но не всегда это приемлимо, да и требует времени и квалификации. Поэтому для передачи значений можно использовать "буферные" поля (объекты), отведенные в "постоянно живущих" формах или датамодулях.
Главная перед созданием "дочки" записывает в буфер вх.параметры, после чего создает форму.
"Дочка" первым делом (в FormCreate, например) переписывает содержимое буфера (Гл.Форма, как и датамодуль, ей должны быть "видимы") в свои поля, обеспечивая таким образом как бы реентерабельность (т.е. независимость работы от кол-ва созданных экземпляров объекта-формы). После чего делает то, что должна делать. При необходимости она передает результаты свой работы в вызывающий модуль, ипользуя тот же буфер.
Т.е. что-то похожее на интерфейс, только сильно упрощенный ;))
Belkova (2005-05-05 10:19:00) [3]Всем спасибо. Все получилось.
Johnmen (2005-05-05 10:13:00) [4]Тогда в 17 строке
:)
Belkova (2005-05-05 10:12:00) [5]Все равно не ищет. Местами поменяла.
Rule (2005-05-05 10:10:00) [6]Rule © (05.05.05 10:09) [3]
на секунду от остальных опаздал :-)
Rule (2005-05-05 10:09:00) [7]а потомучто пока у тебя твоя форма1 не закроется, он искать не будет, тебе надо сделать так:
IBQuery.Locate();
Form1.ShowModal;
и при чем здесь DBGrideh?
Max Zyuzin (2005-05-05 10:08:00) [8]Попробуй операторы местами поменять :) поможет
Johnmen (2005-05-05 10:08:00) [9]Естественно. Ведь шоумодал, там и "стоит", пока форма не закроется, а уж потом локейт.
Поменяй местами....