Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
 Аватар для Newby52
43 / 38 / 5
Регистрация: 24.07.2018
Сообщений: 214
Записей в блоге: 6

Запрет повторного открытия формы

15.09.2022, 12:34. Показов 3031. Ответов 40

Студворк — интернет-сервис помощи студентам
Какой самый простой способ определения - форма создана или нет? Чтобы повторно её нельзя было открыть (создать)? Сравнение с nil, или проверка на Assigned, увы, - не даёт достоверную информацию.
Пока приходится делать костыли.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.09.2022, 12:34
Ответы с готовыми решениями:

Запрет повторного открытия файла через OpenDialogFile
Доброе время суток! Помогите пожалуйста, не могу сообразить. Пишу редактор сценариев, на OpenDialogFile открываю файл 1.txt для...

Поле повторного открытия формы не отображаются данные таблицы
Доброго времени. Вот такая проблема: Запускаю в Делфи программу, открываю юнит с таблицей - данные на месте. После нажатия на кнопку...

Решить проблему повторного открытия Excel файла
Помогите решить проблему повторного открытия excel файла. Файл открываю так: //Открыть соединение с базой данных. procedure...

40
14 / 11 / 3
Регистрация: 14.08.2022
Сообщений: 157
21.09.2022, 02:26
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от northener Посмотреть сообщение
форма ли это или ещё что-нибудь.
Про что-нибудь сам делаю. Но вот форма. вопрос о форме а не о чём-нибудь.
И назовите хоть одну задачу где это вообще нужно.
Если у приложения много форм все они создаются при старте и попросту скрыты.
Основное окно создавать второй раз то зачем? Это уже перезапуск приложения получается.
Может автор хочет сделать оноразовую прогу?
Может речь идет о других формах?
Ну закрыли скажем вторичное окно и хотите его открыть, а вот надо запретить.
Если основное окно цело, какие проблемы? Поставили создание формы по условию и все.
Но вопрос то не в этом. Вопрос в том чего хочет сам автор поста.
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
21.09.2022, 02:46
Цитата Сообщение от leors Посмотреть сообщение
Но вот форма. вопрос о форме а не о чём-нибудь.
И назовите хоть одну задачу где это вообще нужно.
Например программно-аппаратный комплекс. Аппаратная его часть работает независимо от программной. В аппаратной части происходят некие ошибки/проблемы. Как уведомить оператора программы об этих проблемах, если их более одной?
И не только уведомить, но и предоставить оператору выбор решения.
0
Модератор
 Аватар для D1973
9954 / 6490 / 2461
Регистрация: 21.01.2014
Сообщений: 27,495
Записей в блоге: 3
21.09.2022, 05:22
Цитата Сообщение от leors Посмотреть сообщение
Все формы создаются на стадии старта и прописаны в файле проекта.
Отнюдь нет. В проекте есть 2 типа форм: автосоздаваемые и доступные. Прописаны в файле проекта и автоматически создаются только те, которые включены в группу автосоздаваемых, создание остальных - задача самого программиста.



Цитата Сообщение от leors Посмотреть сообщение
я не уверен в том что это вообще возможно.
В этом и прикол динамически создаваемых форм, что я могу наштамповать сколько угодно экземпляров такой формы.

