|
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
|
||||||
Cannot change Visible и Access violation в одном флаконе28.10.2022, 22:07. Показов 2989. Ответов 33
Метки access violation, delphi, delphi 11, false, form, lasarus, lazarus, true, visible, дельфи, лазарус, форма (Все метки)
Добрый вечер! Возникла интересная проблема: в проекте две (на самом деле больше) формы. Первая главная, вторая нужна. Первая форма должна прогружаться и после этого прятаться, а закрытие второй формы (как и остальных) должно приводить к закрытию главной формы и проекта в целом. Но почему-то программа при компиляции выдаёт одну из двух ошибок: либо "Cannot change Visible in OnShow or OnHide", если в первой форме Visible:=false, либо "Access Violation at address 002F42BF in module (программа.хехе). Read of address 000003E0", если указанный Visible стоит в true. Вопрос, что с этим делать?)
К слову, переношу саму программу с Лазаруса, но не думаю, что это важно. Мне кажется, что ошибка кроется в form.Show или в form.Hide, но не могу найти своей ошибки/ Добавлено через 3 минуты Сам код здесь:
0
|
||||||
| 28.10.2022, 22:07 | |
|
Ответы с готовыми решениями:
33
FT232 на 3 функции в одном флаконе Указатели и непонятки в одном флаконе! Foreach и BigInteger в одном флаконе |
|
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
|
||
| 02.11.2022, 18:49 [ТС] | ||
|
AzAtom, отчасти этим
). Тогда установка таймера, работающего на разных формах (в других формах его тоже предполагалось использовать) безрезультатно отняла несколько суток времени. Видимо не моим кривым ручкам таймеры делать ![]() И мы же все помним, что таймер в Delphi иногда шалит (ох уж эти паскалевские флешбеки))) Так что нет, таймер не подходит. Сейчас думаю, наверное и OnShow мне не подходит, попробую перенести всё в OnActivate
0
|
||
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
|
|||
| 02.11.2022, 19:38 | |||
|
Я так и не понял смысл не показывать форму, на которой есть какие-то элементы, полосы прогресса и т.д. Ещё можно использовать только одну форму для всего, а элементы от каждой формы разместить на панелях и показывать нужную панель. Либо можно использовать фреймы.
0
|
|||
|
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
|
|
| 02.11.2022, 19:59 [ТС] | |
|
Нуу, смысл тот же - на первой и главной форме идут все процессы, загрузки, сохранения данных, всё это происходит за глазами пользователя автоматически. Перед запуском всех процессов проверяется логин(активация) - если приложение активировано, то программа продолжает работу, если нет - открывает формы выбора языка и активации. По завершении алгоритма открывается GUI-форма (в коде значится как MainWindow), чистое средство просмотра, предлагающее ознакомиться с данными через фреймы. На фреймах второй этап - вытащить уже сохранённые данные, и вывести статистику по ним: большее/меньшее, среднее, производные от некоторых параметров и т.д.. То есть, задачи главной формы - загрузка и архивация сырых данных, задача GUI - быстро и красиво открыться, задачи фреймов - обработать сырое и представить готовое. На мой взгляд, структура достаточно оптимальная и риски при реализации оправданы. Ну и где-то половина кода уже написана, жалко бросать(
И, теперь думаю, что вместо скрытия главной формы (ProgressBar на ней для отладки) можно и оставить её, чтобы и пользователь её видел, тогда и проблем с её исчезновением не будет Что теперь скажете?
0
|
|
|
|
|
| 03.11.2022, 09:50 | |
Сообщение было отмечено aprilpotter912 как решение
Решение
Смысл ФОРМЫ - в ее существовании на экране.
Это ВИЗУАЛЬНЫЙ элемент интерфейса Главная форма приложения имеет дополнительную нагрузку - ее существование отождествляется с работой самого приложения. Она также имеет кнопку на панели задач. Это базовая архитектура приложения в Делфи. Вы в принципе можете все поменять, переписать и т.д. Вопрос - зачем, какой профит? Зачем писать то, что уже написано до вас? Все процессы, которые идут в фоне, не требуют для себя формы. Если вам нужно где-то разместить компоненты доступа к БД - заведите себе datamodule например. Представьте, что у вас веб-страница, и все встанет на свои места. После логина можно накидать на главную форму разной информации, лучше всего упаковывая логически объединенные куски во фреймы - это те же формы, только не для открытия в отдельном окне, а для встраивания в форму. Создали фрейм - он сам там чото работает. Удалили - не работает. Все аккуратно Главная форма просто существует. Ну кнопки к-нить общие может держать. Показывать статус кто залогинился и прочее. Еще раз рекомендую присмотреться к веб-страницам. Это уже проверенный десятилетиями вариант.
1
|
|
|
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
|
||||||
| 03.11.2022, 19:02 [ТС] | ||||||
|
Хорошо, спасибо, постараюсь реализовать..
Добавлено через 1 час 58 минут При повторном просмотре вскрылся удивительный факт - ошибка повторяется в этом коде:
0
|
||||||
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
|
|||||||
| 03.11.2022, 20:23 | |||||||
|
Почти неделю возитесь с кучей багов, а могли бы за пол дня переделать на одну форму с фреймами или с панелями, и вот этих багов не было бы. Итак, у вас главная форма это LogoForm. Смотрите в файле проекта (.dpr), первая создаваемая форма - это главная форма. При обычном порядке, когда у главной формы Visible = false, при создании форм сначала наступает событие OnCreate каждой формы, и затем, при показе событие OnShow формы, которая появилась на экране. То есть, так: LogoForm.FormCreate; SetLanguageWindow.FormCreate; ActivationWindow.FormCreate; MainWindow.FormCreate; LogoForm.FormShow; Но если главной форме (LogoForm) установить Visible = true, то события возникают так: LogoForm.FormCreate; LogoForm.FormShow; --- а здесь идёт обращение к ещё не созданной форме, что и вызывает ошибку! SetLanguageWindow.FormCreate; ActivationWindow.FormCreate; MainWindow.FormCreate; В принципе, порядок событий OnCreate и OnShow такой же и у остальных форм. Поставьте на эти события у всех форм обработчики с сообщениями вида:
2
|
|||||||
|
|
|
| 03.11.2022, 20:37 | |
|
и тут мы еще раз обращаемся к здравому смыслу
а зачем создаются все эти формы? они даже на экран вероятно показываться не будут. и опять же про все это я уже писал в статье вы и чужое не читаете и со своим справиться не можете. зачем тогда вам помогать?
1
|
|
|
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
|
|
| 04.11.2022, 01:58 [ТС] | |
|
AzAtom, Спасибо огромное, очень помогло!
krapotkin, Да, наверное, ошибки у меня глупые(( Если честно, то казалось, что такое разделение будет работать лучше, т.к. любой крупный проект, те же Delphi и Lazarus, используют отдельное окно для загрузки данных, а чрезмерно нагруженное окно перестаёт отвечать, вот, в общем-то и всё. Пойду исправлять
0
|
|
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
|
|||
| 04.11.2022, 07:48 | |||
|
1
|
|||
|
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
|
||
| 04.11.2022, 14:20 [ТС] | ||
|
При длине первого списка от 50 до 100 строк и длине второго примерно 2000 строк обработка списка занимает 5-7 секунд, всё это время элементы на форме не отвечают вообще(в лазарусе), или в коде/данных ничего не выделяется (в Паскале), программа естественно однопоточная И мне очень не хочется, чтобы пользователи видели это зависание
0
|
||
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
|
|
| 04.11.2022, 14:50 | |
|
aprilpotter912, и что, думаете, добавив ещё форм дело станет лучше? В любом случае, всё продолжит работать в одном потоке, и пока обработка данного сообщения не закончится, не начнётся обработка следующего. И от количества форм в этом случае подвисания не зависят.
А чтобы интерфейс не подвисал можно либо запустить обработку в отдельном потоке, либо переделать процедуру так, чтобы она выполнялась пошагово при каждом вызове процедуры, тогда её можно поместить в обработчик OnIdle и можно обойтись одним потоком и ничего подвисать не будет.
1
|
|
|
Модератор
|
||||
| 04.11.2022, 14:58 | ||||
|
Но даже и если не трогать потоки: что мешает на каждой итерации цикла дать программе обработать сообщения Windows? Не кошерный, конечно, вариант, но, таки, лучше, чем Ваш огород со скрытием/показом форм.
1
|
||||
|
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
|
|
| 04.11.2022, 19:55 [ТС] | |
|
Понятно, понятно..
Значит, придётся пересматривать всю архитектуру проекта ![]() Добавлено через 2 минуты AzAtom, D1973, krapotkin, Newby52, спасибо..)
0
|
|
| 04.11.2022, 19:55 | |
|
Хочу EXE и DLL в одном флаконе. Не получается.
Обработчик на закрытие формы и ошибка "Cannot change Visible in OnShow or OnHide" .live('change') загружается несколько раз при одном событии Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|