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

Код: 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
MDI приложение, контроль дочерней формы
    #32143794
A l e x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Главная форма имеет свойства:
property MDIChildCount: Integer;
property MDIChildren[I: Integer]: TForm;

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


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

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

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

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

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

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

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


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