属性页,是这样的: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.

解决方案 »

  1.   

    {就是下面这一段看不明白,用Speedbutton1是如何操纵17页面上的17个Speedbutton的}
    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;