Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Nikoli4
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 159
1

Обработка таймера формы 1 в форме 2

25.11.2016, 10:18. Просмотров 306. Ответов 11
Метки нет (Все метки)

Добрый день.
Интересует следующий вопрос можно ли как то обрабатывать таймер одной формы в другой?

Например в первой форме:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
unit Form1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Constant, Vcl.ExtCtrls, Vcl.StdCtrls, System.Types;
 
 
type
  procedure Timer1Timer(Sender: TObject);
  ......................
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//что то 1
end;
И во второй мы пишем такой же обработчик но делаем что то другое
Delphi
1
2
3
4
procedure Form1.Timer1Timer(Sender: TObject);
begin
//что то 2
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2016, 10:18
Ответы с готовыми решениями:

Запуск таймера на второй форме
Подскажите, пожалуйста слюдующее: Как сделать переход со второй формы на...

Запуск таймера на второй форме по нажатию кнопки на первой
Добрый день, столкнулся с проблемой, имеются 2 формы, нужно что бы таймер...

Переход на 2 форму с 1 формы с использованием таймера
как сделать чтоб программа переходила на 2 форму с 1 формы с использованием...

Обработка информации в табличной форме
Заполнить в диалоге таблицу объёма продаж различных категорий това-ров фирмой...

Привязка формы к форме
Здравствуйте! У меня появилась необходимость привязать форму(неосновную) к...

11
DenNik
Непрофессионал
1801 / 1409 / 307
Регистрация: 26.07.2011
Сообщений: 7,872
25.11.2016, 10:24 2
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
...
public
  procedure ProcForTimer1(Sender: TObject);
  procedure ProcForTimer2(Sender: TObject);
end;
 
...
 
implementation
 
procedure TForm1.ProcForTimer1(Sender: TObject);
begin
  // что-то одно
end;
 
procedure TForm1.ProcForTimer2(Sender: TObject);
begin
  // что-то другое
end;
 
Button1Click();
begin
   Timer1.OnTimer:= ProcForTimer1;
end;
 
Button2Click();
begin
   Timer1.OnTimer:= ProcForTimer2;
end;
но это изврат. опиши исходную задачу
0
Nikoli4
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 159
25.11.2016, 10:49  [ТС] 3
Да как таковой задачи не было. Просто много форм и на каждой свой таймер. Подумал можно ли как нибудь свести все к одному таймеру.
0
Nanotentacle
337 / 218 / 95
Регистрация: 20.10.2016
Сообщений: 1,021
25.11.2016, 10:52 4
Nikoli4, создаешь массив TNotifyEvent в основной форме с таймером, со всех форм собираешь функции обработки таймера в этот массив, в основной форме последовательно вызываешь эти функции из массива при срабатывании таймера.
0
DenNik
Непрофессионал
1801 / 1409 / 307
Регистрация: 26.07.2011
Сообщений: 7,872
25.11.2016, 11:23 5
глупости все это. с самого начала. ты наверное ошибочно полагаешь, что если много таймеров, то это будет занимать много памяти. таки ты ошибаешься
0
Nikoli4
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 159
25.11.2016, 11:50  [ТС] 6
Цитата Сообщение от Nanotentacle Посмотреть сообщение
Nikoli4, создаешь массив TNotifyEvent в основной форме с таймером, со всех форм собираешь функции обработки таймера в этот массив, в основной форме последовательно вызываешь эти функции из массива при срабатывании таймера.
Получается запускать обработчики, но вот взаимодействовать с элементами другой формы не получается начинается acces violation. Не очень понял что передавать при вызове обработчика. если просто self в другой форме self снавиться nil

Цитата Сообщение от DenNik Посмотреть сообщение
глупости все это. с самого начала. ты наверное ошибочно полагаешь, что если много таймеров, то это будет занимать много памяти. таки ты ошибаешься
я не думал что может занимать много памяти. Смущает большое количество таймеров.
0
Nanotentacle
337 / 218 / 95
Регистрация: 20.10.2016
Сообщений: 1,021
25.11.2016, 11:55 7
Nikoli4, обращения, вообще-то, происходят, скажем так, "из обработчика". Если у вас self становится nil, это значит что у вас ссылка не на ту процедуру. Вернее, на процедуру несуществующего объекта. Пока не покажете код размышлять о причинах тяжело.

