線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2138
推到 Plurk!
推到 Facebook!

TB_BUTTONCOUNT 如何使用

尚未結案
sam_000
一般會員


發表:27
回覆:47
積分:14
註冊:2003-09-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-13 13:59:23 IP:211.22.xxx.xxx 未訂閱
各位前輩好 我想要知道TOOLBAR上Button的數目用了下面的方法 : SendMessage(toolbar1.Handle , TB_BUTTONCOUNT,0 , 0); 它總會出現undelcare indentifier 'TB_BUTTONCOUNT' 我在SDK上查閱有TB_BUTTONCOUNT這個定義,我哪裡有錯?還請前輩指點,謝謝 sam上
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-13 15:51:39 IP:210.243.xxx.xxx 未訂閱
引言: 各位前輩好 我想要知道TOOLBAR上Button的數目用了下面的方法 : SendMessage(toolbar1.Handle , TB_BUTTONCOUNT,0 , 0); 它總會出現undelcare indentifier 'TB_BUTTONCOUNT' 我在SDK上查閱有TB_BUTTONCOUNT這個定義,我哪裡有錯?還請前輩指點,謝謝 sam上
要使用TB_BUTTONCOUNT 你要import Commctrl 這個Unit
tonytop
中階會員


發表:6
回覆:114
積分:89
註冊:2003-12-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-13 18:14:01 IP:210.64.xxx.xxx 未訂閱
如Zard是正確滴,另外元件本身也有計數BUTTON的功能(TB.ButtonCount), 兩種得到的結果是一樣的,何必要用SDK較麻煩呢?
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i:Integer;
begin
  Label1.Caption:=IntToStr(TB.ButtonCount);//這樣也行      i:= SendMessage(TB.Handle, TB_BUTTONCOUNT, 0, 0); //要uses Commctrl
  Label2.Caption:=IntToStr(i);
end;
忙盲茫
sam_000
一般會員


發表:27
回覆:47
積分:14
註冊:2003-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-13 22:10:23 IP:219.80.xxx.xxx 未訂閱
兩位前輩的方法都可以用在delphi application內的toolbar上 如果我想用在系統工具列上算出button數似乎不行 可否請前輩在幫忙看看 謝謝 Wnd := FindWindow('Shell_TrayWnd', nil); Wnd := FindWindowEx(Wnd[1],0 , 'Button', nil); sam
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-14 12:29:40 IP:210.243.xxx.xxx 未訂閱
引言: 兩位前輩的方法都可以用在delphi application內的toolbar上 如果我想用在系統工具列上算出button數似乎不行 可否請前輩在幫忙看看 謝謝 Wnd := FindWindow('Shell_TrayWnd', nil); Wnd := FindWindowEx(Wnd[1],0 , 'Button', nil); sam
這樣做當然不行, 因為工具列根本不是Toolbar. 你所看到的工具列其實是一個Tab Control, 而且不是Shell_TrayWnd, 而是Shell_TrayWnd的Child ReBarWindow32的Child MSTaskSwWClass的Child SysTabControl32 解法如下, 記得要Import Commctrl
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Commctrl;    type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.DFM}    procedure TForm1.Button1Click(Sender: TObject);      Function EnumChildWnd(hChild: HWND; pParam: LPARAM): BOOL; stdcall;
  var
    szClassName: array[0..256] of Char;      begin
    FillChar(szClassName, SizeOf(szClassName), 0);
    GetClassName(hChild, szClassName, SizeOf(szClassName));
    // 找出 SysTabControl32
    if szClassName = 'SysTabControl32' then
    begin
      HWND(Pointer(pParam)^) := hChild;
    end;        Result := TRUE;
  end;    var
  hShellTrayWnd, hSysTabWnd: HWND;    begin
  hShellTrayWnd := FindWindow('Shell_TrayWnd', nil);
  if hShellTrayWnd = 0 then Exit;      hSysTabWnd := 0;
  EnumChildWindows(hShellTrayWnd, @EnumChildWnd, LPARAM(@hSysTabWnd));
  if hSysTabWnd <> 0 then
  begin
    // 利用Tab Control Notification Message TCM_GETITEMCOUNT取得數目.
    ShowMessage('工具列上共有 '  
                IntToStr(SendMessage(hSysTabWnd, TCM_GETITEMCOUNT, 0, 0))  
                ' 個Items');
  end;
end;    end.
sam_000
一般會員


發表:27
回覆:47
積分:14
註冊:2003-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-14 17:11:24 IP:211.22.xxx.xxx 未訂閱
行了,謝謝兩位前輩的解答,前輩為何這麼厲害呢,真讓人想不透,謝謝 sam
系統時間:2024-05-15 2:02:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!