本人初学 delphi, 我发现 TDBLookupComboBox 不能支持鼠标滚轮。所以就搜索了一下这里, 发现一个方法可以继承 TDBLookupComboBox , 重写他的 DoMouseWheel 事件。 但是我在实现滚动的函数里不知道那个属性是控制 TDBLookupComboBox 上下滚动的。没有 ItemIndex 属性可以用。以下是我的程序, 没有报错, 但是也没有预想的效果:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, DB, DBTables, Grids, DBGrids, StdCtrls;// 继承 TDBLookupComboBox ,失败。 为什么不能支持 MouseWheel ??
type
TDBLookupComboBox = class(DBCtrls.TDBLookupComboBox)
public
function DoMouseWheel(Shift: TShiftState; WheelData: integer; MousePos: TPoint): boolean; override;
end;type
TForm1 = class(TForm)
Table1: TTable;
DataSource1: TDataSource;
DBLookupComboBox1: TDBLookupComboBox;
Table1CustNo: TFloatField;
Table1Company: TStringField;
Table1Addr1: TStringField;
Table1Addr2: TStringField;
Table1City: TStringField;
Table1State: TStringField;
Table1Zip: TStringField;
Table1Country: TStringField;
Table1Phone: TStringField;
Table1FAX: TStringField;
Table1TaxRate: TFloatField;
Table1Contact: TStringField;
Table1LastInvoiceDate: TDateTimeField;
Label1: TLabel;
Query1: TQuery;
DBGrid1: TDBGrid;
DataSource2: TDataSource;
procedure DBLookupComboBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from orders');
Query1.SQL.Add(' where custno=:custno');
Query1.ParamByName('CustNo').AsInteger := Table1CustNo.AsInteger;
if Query1.Prepared = false then Query1.Prepare;
Query1.Open;
end;{ TDBLookupComboBox }function TDBLookupComboBox.DoMouseWheel(Shift: TShiftState;
WheelData: integer; MousePos: TPoint): boolean;
begin
if WheelData < 0 then
ListFieldIndex := ListFieldIndex - 1 // 这里不知道该用哪个属性??
else
ListFieldIndex := ListFieldIndex + 1; // 这里也是的
end;end.
请高手指点,不胜感激!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, DB, DBTables, Grids, DBGrids, StdCtrls;// 继承 TDBLookupComboBox ,失败。 为什么不能支持 MouseWheel ??
type
TDBLookupComboBox = class(DBCtrls.TDBLookupComboBox)
public
function DoMouseWheel(Shift: TShiftState; WheelData: integer; MousePos: TPoint): boolean; override;
end;type
TForm1 = class(TForm)
Table1: TTable;
DataSource1: TDataSource;
DBLookupComboBox1: TDBLookupComboBox;
Table1CustNo: TFloatField;
Table1Company: TStringField;
Table1Addr1: TStringField;
Table1Addr2: TStringField;
Table1City: TStringField;
Table1State: TStringField;
Table1Zip: TStringField;
Table1Country: TStringField;
Table1Phone: TStringField;
Table1FAX: TStringField;
Table1TaxRate: TFloatField;
Table1Contact: TStringField;
Table1LastInvoiceDate: TDateTimeField;
Label1: TLabel;
Query1: TQuery;
DBGrid1: TDBGrid;
DataSource2: TDataSource;
procedure DBLookupComboBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from orders');
Query1.SQL.Add(' where custno=:custno');
Query1.ParamByName('CustNo').AsInteger := Table1CustNo.AsInteger;
if Query1.Prepared = false then Query1.Prepare;
Query1.Open;
end;{ TDBLookupComboBox }function TDBLookupComboBox.DoMouseWheel(Shift: TShiftState;
WheelData: integer; MousePos: TPoint): boolean;
begin
if WheelData < 0 then
ListFieldIndex := ListFieldIndex - 1 // 这里不知道该用哪个属性??
else
ListFieldIndex := ListFieldIndex + 1; // 这里也是的
end;end.
请高手指点,不胜感激!
1,你没仔细研究阿信的代码,他用xmlhttp组件去读xml文件,是变相访问数据库的行为,你说“阿信的树一次生成就可以直接包含进来使用,完全是静态的东西。”是错误的。数据库无论是在服务器还是在本机下载过的xml中,都要尽量避免访问。2,你没仔细研究我的代码,你说“你的树每次都要写代码访问数据库”,是错误的,我的是一次全载,靠隐藏和显示来解决的。3,“没觉得你的树好在哪里”这种话是我不喜欢听,所以我直接骂了你,向你表示郑重道歉。我这种数据库设计方法可以避免开发大量脚本,如果你没觉得好在哪里,是你没细考虑,你都一个红星的人了,应该知道良好的数据库设计避免千行代码的优势吧?