分享
 
 
 

扑克牌组件之二——利用 cards.dll 编写扑克牌组件

王朝delphi·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

扑克组件的编写及使用上一次写了一个利用位图制作的扑克组件,这次换一下,试着利用cards.dll来做一人组件。这个组件没有大小王,速度也比上一个慢了许多。不过这个组件可以设置很多背景,而且它的宽度和长度都是可以更改的。 cards.dll 功能很全,我们这里只用它来画扑克牌的正面和反面,其他的一律不使用。如果您对这些用法感兴趣,可以到微软的MSDN上去查阅,这里就不再罗嗦了。下面请看: unit Card;// 项目:扑克牌组件 之二// 作者:黄涛// 邮件: Hunto@163.com// 日期: 2004.12.16// 本组件调用 Windows 的 cards.dll,如果系统不为2000/XP将无法使用。interfaceuses SysUtils, Classes, Controls,windows;type TCardSuit=(csClub,csDiamond,csHeart,csSpade); //花色 TCard = class(TGraphicControl) private FFaceUp:bool; //是否面朝上 FCardId:Cardinal; //扑克牌的编号 FBackId:Cardinal; //背面图案 procedure SetCardId(Id:Cardinal); //设置扑克牌的编号 procedure SetFaceUp(FaceUp:bool); //设置是否面朝上 procedure SetBackId(const Value: Cardinal); //设置扑克牌的背面图案 function GetSuit: TCardSuit; //得到扑克牌的花色 function GetValue: Cardinal; //得到扑克牌的点数 protected procedure Paint;override; //画扑克牌 public constructor Create(AOwner:TComponent);override; procedure SetCard(Suit:TCardSuit;Value:Cardinal); //设置扑克牌的编号 published property CardId:Cardinal read FCardId write SetCardId; //扑克牌编号 property FaceUp:bool read FFaceUp write SetFaceUp default False; //是否正面朝上 property BackId:Cardinal read FBackId write SetBackId default 0; //背景图案 property Suit:TCardSuit read GetSuit; //花色,只读 property Value:Cardinal read GetValue; //点数,只读 property OnClick; //单击事件 property OnDblClick; //双击事件 end;procedure Register;implementation//单元变量,默认的扑克牌宽度和长度var CardWidth,Cardheight:integer;//初如化DLLprocedure cdtInit(var Width,Height:integer);stdcall;external 'cards.dll';//结束DLL调用procedure cdtTerm;stdcall;external 'cards.dll';//画扑克函数procedure cdtDrawExt(ADC:HDC;Left,Top,Width,Height:Cardinal;CardId:Cardinal; mode:integer;Bkgnd:integer);stdcall;external 'cards.dll';procedure Register; //注册组件begin RegisterComponents('Samples', [TCard]);end;{ TCard }constructor TCard.Create(AOwner: TComponent);begin inherited; if AOwner is TWinControl then Parent :=TWinControl(AOwner); FaceUp:=False; //设置默认为扑克面朝下 Width :=CardWidth; //设置默认的扑克牌宽度,可修改 Height:=CardHeight; //设置默认的扑克牌高度,可修改end;function TCard.GetSuit: TCardSuit;begin result:=TCardSuit(CardId and 3); //得到扑克牌的花色end;function TCard.GetValue: Cardinal;begin result:=CardId shr 2 +1; //得到扑克牌的值end;procedure TCard.Paint; //画扑克牌var Id,cmd :Cardinal;begin if not assigned(Parent) then exit;//如果父组件没定义,直接退出 if FaceUp then //正面朝上 begin Id:=CardId; cmd:=0; end else //背面朝上 begin Id:=BackId+54; cmd:=1; end; cdtDrawExt(Canvas.Handle ,0,0,Width,Height,Id,cmd,0);end;procedure TCard.SetBackId(const Value: Cardinal);//设置背景的图案,当时生效begin if (Value <12) and (FBackId <> Value) then FBackId:= Value; if not FaceUp then Paint;end;procedure TCard.SetCard(Suit: TCardSuit; Value: Cardinal);begin //设置扑克牌编号,当时重画 dec(Value); CardId:=(Value shl 2 ) or Cardinal(Suit);end;procedure TCard.SetCardId(Id: Cardinal);begin //设置扑克牌编号,当时重画 if Id<52 then FCardId:=Id; if FaceUp then Paint; //正面朝上则重画end;procedure TCard.SetFaceUp(FaceUp: bool);begin //设置背面或正面朝上 FFaceUp:=FaceUp; paint;end;initialization cdtInit(CardWidth,CardHeight); //初始化DLLfinalization cdtTerm; //调用结束end.组件的使用procedure TForm1.Button2Click(Sender: TObject);var i:integer; k:TCardSuit;begin //扑克牌组件代码演示 for k:=low(TCardSuit) to high(TCardSuit) do //自上向下画出各个花色的扑克牌 for i:=1 to 13 do //自左向右画出各个点数的扑克牌 with TCard.Create(self) do begin SetCard(k,i); //设置扑克牌编号 Left:=(i-1)*15; //设置左力位置 Top:=ord(k)*Height; //设置顶部位置 FaceUp:=True; //正面朝上 end; for i:= 0 to 11 do //依次画出12种背景图案 with TCard.Create(self) do begin BackId:=i; //设置背景图案 Top:=(i and 3)*Height; //设置顶部位置 Left:=(i shr 2) *Width+180+width; //设置左边位置 end;end;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有