Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / MDI приложение, контроль дочерней формы / 16 сообщений из 16, страница 1 из 1
18.04.2003, 09:36
    #32143786
new
new
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
Подскажите, как в MDI приложение проконтролировать, что дочерняя форма уже создана и открыта. Это нужно, что бы пользователь не открывал одну и тоже форму несколько раз и соотв не генерировал одни и теже SQL запросы.
Заранее всем спасибо за ответы.
...
Рейтинг: 0 / 0
18.04.2003, 09:45
    #32143792
Ильшат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
Лови!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
var
  Child: TMDIChildForm
begin

Child := nil;

for i :=  0  to MDIChildCount -  1  do
  if TMDIChildForm(MDIChildCount).Caption = 'Эта детка') then
  begin
    Child := TMDIChildForm(MDIChildCount);
    break;
  end;

  if  Assigned( Child) then
    with Child do
    begin
      BringToFront();
      if WindowState = wsMinimized then
        WindowState := wsNormal;
    end else
    begin
      //Создание child`a
    end;
    
...
Рейтинг: 0 / 0
18.04.2003, 09:45
    #32143794
A l e x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
Главная форма имеет свойства:
property MDIChildCount: Integer;
property MDIChildren[I: Integer]: TForm;

Этого вроде достаточно.
...
Рейтинг: 0 / 0
18.04.2003, 12:41
    #32143859
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
Много раз обсуждался этот вопрос.
Я предпочитаю делать так:
Открытие:
Код: plaintext
1.
2.
3.
if FrmUsers = nil then
   FrmUsers:=TFrmUsers.Create(Application);
FrmUsers.Show();


Закрываю:
Код: plaintext
1.
2.
Action:=caFree;
FrmUsers:=nil;
...
Рейтинг: 0 / 0
18.04.2003, 12:46
    #32143871
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
2 Voha
Может быть неэффективно при частом открытии формы. В смысле накладных расходов на ее создание.
...
Рейтинг: 0 / 0
18.04.2003, 12:52
    #32143886
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
2 Артем
не знаю проверено временем, пока не жаловался.
а какое твое предложение?
...
Рейтинг: 0 / 0
18.04.2003, 12:56
    #32143897
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
Убрать это:

Код: plaintext
1.
Action:=caFree;
FrmUsers:=nil;
...
Рейтинг: 0 / 0
18.04.2003, 13:04
    #32143912
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
тогда не освободится память, и помоему не сработает условие
if FrmUsers = nil then
...
Рейтинг: 0 / 0
18.04.2003, 13:10
    #32143923
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
Так и я про то.
Память не освободится.
Условие не выполнится.
Форма, вместо того, что-бы создаваться заново, просто появится на экране.

Хотя, может, я ошибаюсь?
Просто у меня не MDI приложение. И после первого создания формы по требованию я ее потом не удаляю из памяти, а закрываю (Close) и показываю при следующем вызове без создания заново.
Поправьте, если не так.
...
Рейтинг: 0 / 0
18.04.2003, 13:14
    #32143937
Ильшат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
2 Артем
В MDI-приложении, чтобы скрыть child-форму, надо ее уничтожить. Иначе она просто минимизируется и будет некрасиво внизу висеть. Или лежать... По крайней мере, другого способа скрыть форму, кроме как убить ее я не знаю. Может кто другой знает?
...
Рейтинг: 0 / 0
18.04.2003, 13:14
    #32143938
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
Если ворма не освобождает память после того как она не нужна пользователю, то это называется разбазариваниб ресурсов. А если форм несколько сотен? Зачем их хранить в памяти если они не нужны.
...
Рейтинг: 0 / 0
18.04.2003, 13:20
    #32143949
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
2 Ильшат
Попробовал. Действительно так, как вы говорите. Спасибо за информацию. Кстати, может Hide поможет?

2 Voha
Если форм несколько сотен, то естественно, надо их уничтожать, дабы ресурсы не разбазаривать. Просто нужна грамотная стратегия, когда уничтожать, а когда нет.
Пример:
Есть список. Пользователь бежит по нему и для некоторых строчек открывает форму редактирования. Пока форма со списокм не закрыта, IMHO, форму редактирования лучше из памяти не удалять.
...
Рейтинг: 0 / 0
18.04.2003, 13:21
    #32143952
Ильшат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
Не-а...
...
Рейтинг: 0 / 0
18.04.2003, 13:27
    #32143959
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
Некрасиво както будет.
...
Рейтинг: 0 / 0
18.04.2003, 15:42
    #32144191
olga1999
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
2 Ильшат:
Чтобы скрыть любую дочернюю форму
ShowWindow(Handle,SW_HIDE)
Handle дочерней формы

Чтобы показать дочернюю форму
ShowWindow(Handle,SW_SHOW)
Handle дочерней формы

Так можно играть с любой формой.
...
Рейтинг: 0 / 0
18.04.2003, 15:46
    #32144199
Ильшат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDI приложение, контроль дочерней формы
2 olga1999

Нечто подобное я подозревал)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / MDI приложение, контроль дочерней формы / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]