DenNik, иногда бывают ситуации, когда нужна синхронизация одним таймером нескольких объектов. Я очень сомневаюсь, что сейчас именно такой случай, но иногда приходится извращаться. Хотя, конечно, может быть есть более простые способы, про которые я просто не знаю.
0
DenNik
Непрофессионал
1801 / 1409 / 307
Регистрация: 26.07.2011
Сообщений: 7,872
25.11.2016, 12:05 8
Цитата Сообщение от Nikoli4 Посмотреть сообщение
можно ли как то обрабатывать таймер одной формы в другой?
а это глупости в квадрате

Добавлено через 55 секунд
Цитата Сообщение от Nanotentacle Посмотреть сообщение
есть более простые способы
конечно есть. нужно только прописать

Delphi
1
2
uses
  Brain;
0
Nikoli4
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 159
25.11.2016, 12:07  [ТС] 9
Форма 1:
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
32
33
34
35
36
37
type
  TTimerEvent = array [1..20] of TNotifyEvent;
var
 TimerEvent : TTimerEvent ; 
.
.
.
procedure TForm1.Button1Click(Sender: TObject);
var
  Frm   : TForm;
  Name  : String;
begin
 
  Name := 'Form2';
  Frm:=FormNameSearch(Name);
  Application.CreateForm(TForm2,Frm);
  Frm.FormStyle := fsStayOnTop;
  Frm.Show;
 
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
    Некая функция по обновлению структур;
    if (flBeacon) then
    TimerEvent[1](Frm);
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
  {Обнуление флаги активности форм}
  flBeacon:= false;
  flMPM:= false;
  flCW:= false;
  {Сбор обработчиков таймера с других форм}
  TimerEvent[1]:=CtrlBeacon.Form2.Timer1Beacon;
end;
Форма 2:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
type
  TForm2 = class(TForm)
    PTest: TPanel;
    Edit1: TEdit;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    fNTagElem: integer;
    procedure LanguageToForm;
    //procedure Timer1Timer(Sender: TObject);
  public
    { Public declarations }
    KA : Word;
    StrBlen: String;
    StrBlru: String;
    constructor Create(AOwner: TComponent) ; override;
    property NTagElem : integer read fNTagElem write fNTagElem;
    procedure Timer1Beacon(Sender: TObject);
  end;
 
var
  Form2: TForm2;
  flTest : boolean;
 
implementation
  uses Form1, модуль со структурами;
{$R *.dfm}
 
procedure TForm2.Button1Click(Sender: TObject);
begin
//
end;
 
constructor TForm2.Create(AOwner: TComponent);
begin
  fNTagElem := 0;
  inherited Create(AOwner) ;
end;
 
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FrmBRK.flBeacon:=true;
end;
 
procedure TForm2.FormCreate(Sender: TObject);
begin
//
end;
 
procedure TForm2.FormShow(Sender: TObject);
begin
//Время отображения подсказок
  Application.HintHidePause:=20000;
  Form1.flBeacon:=true;
  Edit1.Text := '2';
  PTest.Color:=clRed;
end;
 
procedure TForm2.LanguageToForm;
//var
  //ind: Longint;
begin
//
 
end;
 
procedure TForm2.Timer1Beacon(Sender: TObject);
var
  i : integer;
begin
//
 if flTest then
 begin
 //PTest.Color:=clRed;
 Edit1.Text := '2';
 flTest := false;
 end
 else
 begin
 //PTest.Color:=clBlue;
 Edit1.Text := '1';
 flTest := true;
 end;
 
end;
end.
0
Nanotentacle
337 / 218 / 95
Регистрация: 20.10.2016
Сообщений: 1,021
25.11.2016, 15:19 10
А событие FormShow происходит до или после создания Form2? Не проверял код в делфи, поэтому это только догадка.
0
Nikoli4
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 159
28.11.2016, 09:48  [ТС] 11
До. Все вроде разобрался как вызывать.
0
Teodor7
52 / 52 / 5
Регистрация: 22.11.2016
Сообщений: 268
28.11.2016, 10:16 12
Цитата Сообщение от Nanotentacle Посмотреть сообщение
событие FormShow происходит до или после создания Form
После. Сначала создается, а потом показывается. Исключение - форма чеширского кота
0
28.11.2016, 10:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2016, 10:16

Переход от формы к форме (Delphi 7)
Здравствуйте! У меня вопрос по (Delphi 7) поводу пререхода от формы к форме!...

Отображение формы на главной форме
Здравствуйте, помогите решить проблему. Имею главную форму программы и 2...

Передать форме открытие модальной формы
Привет всем, подскажите как можно сделать следующее: Есть Главная форма. По...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru