PDA

View Full Version : سوال: چطور میتونم به دکمه ای که بعد از اجرای برنامه میسازم دستور بدم



joooje
جمعه 21 آبان 1389, 15:19 عصر
با سلام
چطور میتونم به دکمه ای که بعد از اجرای برنامه میسازم دستور بدم
منظورم اینه که من یه دکمه توی صفحه میزارم و به اون دستور ساخت یه دکمه ی دیگه رو میدم. با این کد:



procedure TMainForm.Button3Click(Sender: TObject);
var
Button3: TButton;
begin

Button3 := TButton.Create(Self);
Button3.Parent := Self;

end;


حالا برنامه رو اجرا میکنم. روی دکمه ای که تو صفحه هست کلیک میکنم و یه دکمه ی دیگه تو صفحه ایجاد میشه
چطور میتونم به دکمه ی جدید کار بدم که وقتی روش کلیک میشه مثلا برنامه بسته بشه؟؟
ممنون از کمک دوستان.

Mahmood_M
جمعه 21 آبان 1389, 15:45 عصر
این موضوع چندین بار در سایت مطرح شده ، قبل از ایجاد تاپیک جستجو (http://www.barnamenevis.org/forum/search.php?searchid=3082961) کنید ( یک نمونه (http://www.barnamenevis.org/forum/showthread.php?t=204854) )

joooje
شنبه 22 آبان 1389, 20:11 عصر
ویرایش : پستها ادغام و تاپیک قبلی باز شد !
...
من جوابم رو نگرفتم
من فقط نمیخوام به یه شی دستور OnClick و غیره بدم
مثلا میخوام اول بعد از اجرا یه CoolBar بسازم و بعد توی اون 2 تا ToolBar بسازم و بعد توی اون toolbar ها مثلا یه Edittext یا combobox بزارم و بعد بتونم مثلا واژه omid رو توی editbox فراخوانی بکنم.
مشکل اینه که نمیدونم بعد از ساخت مثلا cool box حالا دستور addband رو به چی بدم؟؟؟
یا برای ساخت دکمه توی tool bar دستور رو به چه شیی بدم.
این دستور فراخوانی یه کلمه تو ادیت باکس


;'Form1.Edit1.Text := 'omid

الان مشکل اینه که Edit1 که وجود نداره، هنوز ساخته نشده.
میخوام بدونم بجای Edit1 چی باید بزارمو چطور اونو به دلفی بشناسونم

ممنون میشم راهنمایی کنید.
جستجو کردم ولی چیزی با این مضمون گیرم نیومد

vcldeveloper
شنبه 22 آبان 1389, 21:09 عصر
var
MyCoolBar : TCoolBar;
MyToolBar : TToolBar;
MyToolButton : TToolButton;
MyEdit : TEdit;
begin
MyCoolBar := TCoolBar.Create(self);
MyCoolBar.Parent := Self;

MyToolBar := TToolBar.Create(Self);
MyToolBar.Parent := MyCoolBar;

MyToolButton := TToolButton.Create(Self);
MyToolButton.Parent := MyToolBar;

MyEdit := TEdit.Create(Self);
MyEdit.Parent := MyToolBar;
MyEdit.Text := 'This is a test';
end;

BORHAN TEC
شنبه 22 آبان 1389, 21:18 عصر
من هم همین الان یک مثال را آماده کردم.

joooje
یک شنبه 23 آبان 1389, 09:17 صبح
ممنون از وقتی که گذاشتید و اون مثال رو ساختید.
ولی مشکل من این نیست!!!!!
ببینید این مثال همه ی کارهارو توی یک دستور ساخت میده. ولی من میخوام دستور رو خارج از اینجا بهش بدم
برای همینه که تو پست قبلی گفتم نمیدونم اسمش رو چی باید بزارم


این دستور فراخوانی یه کلمه تو ادیت باکس


;'Form1.Edit1.Text := 'omid

الان مشکل اینه که Edit1 که وجود نداره، هنوز ساخته نشده.
میخوام بدونم بجای Edit1 چی باید بزارمو چطور اونو به دلفی بشناسونم
منظورم اینه که من از اول نمیدونم چنتا editbox لازم دارم
منظورم اینه که مثلا کاربر باید بتونه به تعداد لازم toolbar و ... رو اضافه بکنه.
ممنون میشم این مثال رو کامل کنید. البته اگر وقت دارید
یعنی یه دکمه تو صفحه بزارید و بعد از اجرای برنامه وقتی اون coolbar و toolbar ساخته میشه، مثلا با هر بار زدن اون دکمه یه toolbar دیگه با همون دکمه داخلش و edit box داخلش به coolbar اضافه بشه.
و مثلا یه دکمه ی دیگه هم تو صفحه داشته باشیم و بعد که با زدن دکمه اول toolbar دوم اضافه میشه با زدن دکمه دوم متن داخل editboxای که تو toolbar دوم هست از Shuhin Ashayeri تبدیل بشه به Shuhin Ashayeri-1.
ببخشید دیگه، من تازه کار هستم و نمیدونم چیکار باید بکنم.
بازم ممنون.

vcldeveloper
یک شنبه 23 آبان 1389, 16:38 عصر
منظورم اینه که من از اول نمیدونم چنتا editbox لازم دارم
منظورم اینه که مثلا کاربر باید بتونه به تعداد لازم toolbar و ... رو اضافه بکنه.
همین اشیائی که درست می کنید رو، بعد از ایجاد کردند، برای دسترسی های بعدی، می تونید در یک ObjectList ذخیره کنید. البته در اون کدی که براتون گذاشتم هم، می تونید بعد از ساختن هر کدوم از اون کنترل ها، با استفاده از خصوصیت Controls مربوط به شی فرم مربوطه، به لیست کنترل های موجود در فرم تون دسترسی داشته باشید.

AmirSky
یک شنبه 23 آبان 1389, 19:28 عصر
نمی دونم منظورت رو درست متوجه شدم یا نه
ولی ببین این کد بدردت میخوره یانه





with TButton.Create(Self) do
begin
Parent := Self;
name := 'Button3';
onClick = procedure1;
end;

joooje
دوشنبه 24 آبان 1389, 10:12 صبح
ممنون ولی این مشکل من نیست
من میخوام با یک دکمه یه شی جدید بسازم و با یه دکمه دیگه یه تغییر توش ایجاد کنم. مثلا پهناش رو زیاد کنم


علی کشاورز: همین اشیائی که درست می کنید رو، بعد از ایجاد کردند، برای دسترسی های بعدی، می تونید در یک ObjectList ذخیره کنید. البته در اون کدی که براتون گذاشتم هم، می تونید بعد از ساختن هر کدوم از اون کنترل ها، با استفاده از خصوصیت Controls مربوط به شی فرم مربوطه، به لیست کنترل های موجود در فرم تون دسترسی داشته باشید.

من دقیقا نفهمیدم چی فرمودید.
البته یکم کار کردم ولی چیزی دسگیرم نشد.
میشه یه نمونه ساده برام بسازید که با یک دکمه یه شی جدید بسازه و با یه دکمه دیگه یه تغییر توش ایجاد کنه. مثلا پهناش رو زیاد کنه
ممنون

vcldeveloper
دوشنبه 24 آبان 1389, 17:19 عصر
میشه یه نمونه ساده برام بسازید که با یک دکمه یه شی جدید بسازه و با یه دکمه دیگه یه تغییر توش ایجاد کنه. مثلا پهناش رو زیاد کنه


procedure TForm1.Button1Click(Sender: TObject);
begin
with TEdit.Create(Self) do
begin
Parent := Self;
Left := 8;
Top := 24;
Name := 'MyEdit';
Text := 'This is a test';
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
MyEdit : TEdit;
begin
MyEdit := Self.FindComponent('MyEdit') as TEdit;
if Assigned(MyEdit) then
MyEdit.Width := MyEdit.Width * 2;
end;

joooje
سه شنبه 25 آبان 1389, 18:55 عصر
سلام و ممنون از وقتی که گذاشتید
این دقیقا همون چیزی بود که میخواستم.
فقط 2تا سوال دیگه پیش اومد که اگر راهنمایی کنید و مثل همین کد برام بزارید ممنون میشم.
من با این دستور که به یه دکمه میدم یه coolBar میسازم



procedure TForm1.Button1Click(Sender: TObject);
begin
with TBCoolar.Create(Self) do
begin
Parent := Self;
Name := 'MyCool' ;
end;
end;
چطور با دکمه دوم توی اون coolBar ساخته شده یه toolBar بسازم
و چرا با این کد جواب نمیده



procedure TForm1.Button2Click(Sender: TObject);
var
MyCool : TCoolBar;
begin
MyCool := Self.FindComponent('MyCool') as TCoolBar;
if Assigned(MyCool) then

with TToolBar.Create(Self) do
begin
Parent := MyCool;
Name := 'MyTool' ;
end;
end;
و سوال دوم

فرضا که من با 5 بار کلیک روی یه دکمه 5تا دکمه توی صفحه ساختم.
با این ستور:



procedure TForm1.Button1Click(Sender: TObject);
begin
n :=n+1 ;
m:m+20 ;
with TButton.Create(Self) do
begin
Parent := Self;
Left := 8+m;
Top := 24;
Name := 'MyButton'+InttoStr(n) ;
Text := 'This is a test';
Action := Action1 ;
end;
end;
که البته یه ActionList هم ساختم و بعد با این کد براشون کار تعریف کنم که مثلا مقدار j رو تو ادیت باکس بخونه
کاری که Action1 انجام میده



procedure TForm1.Action1Execute(Sender: TObject);
begin
j :=j+1 ;
Form1.Edit1.Text := inttostr(j);
end;
حالا اگه بخوام بفهمم کاربر رو کدوم یکی از 5تا دکمه کلیک کرده چیکار باید بکنم
یعنی بخوام با کلیک رو دکمه اول اسم اون دکمه (MyButton1) توی یه ادیت باکس دیگه فراخوانی بشه
و با کلیک رو دکمه دوم اسم اون دکمه (MyButton2) تو ادیت باکس فراخوانی بشه و ...
میدونم باید برای هر کدوم یه Action بسازم ولی نمیدونم چطوری
و بعد از ساخت چطوری اون Actionهارو با هر کدوم از دکمه ها یک به یک ربط بدم
ممنون میشم از لطفتون آقای کشاورز

Felony
چهارشنبه 26 آبان 1389, 14:51 عصر
در مورد سوال اول مشکلی نداره و درست کار میکنه :

دکمه اول :

with TCoolBar.Create(Self) do
begin
Parent := Self;
Name := 'MyCool' ;
end;

دکمه دوم :

var
MyCool : TCoolBar;
begin
MyCool := Self.FindComponent('MyCool') as TCoolBar;
if Assigned(MyCool) then
with TToolBar.Create(Self) do
begin
Parent := MyCool;
Name := 'MyTool' ;
end;
end;

در مورد سوال دوم هم توسط پارامتر Sender میتونید به نام و یا متدهای شئ صدا کننده رویداد دست پیدا کنید :
ShowMessage((Sender as TComponent).Name);
مثلا برای پیدا کردن Caption دکمه ای که رویداد رو فراخوانی کرده :
ShowMessage((Sender as TButton).Caption);