PDA

View Full Version : سوال: خواندن مقداری از دستور از ادیت



Mask
یک شنبه 07 فروردین 1390, 17:49 عصر
با سلام خدمت دوستان عزیز و تبریک سال نو به همه.
سوالم اینه که ما یه کد داریم مثل ... Label1.Caption:=Edit1.Text
در این نمونه برنامه ما 10 تا ادیت داریم.
میخام در یه ادیت دیگه مقدار ادیت رو دستی بتونم تغییر بدم.
چطوری باید این کار رو انجا دارد.؟
ممنون.

Felony
یک شنبه 07 فروردین 1390, 20:46 عصر
من که نفهمیدم چی کار میخوای بکنی !

AliReza Vafakhah
یک شنبه 07 فروردین 1390, 23:41 عصر
چیزی که من متوجه شدم شما تو OnChange یک Edit مقادیر Edit دیگری را تغییر دهید.

Mask
دوشنبه 08 فروردین 1390, 03:49 صبح
با سلام
نه منظور این نیست.
ببینید . میخام اسم شی رو از تکست ادیت اول بخونم.
بزارید یه مثال دیگه بزنم:
مثلا در برنامه ای 2 تا تایمر دارم.
timer1 , timer2
حالا میخام اسم هر کدوم رو که در ادیت نوشتم Enable ش true بشه.
یعنی :

(Edit1.Text).Enabled:=True
ممنونم

vcldeveloper
دوشنبه 08 فروردین 1390, 06:01 صبح
var
AComponent : TComponent;
begin
AComponent := FindComponent(Edit1.Text);
if AComponent is TTimer then
TTimer(AComponent).Enabled := True;
end;

Mask
دوشنبه 08 فروردین 1390, 19:24 عصر
ممنون از دوستان
نمیدونم چرا این کد که نوشتم کار نمیده . در ضمن از دلفی 7 استفاده میکنم.


procedure TForm1.Button1Click(Sender: TObject);
var
AComponent : TComponent;
begin
AComponent := FindComponent(Edit1.Text);
if AComponent is TTimer then
TTimer(AComponent).Enabled := True;
end;

procedure TForm1.T1Timer(Sender: TObject);
begin
T2.Enabled:=False;
Label1.Caption:=IntToStr(StrToInt(Label1.Caption)+ 1);
end;

procedure TForm1.T2Timer(Sender: TObject);
begin
T1.Enabled:=False;
Label1.Caption:=IntToStr(StrToInt(Label1.Caption)-1);
end;
میخام وقتی T1 رو نوشتم مقدار تایمر اول اجرا بشه و وقتی T2 رو نوشتم مقدار اون. اما اینطری نمیشه.چرا؟
ممنون

Felony
دوشنبه 08 فروردین 1390, 23:49 عصر
procedure TForm1.Button1Click(Sender: TObject);
var
AComponent: TComponent;
i: Byte;
begin
AComponent:= FindComponent(Edit1.Text);
if AComponent is TTimer then
for i := 0 to Self.ComponentCount - 1 do
if Self.Components[i] is TTimer then
TTimer(Self.Components[i]).Enabled:= False;
TTimer(AComponent).Enabled:= True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption:= IntToStr(StrToInt(Label1.Caption)+1);
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
Label1.Caption:= IntToStr(StrToInt(Label1.Caption)-1);
end;

Mask
سه شنبه 09 فروردین 1390, 00:40 صبح
ممنون.
با همین تغییر برنامه اصلاح شد.
اما سوالم اینه چرا کد من کار نمیده.
چرا تایمر اول از کار نمی افته و تایمر بعدی به کار بیوفته؟

vcldeveloper
سه شنبه 09 فروردین 1390, 01:44 صبح
procedure TForm1.Button1Click(Sender: TObject);
var
AComponent: TComponent;
i: Byte;
begin
AComponent:= FindComponent(Edit1.Text);
if AComponent is TTimer then
for i := 0 to Self.ComponentCount - 1 do
if Self.Components[i] is TTimer then
TTimer(Self.Components[i]).Enabled:= False;
TTimer(AComponent).Enabled:= True;
end;

این کد قراره چیکار کنه؟ یک بار کامپوننت رو با FindComponent پیدا می کنید، اون وقت دوباره در یک حلقه دنبال همون کامپوننت می گردید؟!


میخام وقتی T1 رو نوشتم مقدار تایمر اول اجرا بشه و وقتی T2 رو نوشتم مقدار اون. اما اینطری نمیشه.چرا؟
ربطی به FindComponent نداره. تایمر مربوطه Enable میشه، ولی مشکل شما اینه که قبل از اینکه زمان اجرای T2OnTimer برسه، T1OnTimer اجرا میشه، و مجددا همون تایمر را غیرفعال میکنه، پس هیچ وقت T2OnTimer اجرا نمیشه.

Mask
سه شنبه 09 فروردین 1390, 03:55 صبح
این کد قراره چیکار کنه؟ یک بار کامپوننت رو با FindComponent پیدا می کنید، اون وقت دوباره در یک حلقه دنبال همون کامپوننت می گردید؟!
با این حلقه تایمر هارو پیدا کرده و غیرفعال میکنیم.
تا مشکل تداخل تایمر ها پیش نیاد.

Felony
سه شنبه 09 فروردین 1390, 09:28 صبح
با این حلقه تایمر هارو پیدا کرده و غیرفعال میکنیم.
تا مشکل تداخل تایمر ها پیش نیاد.
اگر تعداد تایمر هاتون زیاد نیست هم میتونید به جای کدی که من نوشتم از عبارات شرطی استفاده کنید .