unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, ExtCtrls, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
btnDisable1: TButton;
btnDisable2: TButton;
btnDisable3: TButton;
ImageList1: TImageList;
Label1: TLabel;
procedure CardOnClickEvent(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnDisable1Click(Sender: TObject);
procedure btnDisable2Click(Sender: TObject);
procedure btnDisable3Click(Sender: TObject);
private
Cards: array[1..3] of TImage;
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.CardOnClickEvent(Sender: TObject);
var
Current: TImage;
begin
if not(Sender is TImage) then Exit; // Prevent posible error
Current := Sender as TImage;
Current.Picture.Clear;
Application.ProcessMessages;
Sleep(100);
ImageList1.GetBitmap(Random(3), Current.Picture.Bitmap);
end;
procedure TForm1.FormCreate(Sender: TObject); // Generate and show the cards
var
i: Integer;
begin
for i := 1 to 3 do
begin
// Generate the card
Cards[i] := TImage.Create(Self);
Cards[i].Width := 86;
Cards[i].Height := 125;
// Get a random image from ImageList1
ImageList1.GetBitmap(Random(3), Cards[i].Picture.Bitmap);
// Show the card
Cards[i].Parent := Self;
Cards[i].Top := 40;
Cards[i].Left := i * 130 - 60;
// Link the CardOnClicEvent to the card, see line #38
Cards[i].OnClick := @CardOnClickEvent;
end;
end;
procedure TForm1.btnDisable1Click(Sender: TObject);
begin
case (Cards[1].OnClick <> nil) of
True: begin
btnDisable1.Caption := 'Click to' + #10 + 'Enable';
Cards[1].OnClick := nil; // Disable OnClick
end;
False: begin
btnDisable1.Caption := 'Click to' + #10 + 'Disable';
Cards[1].OnClick := @CardOnClickEvent; // Encable OnClick
end;
end;
end;
procedure TForm1.btnDisable2Click(Sender: TObject);
begin
case (Cards[2].OnClick <> nil) of
True: begin
btnDisable2.Caption := 'Click to' + #10 + 'Enable';
Cards[2].OnClick := nil; // Disable OnClick
end;
False: begin
btnDisable2.Caption := 'Click to' + #10 + 'Disable';
Cards[2].OnClick := @CardOnClickEvent; // Encable OnClick
end;
end;
end;
procedure TForm1.btnDisable3Click(Sender: TObject);
begin
case (Cards[3].OnClick <> nil) of
True: begin
btnDisable3.Caption := 'Click to' + #10 + 'Enable';
Cards[3].OnClick := nil; // Disable OnClick
end;
False: begin
btnDisable3.Caption := 'Click to' + #10 + 'Disable';
Cards[3].OnClick := @CardOnClickEvent; // Encable OnClick
end;
end;
end;
end.