ورود

View Full Version : درست کردن یک Type Effect



ehsan_faal
دوشنبه 03 فروردین 1394, 17:17 عصر
سلام دوستان.

من میخوام یه تایپ افکت درست کنم که مثلا یه رشته ای رو که خودم توی یه لیبل گذاشتم رو کاراکتر به کاراکتر نمایش بده.یه تایمر گذاشتم که با زدن یه دکمه فعال بشه و به محض فعال شدنش یکی یکی حروف رو به کپشن لیبل اضافه کنه و خودش هم غیر فعال بشه، ولی یه دفعه همه رشته با هم ظاهر میشه در حالی که وقتی برنامه رو تریس میکنم همونطور که انتظار داشتم یه کاراکتر یه کاراکتر به کپشن لیبل اضافه میشه.ممنون میشم بگین اشتباهم کجاست.


var Form1: TForm1;
Str: string;


implementation


{$R *.dfm}
procedure TForm1.EffectbtnClick(Sender: TObject);
begin
tmr1.Enabled := True;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Str := Trim(lbl1.Caption);
lbl1.Caption := '';
end;




procedure TForm1.tmr1Timer(Sender: TObject);
var
Index:Integer;
begin
for Index := 1 to Length(Str) do
begin
lbl1.Caption:=lbl1.Caption+Str[Index];
lbl1.Show;
Sleep(100);
end;
tmr1.Enabled:=False;


end;


end.

یا علی

Mask
دوشنبه 03 فروردین 1394, 17:37 عصر
این شکللی بنویس:

var Form1: TForm1;
Counter: integer = 1;


implementation


{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
lbl1.Caption := '';
tmr1.Enabled := True;
end;


procedure TForm1.tmr1Timer(Sender: TObject);
begin
if Counter <> Edit1.GetTextLen + 1 then
begin
lbl1.Caption := lbl1.Caption + Edit1.Text[Counter];
Inc(Counter);
end
else
tmr1.Enabled := false;
end;

ehsan_faal
دوشنبه 03 فروردین 1394, 18:20 عصر
ممنون.ولی میشه بگید کد اول چرا کار نمیکنه.هر چی فکر میکنم میبینم باید جواب بده

developing
چهارشنبه 05 فروردین 1394, 08:36 صبح
با سلام

در برنامه اول شما یک حلقه دارید که به محض فراخوانی تا انتها اجرا خواهد شد ( حتی اگر 10 میلیون بار بخواهد اجرا شود) و دیگر نویسه ای نمی ماند که در بازگشت به تایمر بخواهد افزوده شود.

ولی در برنامه حاج یوسف در هر بار ورود به تایمر یک نویسه به رشته اضافه شده و شمارنده یکی افزوده می شود، تا دوباره زمان تیک بعدی تایمر برسد و ...

ehsan_faal
چهارشنبه 05 فروردین 1394, 10:31 صبح
یعنی میشه اینطور گفت که تایمر مثله یه حلقه میمونه.آخه چیزی که من میبینم اینه که بعد از خروج از تایمر اون غیر فعال میشه.

یوسف زالی
دوشنبه 10 فروردین 1394, 01:23 صبح
سلام.
تایمر حلقه نیست.
تکنیکی که گفته شد استفاده از تایمر بعنوان حلقه بود. یعنی تایمر رو به عنوان شمارنده به کار بردیم.
روش شما ایرادش اینه که برنامه فرصت invalidate کردن کنترل رو نداره.
به جای show بنویسید refresh و تست کنید.