delphi 設定預設控制項得到焦點

2022-05-13 13:55:32 字數 1985 閱讀 7257

如果同一窗體有多個按鈕的話,追蹤原始碼發現最後是taborder來的

如: 在空白窗體上拖入兩個button (btn1,btn2) 

如果在btn2設定default = true 執行後,預設焦點還是在btn1上。需要把btn2的taborder設定為0才可以。

如此看來還是以taborder 來認的。

1

procedure

tcustomform.setactive(value: boolean);

2begin

3 factive :=value;

4if factiveolecontrol <> nil

then

5 factiveolecontrol.perform(cm_docwindowactivate, ord(value), 0);6

if value then

7begin

8if (activecontrol = nil) and

not (csdesigning in componentstate) then

9 activecontrol := findnextcontrol(nil

, true, true, false);

10mergemenu(true);

11setwindowfocus;

12end;13

end;

其中的 findnextcontrol 可以看出是gettaborderlist來認的

1

function

twincontrol.findnextcontrol(curcontrol: twincontrol;

2goforward, checktabstop, checkparent: boolean): twincontrol;

3var

4i, startindex: integer;

5list: tlist;

6begin

7 result := nil

;8 list := tlist.create;9

try10

gettaborderlist(list);

11if list.count > 0

then

12begin

13 startindex :=list.indexof(curcontrol);

14if startindex = -1

then

15if goforward then startindex := list.count - 1

else startindex := 0

;16 i :=startindex;

17repeat

18if goforward then

19begin

20inc(i);

21if i = list.count then i := 0;22

endelse

23begin

24if i = 0

then i :=list.count;

25dec(i);

26end

;27 curcontrol :=list[i];

28if curcontrol.canfocus and

29 (not checktabstop or curcontrol.tabstop) and

30 (not checkparent or (curcontrol.parent = self)) then

31 result :=curcontrol;

32until (result <> nil) or (i =startindex);

33end;34

finally

35list.free;

36end;37

end;

delphi 控制項簡介

一 codegear interbase express 自帶的資料庫 dataset mybase dataaccess 伺服器遠端資料 data snap connection 遠端資料庫 dbexpress delphi 自己連線 db2,informix,interbase,mssql,my...

Delphi 控制項安裝

delphi 控制項安裝 比較全 由於元件提供的方式不同,所以安裝的方法也是不一樣的,下面就目前常見的各種形式的元件的安裝方法介紹一下。1只有乙個dcu檔案的元件。dcu檔案是編譯好的單元檔案,這樣的元件是作者不想把原始碼公布。一般來說,作者必須說明此元件適合delphi的哪種版本,如果版本不對,在...

Delphi遍歷控制項

var i integer begin for i 0 to panel1.controlcount do begin 控制項 panel1.controls i 加入自己 end end procedure tform1.button2click sender tobject var i inte...