Цитата Сообщение от leors Посмотреть сообщение
назовите хоть одну задачу где это вообще нужно.
Не будем далеко в дебри лезть: стандартное приложение Windows - Sticky Notes...
Или вот: при работе с БД я могу открыть одну запись в окне редактирования, а могу открыть сразу несколько, переключаясь между этими окнами при необходимости...
Да возьмите любое MDI-приложение, хоть тот же MS Word версии до 2007: там дочерние окна создавались именно по такому принципу...
0
Злостный нарушитель
 Аватар для Verevkin
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,900
21.09.2022, 08:16
Цитата Сообщение от leors Посмотреть сообщение
И назовите хоть одну задачу где это вообще нужно.
Total Commander видел? Окошки прогресса фонового копирования файлов существуют независимо, их количество не ограничено.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
21.09.2022, 09:11
Цитата Сообщение от leors Посмотреть сообщение
Зачем кому-то надо в собственном приложении создавать копию формы...
Да мало ли, что задумает программист? Но в данном случае ТС как раз не хочет создавать несколько форм, а только одну. И говорит про проверку Assigned, значит, с вероятностью 99% имеет в виду форму именно своего приложения, а не первой запущенной копии приложения.
0
14 / 11 / 3
Регистрация: 14.08.2022
Сообщений: 157
21.09.2022, 09:16
Цитата Сообщение от D1973 Посмотреть сообщение
Отнюдь нет. В проекте есть 2 типа форм: автосоздаваемые и доступные.
Я вообще не об этом. По смыслу слов заказчика главное окно почему-то исчезает и надо запретить его новое появление.
Так или нет, но смысл такой. Или вообще речь идет о запуске приложения при уже запущенном.
Ни о каких дочерних окнам там речи не идет.
И я написал что создать клон главного окна в рамках текущего приложения, вряд ли возможно, потому как это равносильно перезапуску. В любом случае любой элемент должен быть объявлен. Без этого создание просто невозможно. А раз оно объявлено то и запретить его нет проблем. Именно вы даете команду. Поставив условие можно делать что угодно и как угодно.
0
Злостный нарушитель
 Аватар для Verevkin
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,900
21.09.2022, 09:32
Цитата Сообщение от leors Посмотреть сообщение
По смыслу слов заказчика главное окно почему-то исчезает и надо запретить его новое появление.
Так или нет, но смысл такой. Или вообще речь идет о запуске приложения при уже запущенном.
Ни о каких дочерних окнам там речи не идет.
В каком месте скрыт этот тайный смысл?

Цитата Сообщение от Newby52 Посмотреть сообщение
Какой самый простой способ определения - форма создана или нет? Чтобы повторно её нельзя было открыть (создать)? Сравнение с nil, или проверка на Assigned, увы, - не даёт достоверную информацию.
Пока приходится делать костыли.
1
 Аватар для Newby52
43 / 38 / 5
Регистрация: 24.07.2018
Сообщений: 214
Записей в блоге: 6
21.09.2022, 15:25  [ТС]
В моём случае речь шла о форме поиска текстового вхождения в наименование узлов дерева.
Форма вызывается как Show и имеет свойство "Поверх всех окон".
Миниатюры
Запрет повторного открытия формы  
0
Злостный нарушитель
 Аватар для Verevkin
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,900
21.09.2022, 15:32
Цитата Сообщение от Newby52 Посмотреть сообщение
В моём случае речь шла о форме поиска текстового вхождения в наименование узлов дерева.
Форма вызывается как Show и имеет свойство "Поверх всех окон".
В этом случае никакие дополнительные мероприятия не нужны. Форму надо создавать по первому поиску и больше до завершения приложения не убивать.
0
 Аватар для Newby52
43 / 38 / 5
Регистрация: 24.07.2018
Сообщений: 214
Записей в блоге: 6
21.09.2022, 15:34  [ТС]
Так оператор может повторно нажать на кнопку вызова формы. И, если ничего не предпринимать, она создастся снова.
0
Злостный нарушитель
 Аватар для Verevkin
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,900
21.09.2022, 15:40
Цитата Сообщение от Newby52 Посмотреть сообщение
Так оператор может повторно нажать на кнопку вызова формы. И, если ничего не предпринимать, она создастся снова.
Да ёпть...
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure ShowSearchDialog;
begin
  for var idx:= 0 to Screen.FormCount - 1 do
    if Screen.Forms[idx] is TFormSearch
      then begin
             Screen.Forms[idx].Show();
             exit;  
           end;
           
  TFormSearch.Create(Application).Show();   
end;
0
 Аватар для Newby52
