Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Как сделать выполнения кода но после полной загрузки формы и только 1 раз
Например Событие OnCreate происходит до.
Событие OnActive OnShow происходят не 1 раз
OnActive тогда когда форма стала активной
OnShow Можно но только если форму не собираешься скрывать. Так что в моем случае тоже не подойдет.
И да. Пожалуйста без WinApi так как его я не хочу задействовать. Скажем так можно и с ним но в крайний случай.
Кто знает как организовать такое.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.01.2018, 00:22
Ответы с готовыми решениями:

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

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

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

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

37
Айлурофил
441 / 375 / 107
Регистрация: 27.05.2017
Сообщений: 2,155
Записей в блоге: 1
01.01.2018, 01:20 2
На OnCreate обнуляется внутренняя переменная, на OnShow увеличивается на 1. Код выполнить, если переменная=1.

Добавлено через 24 минуты
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
27
28
29
30
31
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  cnt:integer;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
cnt:=0;
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
inc(cnt);
if cnt=1 then
   begin
// Код
   end;
end;
0
Модератор
9261 / 6039 / 2379
Регистрация: 21.01.2014
Сообщений: 25,803
Записей в блоге: 3
01.01.2018, 08:05 3
Massaraksh7, я вот так делал...
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
27
28
29
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    FirstStart: boolean;  
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 FirstStart := true;
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
 if not FirstStart then Exit;
// Код при первом старте
 FirstStart := false;
end;
0
Massaraksh7
01.01.2018, 15:04
  #4

Не по теме:

Наша профессия тем и хороша, что одно дело можно сделать сотней способов, и все они будут хорошими.

0
D1973
01.01.2018, 19:58
  #5

Не по теме:

Цитата Сообщение от Massaraksh7 Посмотреть сообщение
одно дело можно сделать сотней способов
:good:

0
Джоуи
1081 / 643 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
01.01.2018, 22:17 6
Поделюсь и своим способом
Delphi
1
2
3
4
5
6
7
8
9
10
var WasShown: boolean = false;
...
procedure TForm1.FormShow(Sender: TObject);
begin
  if not WasShown then
  begin
    WasShown := true;
    // Ваш код
  end;
end;
Глобальная переменная, изначально false, но после отработки OnShow приравнивается к true
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
01.01.2018, 23:18 7
фуфуфу глобальная переменная
сделайте ее полем класса формы
1
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
02.01.2018, 01:18 8
Лично я вообще не понял проблемы.
Почему не годится OnCreate?
0
Джоуи
1081 / 643 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
02.01.2018, 01:59 9
northener,
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
полной загрузки формы и только 1 раз
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
02.01.2018, 02:12 10
Joey, это малоосмысленный набор слов (с скорее всего неграмотным употреблением термина "загрузка").
Что такое полная загрузка формы? В OnCreate форма создана или загружена из ресурсов полностью. Чего ещё надо ждать?
Насчёт OnShow тоже есть непонятка. Если это главная форма приложения, то откуда возьмутся повторные вызовы этого обработчика?
0
Joey
02.01.2018, 02:18
  #11

Не по теме:

Не знаю, башка не варит, пошел спать

0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
02.01.2018, 02:25 12
Цитата Сообщение от Joey Посмотреть сообщение
Если спустить форму
Что значит "спустить"? Если речь о "минимизировать", то после восстановления OnShow не вызывается. Готов приложить тестовый проект.
0
Айлурофил
441 / 375 / 107
Регистрация: 27.05.2017
Сообщений: 2,155
Записей в блоге: 1
02.01.2018, 02:29 13
Цитата Сообщение от northener Посмотреть сообщение
Если это главная форма приложения, то откуда возьмутся повторные вызовы этого обработчика?
Если.
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
02.01.2018, 02:42 14
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Если.
А если не главная, то вообще никаких проблем!
Т.е. реальных проблем, а не выдуманных троешниками, которые не смогли правильно спроектировать программу.
0
Айлурофил
441 / 375 / 107
Регистрация: 27.05.2017
Сообщений: 2,155
Записей в блоге: 1
02.01.2018, 03:03 15
Цитата Сообщение от northener Посмотреть сообщение
Почему не годится OnCreate?
Здесь, ты, конечно, теоретически прав. Но это не всегда бывает удобно.
Например,
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.........
Procedure DoSomething(n:integer);
.........
implementation
.........
Procedure DoSomething(n:integer);
begin
Form1:=TForm1.Create(nil);
with Form1 do
   begin
   LoadSomedata(n);
   ShowModal;
   Free;
   end;
end;
В секции onCreate параметр n неизвестен.

Добавлено через 6 минут
Нет, неудачно. Вот так понятнее.
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
27
28
29
30
type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  var gn:integer;
  public
    { Public declarations }
  end;
 
procedure DoSomething(n:integer);
var  Form1: TForm1;
implementation
{$R *.dfm}
 
procedure DoSomething(n:integer);
begin
Form1:=TForm1.Create(nil);
with Form1 do
   begin
   gn:=n;
   ShowModal;
   Free;
   end;
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
LoadSomeData(gn);
end;
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
02.01.2018, 12:16  [ТС] 16
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
На OnCreate обнуляется внутренняя переменная, на OnShow увеличивается на 1. Код выполнить, если переменная=1.
На счет этого кода я в курсе но думал есть более правильный способ

И да сразу извеняюсь за ошибку. Когда сказал полной загрузке я и имел в виду и ее отображение тоже.

Меня и так все поняли но это не правльно. В OnCreate форма и так полностью загружена так как изменять ее и все поля на ней можно. Она лишь не отображается.
0
Айлурофил
441 / 375 / 107
Регистрация: 27.05.2017
Сообщений: 2,155
Записей в блоге: 1
02.01.2018, 14:41 17
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
но думал есть более правильный способ
Интересно, какие основания были так думать?
0
15 / 14 / 3
Регистрация: 14.12.2017
Сообщений: 240
02.01.2018, 15:06 18
Цитата Сообщение от krapotkin Посмотреть сообщение
сделайте ее полем класса формы
это как?
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
02.01.2018, 15:35  [ТС] 19
Так. OnShow происходит до отображения формы. А мне нужно выполнить код после отображения. Какие есть идеи
На счет откуда я знаю что OnShow происходит до отображения то вот от сюда

Delphi
1
2
3
4
5
procedure TfrmLibxEditor.FormShow(Sender: TObject);
begin
  Sleep(5000);
  Caption := 'd.m,n fsmdfbjgbsdfkjgd';
end;
Форма появляется через 5 секунд.

Мне нужно выполнить скан и загрузку файлов но делать нужно только полной загрузки формы включая ее появление
0
Айлурофил
441 / 375 / 107
Регистрация: 27.05.2017
Сообщений: 2,155
Записей в блоге: 1
02.01.2018, 15:40 20
OnPaint.
Ты на вопрос #17 не ответил.
0
02.01.2018, 15:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2018, 15:40
Помогаю со студенческими работами здесь

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

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

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

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

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

Программа без формы, как сделать что б не закрывалась после выполнения кода?
program Project1; uses IdHTTP; var idhttp1: TIdHTTP; {$R *.res} begin ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru