开发了个组件,部分代码如下:
type
TSimpleQuery = class(Tpanel)
.
.
.
constructor TSimpleQuery.Create(AOwner: TComponent);
begin
inherited;
QueryDataSource := TDataSource.Create(Self);
QueryClinetDataSet := TClientDataSet.Create(self);
QueryDataSource.DataSet := QueryClinetDataSet; QueryDBGrid := TDBGrid.Create(self);
QueryDBGrid.Parent := Self;
QueryDBGrid.Align := alClient;
QueryDBGrid.Options := [dgEditing, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit];
QueryDBGrid.OnDrawDataCell := DrawDataCell;
QueryDBGrid.DataSource := QueryDataSource;
QueryDBGrid.OnDrawColumnCell := PlaneGridColumnCel;
QueryDBGrid.Color := clInfoBk;
QueryDBGrid.OnCellClick := QueryCellClick; FSQNameColor := $00FFEFE1;
FSQValueColor := clWhite;
FSQBackGroundColor := clWhite;
FSQEditColor := clWhite;
FSQDictColor := clWhite;
FSQColumnNum := 2; Self.FSQEditFont := Tfont.Create; QPGEdit := TtntDBEdit.Create(Self);
QPGEdit.Parent := Self;
QPGEdit.Visible := False;
QPGEdit.AutoSelect := False;
QPGEdit.DataSource := QueryDataSource;
QPGEdit.Color := FSQEditColor; QPGEdit.OnKeyDown := QueryEditKeyDown;
QPGEdit.OnKeyPress := QueryEditKeyPress;
QPGEdit.OnKeyUp := QueryEditKeyUp;
QPGEdit.OnExit := QueryEditExit;
QPGEdit.OnClick := QueryEditClick;
QTimer := TTimer.Create(self);
QTimer.Enabled := True;
QTimer.Interval := 100;
QTimer.OnTimer := TimerTimer;
FSQPositionOfDict := PoleftToRight; QueryXMLDocument := TXMLDocument.Create(self);
SetSQColumnNum(2);
self.OnResize := PlaneGridResize;
end;开发后的组件画面如下:
而该组件的事件如下:
我现在要添加一个keydown事件,请问怎么添加?
type
TSimpleQuery = class(Tpanel)
.
.
.
constructor TSimpleQuery.Create(AOwner: TComponent);
begin
inherited;
QueryDataSource := TDataSource.Create(Self);
QueryClinetDataSet := TClientDataSet.Create(self);
QueryDataSource.DataSet := QueryClinetDataSet; QueryDBGrid := TDBGrid.Create(self);
QueryDBGrid.Parent := Self;
QueryDBGrid.Align := alClient;
QueryDBGrid.Options := [dgEditing, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit];
QueryDBGrid.OnDrawDataCell := DrawDataCell;
QueryDBGrid.DataSource := QueryDataSource;
QueryDBGrid.OnDrawColumnCell := PlaneGridColumnCel;
QueryDBGrid.Color := clInfoBk;
QueryDBGrid.OnCellClick := QueryCellClick; FSQNameColor := $00FFEFE1;
FSQValueColor := clWhite;
FSQBackGroundColor := clWhite;
FSQEditColor := clWhite;
FSQDictColor := clWhite;
FSQColumnNum := 2; Self.FSQEditFont := Tfont.Create; QPGEdit := TtntDBEdit.Create(Self);
QPGEdit.Parent := Self;
QPGEdit.Visible := False;
QPGEdit.AutoSelect := False;
QPGEdit.DataSource := QueryDataSource;
QPGEdit.Color := FSQEditColor; QPGEdit.OnKeyDown := QueryEditKeyDown;
QPGEdit.OnKeyPress := QueryEditKeyPress;
QPGEdit.OnKeyUp := QueryEditKeyUp;
QPGEdit.OnExit := QueryEditExit;
QPGEdit.OnClick := QueryEditClick;
QTimer := TTimer.Create(self);
QTimer.Enabled := True;
QTimer.Interval := 100;
QTimer.OnTimer := TimerTimer;
FSQPositionOfDict := PoleftToRight; QueryXMLDocument := TXMLDocument.Create(self);
SetSQColumnNum(2);
self.OnResize := PlaneGridResize;
end;开发后的组件画面如下:
而该组件的事件如下:
我现在要添加一个keydown事件,请问怎么添加?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TMyPanel = Class(TPanel)
published
property OnKeyDown;
end;
TForm1 = class(TForm)
procedure PanelKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
pnl: TMyPanel;
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.PanelKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
(Sender as TPanel).Caption:= (Sender as TPanel).Caption + char(key);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
pnl:= TMyPanel.Create(nil);
pnl.Parent:= Self;
pnl.SetBounds(10,10,300,300);
pnl.OnKeyDown:= PanelKeyDown;
end;procedure TForm1.FormShow(Sender: TObject);
begin
pnl.SetFocus;
end;end.
我这没有
TForm1 = class(TForm)窗体的啊
property OnKeyDown;直接上面这样写就可以了
因为你已经集成了 Tpanel
而Tpanel有这个事件
默认是不能显示的 必须这样注册一次
部分代码如下:type
TNotifyEventAfterLastEditBox = procedure(Sender: TObject) of object;
type
TSimpleQuery = class(Tpanel)
private
...
FAfterEditLastItem: TNotifyEventAfterLastEditBox;
...
procedure SetAfterEditLastItem(
const Value: TNotifyEventAfterLastEditBox);
...
published
...
property AfterEditLastItem: TNotifyEventAfterLastEditBox read FAfterEditLastItem write SetAfterEditLastItem;
...
end;下面是方法
procedure TSimpleQuery.SetAfterEditLastItem(
const Value: TNotifyEventAfterLastEditBox);
begin
FAfterEditLastItem := Value;
end;请各位指教。谢谢。 published