我想实现象QQ里面的抽屉效果用VB已经实现,可是用VB里的思想在DELPHI里实现不了
主要原因就是控件数组的概念,在DELPHI可能没有这个向VB里那样实现的
Private Sub Command1_Click(Index As Integer)
............End Sub
"Command1_Click(Index As Integer)"这句在DELPHI里用什么办法可以实现

解决方案 »

  1.   

    可以,不过我做的很麻烦,好像用PANEL的CLICK事件就可以了!
      

  2.   

    sunnygc(sunny):
    能讲一下用PANEL的CLICK事件的思想吗?怎么控制知道是按了哪一个按扭
      

  3.   

    个人认为放几个Panel就可以了,因为类似QQ那种很少超过10个的Panel,不用从控件数组方面考虑了,直接使用几个Panel就可以解决了,代码如下(未测试):
    (先在你的窗体上放一个若干个Panel,然后每个Panel的单击事件如下)
    procedure TQQTypeForm.DrawerPanelnOnClick(Sender:TObject);
    begin
      //通过DrawerPanel的属性Tag来标志DrawerPanel的状态:0表示未打开抽屉,1表示打开
      if DrawerPaneln{n表示你使用的Panel的索引}.Tag=0 then
      begin
        DrawerPaneln.Tag:=1;
        DrawerPaneln.Top:=(StrToInt(Copy(DrawerPaneln.Caption,Length(DrawerPaneln.Caption)-1,1))-1)*DrawerPaneln.Height;  //各个DrawerPanel的Height相同,并且所有的DrawerPanel的名字规格一致
      end
      else
      begin
        DrawerPaneln.Tag:=0;
        DrawerPaneln.Top:=QQTypeForm.Height-(StrToInt(Copy(DrawerPaneln.Caption,Length(DrawerPaneln.Caption)-1,1))-1)*DrawerPaneln.Height;
      end;
    end;
    这样做出来的效果缺少滑动效果,可以使用一个Timer来实现,具体就不说了!
      

  4.   

    最近研究了一种新的方法,实验已经证实可以了,而且效果很不错!就使用Delphi中提供的TActionManager和TActionToolBar就可以实现,不知道这种方法别人用过没有,应该很多人知道把,我使用的步骤如下:
    1。在窗体上放一个ActionManager空间
    2。放若干个Panel,然后没个Panel里面在放一个Panel,做标题,类似QQ里面“我的好友”那种标题。然后其属性为ALIGN=ALTOP;
    3。接着,每个PANEL(不做标题的那些PANEL)中放一个ACTIONTOOLBAR,ALIGN=ALCLIENT;
    4。然后在ACTIONMANAGER里面建立几组相应的CATEGORY,最后把CATEGORY拖到对应的PANEL里面----》例如,存在标题“我的好友”,那么就在ACTIONMANAGER里面建立MYPAL这个CATEGORY,里面包含的ACTION有若干个人名(当然这个需要在运行的时候动态的建立,就想QQ那样);
    5。最后将所有ACTIONTOOLBAR控件的容器PANEL的AUTOSIZE置为TRUE;
    6。在FORM的ONCREATE里面写如下代码:(先定义个全局的变量CategoryList:TObjectList,还需要把包含TObjectList这个类申明但单元文件用Uses包含,具体那个俺忘记了,你自己到HELP里面查查把)
    procedure TForm1.OnCreate(Sender:TObject);
    begin
      CategoryList:=TObjectList.Create;
      with CategoryList do 
      begin
        Add(//这里放每个ActionToolBar的容器Panel);  //有几个就写几个Add函数
      end;
      Panel1.OnClick(Panel1);  //这里假设程序中你存放第一个ActionToolBar的容器Pane名
                               //字为Panel1  
    end;
    7。最后将所有ACTIONTOOLBAR容器PANEL中的标题PANEL的ONCLICK事件都指向PANEL1的ONCLICK事件,代码如下:
    procedure TForm.Panel1OnClick(Sender:TObject);
    var
      M,N: Integer;
    begin
      for M:=0 to CategoryList.Count-1 do
      begin
        (CategoryList[M] as TPanel).Align := alNone;
        (CategoryList[M] as TPanel).Height := 20;
        if CategoryList[M] = (Sender as TPanel).Parent then
          N:=M;
      end
      for M:=N-1 downto 0 do
        (CategoryList[M] as TPanel).Align := alTop;
      for M:=CategoryList.Count-1 downto N+1 do
        (CategoryList[M] as TPanel).Align := alBottom;
      (CategoryList[M] as TPanel).Align := alClient;
    end;
    完了!