PDA

View Full Version : سوال: دستور OnKeyPress



joooje
پنج شنبه 22 اردیبهشت 1390, 10:34 صبح
سلام
من با دستور Create یه ادیت باکس تو صفحه میسازم
حالا چطور میتونم برای OnKeyPress اون کد تعریف کنم
ممنون

محمد سلیم آبادی
پنج شنبه 22 اردیبهشت 1390, 10:54 صبح
لازمه از قبل یک پروسه تعریف کنید و بعد از ساختن ادیت باکس ، اون رو به onkeypress نسبت بدید...

joooje
پنج شنبه 22 اردیبهشت 1390, 14:24 عصر
لازمه از قبل یک پروسه تعریف کنید و بعد از ساختن ادیت باکس ، اون رو به onkeypress نسبت بدید...
خب این یعنی چی؟
میشه بیشتر توضیح بدید یا کد بزارید
ممنون

SAASTN
پنج شنبه 22 اردیبهشت 1390, 23:04 عصر
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
procedure MyEditKeyPress(Sender: TObject; var Key: Char);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
with TEdit.Create(Self) do
begin
Parent := Self;
Width := 100;
Height := 21;
Left := 100;
// ....
OnKeyPress := MyEditKeyPress;
end;
end;

procedure TForm1.MyEditKeyPress(Sender: TObject; var Key: Char);
begin
// Do Something ...
end;

joooje
شنبه 24 اردیبهشت 1390, 13:12 عصر
سلام
و ممنون از راهنماییتون
فقط یه سوال دیگه
اگر من با همون دستورCreate بیام و 5 تا ادیت باکس بسازم ولی فقط بخوام(یعنی حتما) یه پروسه تعریف کنمMyEditKeyPress و همه اون 5 تا ادیت رو مرتبط کنم به همون پروسه
چطور میتونم بفهمم که روی کدوم الان داره دکمه فشار داده میشه؟
خوب همش یه کار داره انجام میده
میدونید آخه 90 درصد کارهایی که باید انجام بدن یکسان هست (برای همین میخوام یه بار کد بنویسم) ولی 10 درصدش متفاوت
البته تعداد دکمه ها خیلی زیاد هست و من 5 رو مثال زدم
ممنون از راهنماییتون

mohsen24000
شنبه 24 اردیبهشت 1390, 13:28 عصر
متغییر Sender حاوی اطلاعات مربوط به کامپوننتی هست که اون پروسه رو فراخوانی کرده
می تونید از اون برای تشخیص این که کدوم ادیت باکس هست و متناسب با اون عملیات دلخواهتون رو انجام بدید...

joooje
شنبه 24 اردیبهشت 1390, 18:54 عصر
ممنون
فقط من زیاد با دلفی آشنا نیستم
میشه یه نمومه کد برای استفاده از sender بزارید
متشکر

mohsen24000
شنبه 24 اردیبهشت 1390, 19:30 عصر
برای مثال کد زیر نام ادیت باکسی که پروسه onkeypress را فراخوانی نموده را نشان میدهد:

(sender as TEdit).Name
به این ترتیب خواهید توانست بر اساس نام ادیت باکس ، عملیات مورد نظر را پیاده سازی کنید...

SAASTN
شنبه 24 اردیبهشت 1390, 19:38 عصر
ببینید در مورد رویدادها اون پارامتر Sender حاوی شیئ فراخواننده رویداده. پس برای این که بتونیم به مشخصات Edit مدنظرمون دسترسی داشته باشیم باید Sender رو از TObject به TEdit تبدیل (Typecast) کنیم.
اما در مورد این که می خواید Edit هایی که ایجاد کردید قابل تفکیک باشند، باید موقع ایجاد کردنشون برای اونها یک صفت مشخصه تعیین کنید تا بتونید بعدا بررسیش کنید. این صفت می تونه نام کنترل ها باشه، اما چیزی که در این گونه مسائل رایجه استفاده از مشخصه عددی Tag هست:
procedure TForm1.FormCreate(Sender: TObject);
const
Count = 5;
var
I: Integer;
begin
for I := 0 to Count - 1 do
with TEdit.Create(Self) do
begin
Parent := Self;
Width := 100;
Height := 21;
Left := 100;
Tag := I; // <<--
// ....
OnKeyPress := MyEditKeyPress;
end;
end;

procedure TForm1.MyEditKeyPress(Sender: TObject; var Key: Char);
var
aEdit: TEdit;
begin
if Sender is TEdit then
begin
aEdit := TEdit(Sender);
case aEdit.Tag of
0: aEdit.Text := 'Hello Word!';
// ...
end;
end;
end;
-------
دوستان بازم جوابا همزمان شد، نمی دونم چند وقته چرا اینجوری شدم.