问一个偷懒的问题。关于控件 TabOrder 属性的自动设置(50分)

  • 主题发起人 主题发起人 网中戏
  • 开始时间 开始时间

网中戏

Unregistered / Unconfirmed
GUEST, unregistred user!
编辑控件如
Edit1: TEdit;
ComboBox1: TComboBox;
DateTimePicker1: TDateTimePicker;
Image1: TImage;
ListBox1: TListBox;
Memo1: TMemo; 都有 TabOrder 属性。是按建立的顺序自动建立的 0,1,2,3等
按 Tab 键这些编辑控件按序号自动依次得到焦点。经常会重新放置这些控件的位置。
为了让按 Tab 键后能够按从上到下,从左到右自动得到焦点。每次都要手动设置它们的
TabOrder属性。有没有大富翁可以帮助写个函数不管怎么调整位置在窗口显示的时候自动按从上到下,从左到右设置TabOrder属性为0,1,2,3,4等。按 Tab键自动按按从上到下,从左到右得到焦点。
 
在程序运行开始时,对窗体的控件做一个扫描,根据控件的 LEFT 和 TOP 来自动调整 TABORDER值,不知这样可行否?
 
for I :=0 to ComponentCount - 1 do
if ( TControl(Components).left < ??? )
and ( TControl(Components).top < ??? ) then
( TControl(Components).taborder:= ?
请大家帮忙???应该怎么写呀?
 
cnpack可以帮你实现,功能很轻大
 
这个东西比较费资源,不值得提倡,还是老老实实的手动设置吧
 
用cnpack专家包吧...里面有你需要
http://www.cnpack.org/showdetail.php?id=422&lang=zh-cn
 
我写的一个单元
unit uAutoTabOrder;

interface

uses
Classes, Controls;


procedure AutoTabOrder(
const AControl : TWinControl;
const ALoop : Boolean = True
);

implementation

procedure AutoTabOrder(
const AControl : TWinControl;
const ALoop : Boolean = True
);
var
i : Integer;
j : Integer;
b : Boolean;
c : TWinControl;
lst : TList;
begin
lst := TList.Create;
try
for i := 0 to AControl.ControlCount - 1 do
if AControl.Controls is TWinControl then
begin
c := TWinControl(AControl.Controls);
b := False;
for j := 0 to lst.Count - 1 do
begin
if (c.Top < TWinControl(lst[j]).Top) or
((c.Top = TWinControl(lst[j]).Top) and (c.Left < TWinControl(lst[j]).Left)) then
begin
lst.Insert(j, c);
b := True;
end;
end;
if not b then
lst.Add(c);
end;
for i := 0 to lst.Count - 1 do
begin
TWinControl(lst).TabOrder := i;
if ALoop then
AutoTabOrder(TWinControl(lst), ALoop);
end;
finally
lst.Free;
end;
end;

end.
 
使用cnWizerd专家,也就是delphi助手吧,有很多辅助功能,其中就有你需要的,官方下载www.cnpack.org,呵呵
 
[:D][:D]ysai写的挺好!应该得分。50分送上
 

Similar threads

D
回复
0
查看
825
DelphiTeacher的专栏
D
D
回复
0
查看
831
DelphiTeacher的专栏
D
D
回复
0
查看
664
DelphiTeacher的专栏
D
后退
顶部