delphiman00
جمعه 19 تیر 1383, 12:52 عصر
سلام
من در حال طراحی یک کامپوننت هستم که از کلاس TCustomPanel سرچشمه می گیرد در تاپیک های قبل مدیر سایت لطف کردند و انرا تا حدی بازسازی کردند :
unit MyPanel;
interface
uses
Mask,
Windows,
Messages,
SysUtils,
Classes,
Controls,
ExtCtrls;
type
TMyPanel = class(TCustomPanel)
private
fEdit1,fEdit2:TMaskEdit;
procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure SetName(const Value: TComponentName);override;
protected
{ Protected declarations }
public
constructor create(AOwner:TComponent);override;
published
{ Published declarations }
property Caption;
end;
procedure Register;
implementation
{ TMyPanel }
constructor TMyPanel.create(AOwner: TComponent);
begin
inherited;
fEdit1:=TMaskEdit.Create(Self);
fEdit1.Parent:=Self;
fEdit1.Top:=5;
fEdit1.Left:=5;
fEdit1.OnKeydown:=EditKeyDown;
fEdit2:=TMaskEdit.Create(Self);
fEdit2.Parent:=Self;
fEdit2.Top:=30;
fEdit2.Left:=5;
fEdit2.ReadOnly:=True;
Width:= 131;
Height:=65;
end;
procedure TMyPanel.EditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_up then fEdit2.Text:='UP';
end;
procedure TMyPanel.SetName(const Value: TComponentName);
begin
inherited;
Caption:='';
end;
procedure Register;
begin
RegisterComponents('Mehdi', [TMyPanel]);
end;
end.
البته اصل این کامپوننت بسیار مفصل است که آوردن همه آن در این تاپیک لزومی ندارد
سؤال من :
من سه Event به این کامپوننت اضافه کردم OnKeyDown,OnKeyPress,OnMouseDown اما مشکل من این است که چون در Panel من دو تا Instance تعریف شده وقتی مثلا ماوس را روی Edit ها می بریم رویداد OnMouseDown اجرا نمی شود
در قسمت Create کامپوننت هم این کار را کردم اما فایده ای نداشت :
OnMouseDown:=fEdit1.OnMouseDown;
حال باید چه کار کرد ؟ ( ظاهرا این Instance ها جلوی دسترسی به اصل کامپوننت را می گیرند )!!! :?:
من در حال طراحی یک کامپوننت هستم که از کلاس TCustomPanel سرچشمه می گیرد در تاپیک های قبل مدیر سایت لطف کردند و انرا تا حدی بازسازی کردند :
unit MyPanel;
interface
uses
Mask,
Windows,
Messages,
SysUtils,
Classes,
Controls,
ExtCtrls;
type
TMyPanel = class(TCustomPanel)
private
fEdit1,fEdit2:TMaskEdit;
procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure SetName(const Value: TComponentName);override;
protected
{ Protected declarations }
public
constructor create(AOwner:TComponent);override;
published
{ Published declarations }
property Caption;
end;
procedure Register;
implementation
{ TMyPanel }
constructor TMyPanel.create(AOwner: TComponent);
begin
inherited;
fEdit1:=TMaskEdit.Create(Self);
fEdit1.Parent:=Self;
fEdit1.Top:=5;
fEdit1.Left:=5;
fEdit1.OnKeydown:=EditKeyDown;
fEdit2:=TMaskEdit.Create(Self);
fEdit2.Parent:=Self;
fEdit2.Top:=30;
fEdit2.Left:=5;
fEdit2.ReadOnly:=True;
Width:= 131;
Height:=65;
end;
procedure TMyPanel.EditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_up then fEdit2.Text:='UP';
end;
procedure TMyPanel.SetName(const Value: TComponentName);
begin
inherited;
Caption:='';
end;
procedure Register;
begin
RegisterComponents('Mehdi', [TMyPanel]);
end;
end.
البته اصل این کامپوننت بسیار مفصل است که آوردن همه آن در این تاپیک لزومی ندارد
سؤال من :
من سه Event به این کامپوننت اضافه کردم OnKeyDown,OnKeyPress,OnMouseDown اما مشکل من این است که چون در Panel من دو تا Instance تعریف شده وقتی مثلا ماوس را روی Edit ها می بریم رویداد OnMouseDown اجرا نمی شود
در قسمت Create کامپوننت هم این کار را کردم اما فایده ای نداشت :
OnMouseDown:=fEdit1.OnMouseDown;
حال باید چه کار کرد ؟ ( ظاهرا این Instance ها جلوی دسترسی به اصل کامپوننت را می گیرند )!!! :?: