属性页,是这样的:Activex组件继承于一个Cards单元(扑克牌),现在想在属性页中
用TSpeedButton控件按钮,改变它的花色(四种花色:方块,黑桃,梅花,红心)和牌面(A,2,3....J,Q,K),但参考书上的代码,看不懂,请指教,不胜感激。
小弟的QQ:183953256,请多指教。
代码如下:
unit cardpp;interfaceuses SysUtils, Windows, Messages, Classes, Graphics, Controls, StdCtrls,
ExtCtrls, Forms, ComServ, ComObj, StdVcl, AxCtrls, Buttons, OleCtrls,
CardXControl1_TLB, Cards;
type
TCardPropPage = class(TPropertyPage)
ValueGroup: TGroupBox;
speedbutton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton10: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton12: TSpeedButton;
SuitGroup: TGroupBox;
SpeedButton13: TSpeedButton;
SpeedButton14: TSpeedButton;
SpeedButton15: TSpeedButton;
SpeedButton16: TSpeedButton;
SpeedButton17: TSpeedButton;
Card1: TCard;
procedure PropertyPageCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
procedure UpdatePropertyPage; override;
procedure UpdateObject; override;
end;const
Class_CardPropPage: TGUID = '{5F32DE56-4656-472B-973C-10F48AD28D75}';implementation{$R *.DFM}procedure TCardPropPage.UpdatePropertyPage;
var
i: integer;
AValue,Asuit: integer;
begin
//get suit and value
AValue := OleObject.Value;
ASuit := OleObject.Suit;
//set card correctly
Card1.Value := TCardValue(AValue);
Card1.Suit := TCardSuit(ASuit);
//set correct value speedbutton
with ValueGroup do
for i := 0 to ControlCount - 1 do
if (Controls[i] is TSpeedButton) and
(TSpeedButton(Controls[i]).Tag = AValue) then
TSpeedButton(Controls[i]).Down := True;
//set correct suit speedbutton
with suitgroup do
for i:=0 to controlcount -1 do
if (controls[i] is tspeedbutton) and
(tspeedbutton (controls[i]).tag = asuit) then
tspeedbutton(controls[i]).down := true;
end;
{ Update your controls from OleObject }
procedure TCardPropPage.UpdateObject;
var
i: integer;
begin
//set correct value speedbutton
with valuegroup do
for i := 0 to controlcount -1 do
if(controls[i] is tspeedbutton) and tspeedbutton(controls[i]).down then
begin
oleobject.value := tspeedbutton(controls[i]).tag;
break;
end;
//set correct suit speedbutton
with suitgroup do
for i := 0 to controlcount -1 do
if(controls[i] is tspeedbutton) and tspeedbutton(controls[i]).down then
begin
oleobject.suit := tspeedbutton(controls[i]).tag;
break;
end;
end;
{ Update OleObject from your controls }procedure TCardPropPage.PropertyPageCreate(Sender: TObject);
const
//ordinal values of "suit" characters in symbol font;
ssuits: Pchar = #167#168#169#170;
var
i: integer;
begin
//set up captions of suit speedbuttons using high
//charcters in symbol font
with suitgroup do
for i := 0 to controlcount - 1 do
if controls[i] is tspeedbutton then
tspeedbutton(controls[i]).caption := ssuits[i];
end;
{就是下面这一段看不明白,用Speedbutton1是如何操纵17页面上的17个Speedbutton的}
procedure TCardPropPage.speedbutton1Click(Sender: TObject);
begin
if sender is TSpeedButton then
begin
with TSpeedButton(Sender) do
begin
if Parent = ValueGroup then
Card1.Value := TcardValue(Tag)
else if Parent = SuitGroup then
Card1.Suit := TCardSuit(Tag);
end;
Modified;
end;
end;initialization
TActiveXPropertyPageFactory.Create(
ComServer,
TCardPropPage,
Class_CardPropPage);
end.
用TSpeedButton控件按钮,改变它的花色(四种花色:方块,黑桃,梅花,红心)和牌面(A,2,3....J,Q,K),但参考书上的代码,看不懂,请指教,不胜感激。
小弟的QQ:183953256,请多指教。
代码如下:
unit cardpp;interfaceuses SysUtils, Windows, Messages, Classes, Graphics, Controls, StdCtrls,
ExtCtrls, Forms, ComServ, ComObj, StdVcl, AxCtrls, Buttons, OleCtrls,
CardXControl1_TLB, Cards;
type
TCardPropPage = class(TPropertyPage)
ValueGroup: TGroupBox;
speedbutton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton10: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton12: TSpeedButton;
SuitGroup: TGroupBox;
SpeedButton13: TSpeedButton;
SpeedButton14: TSpeedButton;
SpeedButton15: TSpeedButton;
SpeedButton16: TSpeedButton;
SpeedButton17: TSpeedButton;
Card1: TCard;
procedure PropertyPageCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
procedure UpdatePropertyPage; override;
procedure UpdateObject; override;
end;const
Class_CardPropPage: TGUID = '{5F32DE56-4656-472B-973C-10F48AD28D75}';implementation{$R *.DFM}procedure TCardPropPage.UpdatePropertyPage;
var
i: integer;
AValue,Asuit: integer;
begin
//get suit and value
AValue := OleObject.Value;
ASuit := OleObject.Suit;
//set card correctly
Card1.Value := TCardValue(AValue);
Card1.Suit := TCardSuit(ASuit);
//set correct value speedbutton
with ValueGroup do
for i := 0 to ControlCount - 1 do
if (Controls[i] is TSpeedButton) and
(TSpeedButton(Controls[i]).Tag = AValue) then
TSpeedButton(Controls[i]).Down := True;
//set correct suit speedbutton
with suitgroup do
for i:=0 to controlcount -1 do
if (controls[i] is tspeedbutton) and
(tspeedbutton (controls[i]).tag = asuit) then
tspeedbutton(controls[i]).down := true;
end;
{ Update your controls from OleObject }
procedure TCardPropPage.UpdateObject;
var
i: integer;
begin
//set correct value speedbutton
with valuegroup do
for i := 0 to controlcount -1 do
if(controls[i] is tspeedbutton) and tspeedbutton(controls[i]).down then
begin
oleobject.value := tspeedbutton(controls[i]).tag;
break;
end;
//set correct suit speedbutton
with suitgroup do
for i := 0 to controlcount -1 do
if(controls[i] is tspeedbutton) and tspeedbutton(controls[i]).down then
begin
oleobject.suit := tspeedbutton(controls[i]).tag;
break;
end;
end;
{ Update OleObject from your controls }procedure TCardPropPage.PropertyPageCreate(Sender: TObject);
const
//ordinal values of "suit" characters in symbol font;
ssuits: Pchar = #167#168#169#170;
var
i: integer;
begin
//set up captions of suit speedbuttons using high
//charcters in symbol font
with suitgroup do
for i := 0 to controlcount - 1 do
if controls[i] is tspeedbutton then
tspeedbutton(controls[i]).caption := ssuits[i];
end;
{就是下面这一段看不明白,用Speedbutton1是如何操纵17页面上的17个Speedbutton的}
procedure TCardPropPage.speedbutton1Click(Sender: TObject);
begin
if sender is TSpeedButton then
begin
with TSpeedButton(Sender) do
begin
if Parent = ValueGroup then
Card1.Value := TcardValue(Tag)
else if Parent = SuitGroup then
Card1.Suit := TCardSuit(Tag);
end;
Modified;
end;
end;initialization
TActiveXPropertyPageFactory.Create(
ComServer,
TCardPropPage,
Class_CardPropPage);
end.
解决方案 »
- 关于数据传输问题!!!大家帮忙建议下
- 求用ServerSocket和ClientSocket发送流的代码
- Delphi的USB通信問題
- 请教如何定位鼠标指针到一个批定位置?
- 一段 SPcomm控件 接受数据的代码————在线等待??!!!!
- 很菜的问题,要分的来呀!
- 程序员,路之难也......想到什么就说什么,想怎样说就怎样说!
- 我几天前去一家公司笔试,遇到了一道不会的题,回家后一直困扰着我
- [散分]关于windows xp的问题
- 紧急求救:怎样当点击一个按钮时,能选中dbgrid控件中的全部记录?
- 急需帮助:要是想在表单的edit中输入网址,回车后根据网址调用IE打开网页,该怎么做?
- 一个关于了TREEVIEW的问题了大家进来看看了
procedure TCardPropPage.speedbutton1Click(Sender: TObject);
begin
if sender is TSpeedButton then //如果消息来自speedbutton才进行处理
begin
with TSpeedButton(Sender) do
begin
if Parent = ValueGroup then //如speedbutton在ValueGroup控件上
Card1.Value := TcardValue(Tag) //扑克牌值为TcardValue的tag
else if Parent = SuitGroup then//如speedbutton在SuitGroup控件上
Card1.Suit := TCardSuit(Tag); //........
end;
Modified;
end;
end;