![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Как можно создать таймер и процедуру к нему, если форма создается через
var F:TForm; Application.CreateForm(TForm,F); Мне нужно как бы создать таймер без помещения его на форму, а так же привязать действие к нему. Как сделать? ![]() |
|
#2
|
||||
|
||||
|
Код:
uses ExtCtrls; // делфи сам этот модуль подключает, но все таки
...
private
procedure Timer_(Sender: TObject);
...
// там где надо создать таймер:
var
T: TTimer;
begin
T := TTimer.Create(Self); // вместо self твоя форма
T.Interval := 500;
T.OnTimer := Timer_;
T.Enabled := True;
end;
procedure TForm1.Timer_(Sender: TObject);
begin
/// ну а тут твое событие таймера.
end; |
|
#3
|
||||
|
||||
|
таймер без привязки к TForm:
Код:
program Project1;
uses
Windows,
Messages,
Forms,
Classes,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
type
TWndTimer = class
private
FWindowHandle: HWND;
procedure WndProc(var Msg: TMessage);
public
constructor Create;
destructor Destroy; override;
end;
var
FWndTimer: TWndTimer;
{ TWndTimer }
constructor TWndTimer.Create;
begin
inherited Create;
FWindowHandle:=AllocateHWnd(WndProc);
SetTimer(FWindowHandle, 1, 500, nil);
end;
destructor TWndTimer.Destroy;
begin
KillTimer(FWindowHandle, 1);
DeallocateHWnd(FWindowHandle);
inherited Destroy;
end;
procedure TWndTimer.WndProc(var Msg: TMessage);
begin
if Msg.Msg=WM_TIMER then
begin
{ do it }
Windows.Beep(1000, 100);
end else Msg.Result:=DefWindowProc(FWindowHandle, Msg.Msg, Msg.WParam, Msg.LParam);
end;
begin
FWndTimer:=TWndTimer.Create;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
FWndTimer.Free;
end. |