Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904

Выполнения кода после полной загрузки формы но только 1 раз

01.01.2018, 00:22. Показов 7791. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Как сделать выполнения кода но после полной загрузки формы и только 1 раз
Например Событие OnCreate происходит до.
Событие OnActive OnShow происходят не 1 раз
OnActive тогда когда форма стала активной
OnShow Можно но только если форму не собираешься скрывать. Так что в моем случае тоже не подойдет.
И да. Пожалуйста без WinApi так как его я не хочу задействовать. Скажем так можно и с ним но в крайний случай.
Кто знает как организовать такое.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.01.2018, 00:22
Ответы с готовыми решениями:

Реализация полной загрузки формы перед обработкой кода
Возникла проблема с загрузкой формы. Сплеш скрин по своей сути полный бред, ведь она открывает новую форму не открывая главную давая ей...

Проигрывает, сохраняет только после полной загрузки
в общем такая проблема в браузере(опере, ие) нажимаю что либо скачать, долго грузиться(как я понял он скачивает в этот момент) потом...

Webbrowser Делать действие только после полной загрузки страницы
Здравствуйте! Мне не получается решить одну проблему. Я создаю автокликер, для этого использую WebBrowser. Все действия автокликера...

37
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
02.01.2018, 15:51  [ТС]
Студворк — интернет-сервис помощи студентам
Нет. Походу нет события. OnActive происходит после отображения формы но до того кого как на ней отобразятся все элементы.

Добавлено через 4 минуты
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Интересно, какие основания были так думать?
Основания думать то что в умном коде обычно не используется переменная только для того чтобы произвести одно действие. Ну по крайней мере в данном случае мне кажется неаправильным да и вообще какая разница это все равно произойдет до того как форма и все ее элементы будут отображены.
Идея сделать после отображения формы и всех ее элементов отобразить вторую форму которая будет показывать прогресс поиска и загрузки всех файлов.

Добавлено через 4 минуты
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
OnPaint.
Ну тоже самое происходит до того как отобразятся все элементы на ней.

Если на то пошло то можно использовать таймер с интервалом 1 секунда 1 раз. Но мне бы правильный способ реализации.
0
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
02.01.2018, 16:01
Создать процедуру с необходимым кодом. В коде проекта после создания всех форм вызвать процедуру. Имхо, должно сработать.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
02.01.2018, 16:09
wwn41268,
поле класса
1
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
02.01.2018, 16:27
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Но мне бы правильный способ реализации.
Почему ты думаешь, что должен существовать какой-то "правильный" способ? Можно десятками способов сделать одно и то же, и потом долго спорить, какой способ правильный.

Добавлено через 8 минут
Кстати, проверь код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
type
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure Draw;
var i,j:integer;
begin
for i:=0 to 800 do for j:=0 to 800 do  Form1.Canvas.Pixels[i,j]:=clRed;
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
Draw;
end;
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
02.01.2018, 18:07  [ТС]
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Кстати, проверь код:
Этот код будет 800 точек формы красным цветом. Смысла проверять не вижу
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
02.01.2018, 18:28
После появления формы?

Добавлено через 18 минут

Не по теме:

А вообще, я думаю, из перфекционистов получаются хорошие кодировщики, но, увы, плохие программисты.

0
Джоуи
 Аватар для Joey
1083 / 645 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
02.01.2018, 22:38
northener, приношу свои извинения, OnShow действительно не вызывается при сворачивании и последующем разворачивании формы. Мой способ - для работы с треем, я обычно для затреенных приложений минимизацию формы подменяю ее сокрытием; при клике на иконке трея форма отображается методом Show, тогда и срабатывает OnShow. Спишу это на сонливость)
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
03.01.2018, 01:56
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Нет. Походу нет события.
А так ли уж влом описать вашу задачу? Зачем нужны непонятные никому такие извращения
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
после отображения формы но до того кого как на ней отобразятся все элементы

Не по теме:

Цитата Сообщение от Joey Посмотреть сообщение
northener, приношу свои извинения
Да не за что извиняться. Хотя вообще-то для меня такие действия при работе с треем несколько необычные. Всё-таки в трей таки принято "сворачивать" приложение, а не форму. Особенно учитывая ту самую изначально встроенную в Дельфи невидимую форму объекта Application. Но раз у вас работает, то ваш способ тоже годится.

0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
25.12.2019, 20:30  [ТС]
Так возвращаюсь к теме. Есть ли событие которое произойдет после того как форма и все элементы на ней отобразятся. Использовать для этого таймер както глупо. Должен быть способ без таймера. Даже с одноразовой переменной но OnShow и OnPaint происходят до того как форма и все элементы отобразились.
Нужно именно после.

Добавлено через 16 минут
Хотя вру. OnPaint действительно происходит после отображения но както это неправильно выполнять код который к отрисовке вообще никакого отношения не имеет в событии отрисовки.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
25.12.2019, 20:40
Возвращаясь к теме, до сих пор не понятно, какие действия нельзя/невозможно выполнять в OnCreate?
Не, я знаю, что есть такие действия, но конкретно в этой теме - не понятно.

Почему нельзя эти файлы загрузить в OnCreate? Просто не хочется?

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Если на то пошло то можно использовать таймер с интервалом 1 секунда 1 раз.
Способ неплох. Но в общем случае нет гарантии, что событие таймера не наступит до появления формы. Хотя, целая секунда неплохой запас.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
25.12.2019, 20:59  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
Способ неплох. Но в общем случае нет гарантии, что событие таймера не наступит до появления формы. Хотя, целая секунда неплохой запас.
И так секунду ставлю но это Д Код так сказать. Как вариант это переменная и событие OnPaint. И то лучше но само название события не подходит. Тоесть какое логическое использование этого события. Отрисовка. А у меня поиск файлов.
Цитата Сообщение от AzAtom Посмотреть сообщение
Возвращаясь к теме, до сих пор не понятно, какие действия нельзя/невозможно выполнять в OnCreate?
Не, я знаю, что есть такие действия, но конкретно в этой теме - не понятно.
Почему нельзя эти файлы загрузить в OnCreate? Просто не хочется?
Повторяю. OnCreate происходит до того как все элементы формы отобразились. Более того. OnCreate происходит до того как форма отобразится на экране.
Конечно это не особо важно еслли действия будут происходить в другом потоке. Но мне чисто мне хочется чтобы поиск файлов происходил только после того как отобразится форма и все элементы на ней.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
25.12.2019, 21:30
Кому как. Лично мне не понравится, если программа сначала появится, а потом через несколько секунд данные на форме обновятся.
0
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
26.12.2019, 04:29
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Но мне чисто мне хочется чтобы поиск файлов происходил только после того как отобразится форма и все элементы на ней.
Я так понимаю, это требование проистекает из необходимости отобразить саму форму, и только потом ее "заблокировать" длительным процессом? Тогда возникает несколько вопросов:
1) Почему не поток? Это же классическое и простое решение проблемы;
2) Почему не использовать ProgressBar? Создаем две формы, первая - рабочая, вторая - с ProgressBar и надписью "Загрузка, подождите". В коде самого приложения сначала создаем рабочую форму, потом ProgressBar. В коде формы ProgressBar'а ведем длительную обработку с передачей процента выполнения в ProgressBar и изредка делаем Application.ProcessMessages (давно с прогрессбаром не работал, не помню обновляется ли "картинка" при задании нового значения. Если обновляется, то ProcessMessages не надо). Когда процесс закончится - отображаем основную форму;

Т.е. не надо пытаться решить задачу "в лоб", имхо, подобные задачи надо решать оптимально.
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
26.12.2019, 07:58
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Более того. OnCreate происходит до того как форма отобразится на экране.
Может потому что OnCreate дословно обозначает "при создании", а не "после отображения"?
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
OnPaint действительно происходит после отображения
Не-а. OnPaint дословно обозначает "при прорисовке", то есть и не "до" и не "после", а "в процессе".
Цитата Сообщение от northener Посмотреть сообщение
Насчёт OnShow тоже есть непонятка. Если это главная форма приложения, то откуда возьмутся повторные вызовы этого обработчика?
OnShow это "при показе". Выстреливается при установке свойства Visible в True. Если форма всегда невидимая, или её через API мочалят - то есть вероятность что оно никогда и не произойдёт.

Добавлено через 2 минуты
А нафига вообще нужно "все элементы формы отобразились"? Такого события нет и не будет. Просто за никомуненадобностью.
Разве что скриншот делать. Но скриншот своего же UI делается программно, а не костылями.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
26.12.2019, 09:46
что не так с OnShow объясните сначала
обычно для разных там ... более чем достаточно трех событий
onCreate
onShow
onResize
и то onResize прям экзотика если
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
26.12.2019, 11:46  [ТС]
OnShow происходит до того как все элементы отобразятся на форме. Это я протестировал.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
26.12.2019, 12:18
Тема не раскрыта: Для чего нужно, чтобы форма сначала отобразилась со значениями по умолчанию, а потом эти значения поменялись/обновились? В чём смысл?
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
26.12.2019, 12:44
Повторяю. OnShow это "при показе". При установке свойства Visible в True.
Изменение флага. Отобразилось там что-то или нет - вообще не взаимосвязано. Форма при этом может быть вовсе свёрнута и не показываться.

Добавлено через 2 минуты
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Procedure TForm1.Button1Click(Sender: TObject);
Begin
WindowState := wsMinimized;
End;
 
Procedure TForm1.Timer1Timer(Sender: TObject);
Begin
Visible := Not Visible;
End;
 
Procedure TForm1.FormShow(Sender: TObject);
Begin
Winapi.Windows.Beep(400, 200);
End;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.12.2019, 12:44

Webbrowser Делать действие только после полной загрузки страницы
Здравствуйте! Мне не получается решить одну проблему. Я создаю автокликер, для этого использую WebBrowser. Все действия автокликера...

Видеокарта дает изображение только после полной загрузки Windows
Видеокарта Gygabyte GeForse 8500 GT Зайти с ней в БИОС нет возможности и вообще прочитать данные перед загрузкой ОС. Загрузилась винда -...

Как выполнить код функции после полной загрузки формы wxPython
Добрый вечер. Как выполнить код функции после полной загрузки формы wxPython?

Как выполнить действие после полной загрузки формы? События Load и Shown не подходят!
Добрый день, народ! Подскажите, пожалуйста! Как выполнить действие после ОКОНЧАТЕЛЬНОЙ И ПОЛНОЙ ЗАГРУЗКИ формы? Событие Load происходит...

Как сделать, чтобы какой- либо элемент появлялся только после полной его загрузки (например картинка)?
Как сделать, чтобы какой- либо элемент появлялся только после полной его загрузки (например картинка)? Желательно средствами html и css.


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru