183 lines
4.0 KiB
ObjectPascal
183 lines
4.0 KiB
ObjectPascal
unit Unit1;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
|
Buttons, delphicompat, LMessages, LCLType;
|
|
|
|
type
|
|
|
|
{ TMainForm }
|
|
|
|
TMainForm = class(TForm)
|
|
Button1: TButton;
|
|
KillGlobalTimerButton1: TButton;
|
|
SetGlobalTimerButton: TButton;
|
|
SetTimerDestroyButton: TButton;
|
|
SetTimer1Button: TButton;
|
|
SetTimer2Button: TButton;
|
|
SetTimer3Button: TButton;
|
|
KillTimer1Button: TButton;
|
|
KillTimer2Button: TButton;
|
|
KillTimer3Button: TButton;
|
|
SetTimer3bButton: TButton;
|
|
ListBox1: TListBox;
|
|
procedure Button1Click(Sender: TObject);
|
|
procedure KillGlobalTimerButton1Click(Sender: TObject);
|
|
procedure SetGlobalTimerButtonClick(Sender: TObject);
|
|
procedure SetTimer1ButtonClick(Sender: TObject);
|
|
procedure SetTimer2ButtonClick(Sender: TObject);
|
|
procedure SetTimer3ButtonClick(Sender: TObject);
|
|
procedure KillTimer1ButtonClick(Sender: TObject);
|
|
procedure KillTimer2ButtonClick(Sender: TObject);
|
|
procedure KillTimer3ButtonClick(Sender: TObject);
|
|
procedure SetTimer3bButtonClick(Sender: TObject);
|
|
procedure SetTimerDestroyButtonClick(Sender: TObject);
|
|
protected
|
|
procedure WMTimer(var Message: TLMTimer); message LM_TIMER;
|
|
private
|
|
FGlobalTimer: PtrUInt;
|
|
procedure TimerCallback(AId: PtrUInt);
|
|
procedure TimerCallbackGlobal(AId: PtrUInt);
|
|
procedure TimerCallbackOther(AId: PtrUInt);
|
|
{ private declarations }
|
|
public
|
|
{ public declarations }
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
uses
|
|
strutils;
|
|
|
|
const
|
|
Timer1 = 1;
|
|
Timer2 = 2;
|
|
Timer3 = 3;
|
|
|
|
{ TMainForm }
|
|
|
|
procedure TMainForm.Button1Click(Sender: TObject);
|
|
begin
|
|
ListBox1.Clear;
|
|
end;
|
|
|
|
procedure TMainForm.KillGlobalTimerButton1Click(Sender: TObject);
|
|
begin
|
|
if FGlobalTimer <> 0 then
|
|
begin
|
|
KillTimer(0, FGlobalTimer);
|
|
FGlobalTimer := 0;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.SetGlobalTimerButtonClick(Sender: TObject);
|
|
begin
|
|
FGlobalTimer := SetTimer(0,FGlobalTimer,2000,@TimerCallbackGlobal);
|
|
end;
|
|
|
|
procedure TMainForm.SetTimer1ButtonClick(Sender: TObject);
|
|
begin
|
|
SetTimer(Handle,Timer1,1000,nil);
|
|
end;
|
|
|
|
procedure TMainForm.SetTimer2ButtonClick(Sender: TObject);
|
|
begin
|
|
SetTimer(Handle,Timer2,2000,nil);
|
|
end;
|
|
|
|
procedure TMainForm.SetTimer3ButtonClick(Sender: TObject);
|
|
begin
|
|
SetTimer(Handle,Timer3,3000,@TimerCallback);
|
|
end;
|
|
|
|
procedure TMainForm.KillTimer1ButtonClick(Sender: TObject);
|
|
begin
|
|
KillTimer(Handle,Timer1);
|
|
end;
|
|
|
|
procedure TMainForm.KillTimer2ButtonClick(Sender: TObject);
|
|
begin
|
|
KillTimer(Handle,Timer2);
|
|
end;
|
|
|
|
procedure TMainForm.KillTimer3ButtonClick(Sender: TObject);
|
|
begin
|
|
KillTimer(Handle,Timer3);
|
|
end;
|
|
|
|
procedure TMainForm.SetTimer3bButtonClick(Sender: TObject);
|
|
begin
|
|
SetTimer(Handle,Timer3,3000,@TimerCallbackOther);
|
|
end;
|
|
|
|
type
|
|
|
|
{ TMyButton }
|
|
|
|
TMyButton = class(TButton)
|
|
protected
|
|
procedure WMTimer(var Message: TLMTimer); message LM_TIMER;
|
|
end;
|
|
|
|
{ TMyButton }
|
|
|
|
procedure TMyButton.WMTimer(var Message: TLMTimer);
|
|
begin
|
|
MainForm.ListBox1.Items.Add('WMTimer - Released Button (Should Not Be Fired)');
|
|
end;
|
|
|
|
procedure TMainForm.SetTimerDestroyButtonClick(Sender: TObject);
|
|
var
|
|
Button: TButton;
|
|
begin
|
|
Button := TButton.Create(nil);
|
|
try
|
|
Button.Parent := Self;
|
|
Button.Visible := True;
|
|
SetTimer(Button.Handle, Timer3, 1000, nil);
|
|
finally
|
|
Button.Destroy;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.WMTimer(var Message: TLMTimer);
|
|
var
|
|
AStr: String;
|
|
begin
|
|
case Message.TimerID of
|
|
Timer1: AStr:='Timer1 called';
|
|
Timer2: AStr:='Timer2 called';
|
|
Timer3: AStr:='Timer3 called';
|
|
else
|
|
AStr:='TimerID not identified: '+IntToStr(Message.TimerID);
|
|
end;
|
|
ListBox1.Items.Add('WMTimer - '+AStr);
|
|
end;
|
|
|
|
procedure TMainForm.TimerCallback(AId: PtrUInt);
|
|
begin
|
|
ListBox1.Items.Add('TimerCallback called');
|
|
end;
|
|
|
|
procedure TMainForm.TimerCallbackGlobal(AId: PtrUInt);
|
|
begin
|
|
ListBox1.Items.Add('TimerCallbackGlobal called' + IfThen(AId <> FGlobalTimer, ' ERROR: ID <> GlobalTimer'));
|
|
end;
|
|
|
|
procedure TMainForm.TimerCallbackOther(AId: PtrUInt);
|
|
begin
|
|
ListBox1.Items.Add('TimerCallbackOther called');
|
|
end;
|
|
|
|
end.
|
|
|