留下email,给你一个mxOutlook控件。

解决方案 »

  1.   

    www.51delphi.com找ExpressBars同志。它会告诉你它就是你想要的。QQ的样子都能做出来。
      

  2.   

    www.51delphi.com找ExpressBars同志。它会告诉你它就是你想要的。QQ的样子都能做出来。
      

  3.   

    自己可以用Delphi的标准控件模仿一个,用SpeedButton、NoteBook、和Panel,绝对够用、好用。
    参考代码如下:procedure TfmATCMain.spbtnRestartClick(Sender: TObject);
    var
      i: Integer;
      AspbtnaPrior: array[0..OUTLOOK_BUTTON_COUNT - 1] of TSpeedButton;
    begin
      //The criterial of 'if TSpeedButton(Sender).Down' doesent work here
      if (TSpeedButton(Sender).Parent = panOutLookTop) and (TSpeedButton(Sender).Top = panOutLookTop.Height - OUTLOOK_BUTTON_HEIGHT) then
      begin
        TSpeedButton(Sender).Down := True;    if FiBtnIdx = 3 then
        begin
          if fmSMContent.Visible then
            fmSMContent.Close
          else
            fmSMContent.Show;      SetFmMsgPos;
        end;    Exit;
      end;  if acATCmsSave.Enabled then acATCmsSave.Execute;
       
      AspbtnaPrior[0] := spbtnRestart;
      AspbtnaPrior[1] := spbtnDial;
      AspbtnaPrior[2] := spbtnCallin;
      AspbtnaPrior[3] := spbtnSendSM;
      FiBtnIdx := TSpeedButton(Sender).Tag - 1;  with AspbtnaPrior[FiBtnIdx] do
      begin
        if Parent = panOutLookTop then
        begin
          panOutLookBottom.Height := OUTLOOK_BUTTON_HEIGHT * (OUTLOOK_BUTTON_COUNT - FiBtnIdx - 1);
          for i := FiBtnIdx + 1 to OUTLOOK_BUTTON_COUNT - 1 do
          begin
            AspbtnaPrior[i].Parent := panOutLookBottom;
            AspbtnaPrior[i].Top := (i - FiBtnIdx - 1) * OUTLOOK_BUTTON_HEIGHT;
          end;
          panOutLookTop.AutoSize := True;
        end else //of 'if Parent = panOutLookTop then'
        begin
          panOutLookTop.Height := OUTLOOK_BUTTON_HEIGHT * (FiBtnIdx + 1);
          for i := 1 to FiBtnIdx do
          begin
            if AspbtnaPrior[i].Parent <> panOutLookTop then
            begin
              AspbtnaPrior[i].Parent := panOutLookTop;
              AspbtnaPrior[i].Top := AspbtnaPrior[i - 1].Top + OUTLOOK_BUTTON_HEIGHT;
            end;
          end;
          panOutLookBottom.AutoSize := True;
        end;    for i := 0 to OUTLOOK_BUTTON_COUNT - 1 do
        begin
          if AspbtnaPrior[i].Parent = panOutLookTop then
          begin
            AspbtnaPrior[i].AllowAllUp := True;
            AspbtnaPrior[i].GroupIndex := 1;
          end else
          begin
            AspbtnaPrior[i].AllowAllUp := False;
            AspbtnaPrior[i].GroupIndex := 0;
          end;
          AspbtnaPrior[i].Down := False;
        end;    //if there is only AspbtnaPrior[0] in the panOutlookTop, then AspbtnaPrior[0] must be down.
        //the index wont be -1, for the sake of the criterial the first line!
        AspbtnaPrior[FiBtnIdx].Down := True;
        ntbkOutLook.PageIndex := Tag - 1;
        panOutLookBottom.AutoSize := False;
        panOutLookTop.AutoSize := False;
      end;  //YouDo! ---------------------------------------------------------------
      if fmSMContent <> nil then
      begin
        if fmSMContent.Visible then fmSMContent.Hide;
      end;
      case FiBtnIdx of
        //Restart
        0: ;
        //Dial
        1: ;
        //PhoneShow
        2:
        begin
          rdoCThisHangup.Checked := True;
        end;
        //Send Message
        3:
        begin
          if fmSMContent = nil then
            fmSMContent := TfmSMContent.Create(Application);      fmSMContent.Show;
          SetFmMsgPos;
        end;
      end;
      FillLsvATCmd(GetCurrSectName);
      //ReadATCommands(GetCurrSectName);
    end;