应用: 自定义组件, 自定义事件已经扑克牌发牌规则
unit uCommonDefine;
interface
uses
ExtCtrls, Windows, Classes, SysUtils, Dialogs;
type
TPukePanel = class(TPanel)
private
Images: array[0..3] of TImage;
CardNames : array[0..3] of string;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
protected
// Panel上的 Click 处理例程
procedure ClickMe(Sender: TObject);
// 扑克牌是上的Click 处理例程
procedure ClickCard(Sender: TObject);
end;
implementation
const
CARDNAME_CARDSKIN: string = 'cardSkin';
CARDNAME_54: string ='54';
CARDNAME_GO: string ='GO';
PICCARDNAMES: array[0..53] of string = ('blackJoker', 'redJoker',
'cl1', 'cl2', 'cl3', 'cl4', 'cl5', 'cl6', 'cl7', 'cl8', 'cl9', 'cl10', 'clj', 'clq', 'clk',
'di1', 'di10', 'di2', 'di3', 'di4', 'di5', 'di6', 'di7', 'di8', 'di9', 'dij', 'dik', 'diq',
'he1', 'he10', 'he2', 'he3', 'he4', 'he5', 'he6', 'he7', 'he8', 'he9','hej', 'hek', 'heq',
'sp1', 'sp10', 'sp2', 'sp3', 'sp4', 'sp5', 'sp6', 'sp7', 'sp8', 'sp9', 'spj', 'spk', 'spq');
var
PicFileName: string = '';
PicPath : string ='./Cards/';
{ TPukePanel }
procedure TPukePanel.ClickCard(Sender: TObject);
var
cardname: string;
PicIndex: Integer;
i: Integer;
HaveSelect: Boolean;
begin
//ShowMessage((Sender as TImage).Name);
Randomize;
HaveSelect := False;
while (not HaveSelect) do
begin
PicIndex := Random(54);
for i := 0 to 3 do
if PICCARDNAMES[picIndex] = CardNames[i] then
HaveSelect := HaveSelect or True;
if HaveSelect then
begin
ShowMessage('此张 Card 已经抽出 :' + PICCARDNAMES[picIndex]);
HaveSelect := False
end
else
Break;
end;
// if HaveSelect then //Exit; // 此张 Card 已经抽出
// begin
// ShowMessage('此张 Card 已经抽出 :' + PICCARDNAMES[picIndex]);
// Exit;
// end;
CardNames[(Sender as TImage).Tag] := PICCARDNAMES[picIndex];
cardname := PicPath + CardNames[(Sender as TImage).Tag] + '.BMP';
if FileExists(cardname) then
(Sender as TImage).Picture.LoadFromFile(cardname);
end;
procedure TPukePanel.ClickMe(Sender: TObject);
begin
//ShowMessage('自定义的鼠标事件.');
end;
constructor TPukePanel.Create(AOwner: TComponent);
var
i: Integer;
begin
inherited Create(AOwner);
Width := 500;
Height := 120;
for i := 0 to 3 do
begin
Images[i] := TImage.Create(Self);
with Images[i] do
begin
Tag := i;
Name := 'Image' + IntToStr(Tag);
Parent := Self;
AutoSize := True;
Center := True; // 居中
//Transparent := True; 透明
CardNames[i] := CARDNAME_CARDSKIN;
PicFileName := PicPath + CardNames[i] + '.BMP';
if FileExists(PicFileName) then Picture.LoadFromFile(PicFileName);
Left := 50 + 80*i;
Top := 10;
// Card Click事件设定
OnClick := ClickCard;
end;
end;
// Panel Click 事件设定
OnClick := ClickMe;
end;
destructor TPukePanel.Destroy;
var
i: Integer;
begin
for i := 0 to 3 do
begin
if Images[i]<> nil then FreeAndNil(Images[i]);
end;
inherited Destroy;
end;
end.