控件:
   TmxOutlookBarPro在http://www.2ccc.com/article.asp?articleid=97中可以下载得到问题是,我们在单击某个列表的时候,如何得到它的指定属性值。
比如单击第一个可以写成
/*
mxBarLook: TmxOutlookBarPro;
*/
    mxBarLook.Header[0].Button[0].Caption
得到第一个选项框中的第一个BUTTON,如何实现点击它自动得到他们的index并且显示它们的CAPTION或者其他属性!具体代码如下:
/*
mxBarLook.Header[index].Button[index].Caption
*/可能你们会说,直接写即可,但是这个BUTTON是动态生成的;直接在
/*
  Button: TmxButton;
*/
  
     Button := mxBarLook.Header[0].AddButton;
     button.Caption:='abc'
     button.ImageIndex:=1
     button.OnClick:=mxOutlookBarUserOnClick;
procedure mxOutlookBarUserOnClick(Sender:TObject);
begin
  ShowMessage(得到单击BUTTON的CAPTION);
  mxBarLook.header[0].button[???????????????].caption
end;

解决方案 »

  1.   

    如果对TmxButton的Data定义一个数据指针,且按钮是动态生成的.
    怎样才能取得该指针对应的数据呢,我的代码如下://数据结构定义如下:
    type
      TFData=^FData;
      FData=Record
              UID:string;
              UNAME:string;
              IMGINDEX:Integer;
              STATUSINDEX:integer;
              UIP:string;
            end;//以下是动态产生mxButton,并给Data赋值:   for i:=0 to ClientDataSet.RecordCount-1 do
       begin
         mxBtm:=mxOutlookBar.Headers[0].AddButton;
         mxBtm.Caption:= Trim(ClientDataSet.FieldByName('uName').Asstring);
         mxBtm.Name:='mxBtm'+inttostr(mxOutlookBar.Headers[0].ButtonCount+1);
         New(FData);     FData.UID:=Trim(ClientDataSet.FieldByName('UID').Asstring);
         FData.UNAME:=Trim(ClientDataSet.FieldByName('uName').Asstring);
         FData.IMGINDEX:=ClientDataSet.FieldByName('IMGINDEX').Value;
         FData.STATUSINDEX:=ClientDataSet.FieldByName('STATUSINDEX').Value;
         FData.UIP:=Trim(ClientDataSet.FieldByName('LOCALIP').Asstring);     mxBtm.Data:=FData;
         mxBtm.OnClick:= mxBtnDBClick;
         ClientDataSet.Next;
       end;
    //以下是自定义点击事件,用来取得Data的数据:procedure TChatFrm.mxBtnDBClick(Sender:TObject);
    var
      xData:TFData;
      mxBtm:TmxButton;
    begin
      if Sender is TmxButton
      then begin
             mxBtm:= TmxButton(Sender).Data;
             //showmessage(mxBtm.Caption);
             MsgEditFrm:= TMsgEditFrm.Create(Application);
             with MsgEditFrm do
             begin
               //初始化参数
               xData:= TFData(mxBtm.Data);
               uID.Caption:= xData^.UNAME+' '+xData^.UID;//报错
               IpLabel.Caption:='对方IP: '+xData^.UIP;//报错
               ShowModal;
             end;
           end;
    end;