43 / 38 / 5
Регистрация: 24.07.2018
Сообщений: 214
Записей в блоге: 6
21.09.2022, 15:46  [ТС]
А при обработке OnClose формы, прятать её, что ли?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
21.09.2022, 15:47
Verevkin,
Веревкин ли это пишет оО или двойник ?? а зачем ее искать? Ну создал если ее уже, то она уже где-то создана, октрывай еще раз суй что надо
0
Злостный нарушитель
 Аватар для Verevkin
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,900
21.09.2022, 15:49
Цитата Сообщение от Newby52 Посмотреть сообщение
А при обработке OnClose формы, прятать её, что ли?
Не надо при OnClose ничо делать. По умолчанию параметр Action равен caHide, форма по умолчанию скрывается при закрытии, а не удаляется.

Добавлено через 53 секунды
Цитата Сообщение от Arcor Посмотреть сообщение
Веревкин ли это пишет оО или двойник ?? а зачем ее искать? Ну создал если ее уже, то она уже где-то создана, октрывай еще раз суй что надо
Не люблю юзать глобальные переменные. Да и сама тема основана на том, что им нету доверия у автора.
Вот я и развлекаюсь.
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
21.09.2022, 15:50
Цитата Сообщение от Verevkin Посмотреть сообщение
Не люблю юзать глобальные переменные.
ну а целый Screen и Application в одном примере аж заюзал))))
0
 Аватар для Newby52
43 / 38 / 5
Регистрация: 24.07.2018
Сообщений: 214
Записей в блоге: 6
21.09.2022, 15:52  [ТС]
Ну, во всяком случае, решение, предложенное AzAtom, лучшее для моего стиля работы.
0
Злостный нарушитель
 Аватар для Verevkin
10896 / 5830 / 1289
Регистрация: 12.03.2015
Сообщений: 26,900
21.09.2022, 15:53
Цитата Сообщение от Arcor Посмотреть сообщение
ну а целый Screen и Application в одном примере аж заюзал))))
Да. Но я не хотел, честно. Так получилось.
Смотри мой первый ответ про классовые переменные.

0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
21.09.2022, 15:54
Цитата Сообщение от Newby52 Посмотреть сообщение
оператор может повторно нажать на кнопку вызова формы.
Пусть форма поиска автосоздаётся, ну или вручную создать при нажатии, если её ещё нет, а потом простой код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Assigned(frmSearch) then // Если форма автосоздаваемая, то эти 2 строки не нужны
    Application.CreateForm(TfrmSearch, frmSearch);
 
 
  if not frmSearch.Visible then
  begin
    // Подготовка формы поиска
    frmSearch.Label1.Caption := IntToStr(Random(100));
    frmSearch.Show;
  end;
end;
И всё, пока форма на экране пусть хоть обнажимаются кнопку, форма по новой создана и/или инициализирована не будет.
0
 Аватар для Newby52
43 / 38 / 5
Регистрация: 24.07.2018
Сообщений: 214
Записей в блоге: 6
21.09.2022, 16:00  [ТС]
Пусть форма поиска...
Зачем? Твой вариант в посте №10 - оптимальный.
При нажатии кнопки проверяю на nil. При выходе из формы присваиваю nil. И больше никаких лишних движений. И форма память не засоряет.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
21.09.2022, 16:03
То я предложил, когда контекста не знал. А тут и кода меньше и проще.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.09.2022, 16:03

Запрет открытия нового окна в Chromium
Подскажите как запретить открытие нового окна в Chromium. В WebBrouser это решается таким образом procedure...

Запрет открытия файла если он уже открыт!
Вообщем ситуация такая: написал программу для записи и чтения информации из файла. Этот файл открывают с разных компов по сети. Как...

Как сделать горячие клавиши открытия формы
Как сделать горячие клавиши например на выполнение действия Form1.Show; ? Ведь если форма до этого была скрыта то она уже мало на что...

Подгрузка данных после открытия формы
Здравствуйте, подскажите событие которое идет после formshow. Нужно после того как форма загрузилось, подгрузить данные на форму, ничего не...

запрет повторного открытия формы
Как запретить повторное открытие формы, допустим мой самодельный браузер запущен, если я кликну мышью по какой нибудь хтмл -ке ,запускается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Новая последнея моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru