Jump to content
BulForum.com

Pomo6t Za Delphi


Harbachek

Recommended Posts

  • 2 weeks later...

Poneje mi se skaraha 4e otvarqm nova tema sled kato taq e zabata4ena i edvam q otkrih zadavam sledniq vapros:

 

Zna4i kato pusna v edna procedura cikal ot nqkakav primeren buton oba4e cikala e baven kak da napravq kato se natisne drugg buton da spira cikala v parviq buton

 

10x predvaritelno nadqvam se 4e me razbrahte

Link to comment
Share on other sites

Poneje mi se skaraha 4e otvarqm nova tema sled kato taq e zabata4ena i edvam q otkrih zadavam sledniq vapros:

 

Zna4i kato pusna v edna procedura cikal ot nqkakav primeren buton oba4e cikala e baven kak da napravq kato se natisne drugg buton da spira cikala v parviq buton 

 

10x predvaritelno nadqvam se 4e me razbrahte

Трябва периодично в цикъла да извикваш Application.ProcessMessages;

примерно така:

if (i mod 100) = 0 then Application.ProcessMessages;

където i е управляващата променлива.

И натискайки бутона за спиране, този бутон ще сетва променлива, която може да се проверява в цикъла в този if:

if (i mod 100) = 0 then

бегин

Application.ProcessMessages;

if terminatecycle = true then exit (ili kakvoto reshish za izlizane ot cikyla);

енд;

 

Има и други начини, но този на пръв поглед става.

Link to comment
Share on other sites

Am moje li malko po podrobno 4e mnogo ne shvanah koe kade trqbva da sloagam pls :bgrin:

 

EDIT: Ne ne az si go opravih 10x za pomo6tta a moje li o6te edin vapros :D

 

eto:

 

moje li dokato sam pusnal media player componenta da sviri da se izvar6vat drugite deistviq ? :huh:

Link to comment
Share on other sites

Am moje li malko po podrobno 4e mnogo ne shvanah koe kade trqbva da sloagam pls  :bgrin:

Ето ти примерен код, сложи два бутона и два лейбъла във формата без да ги преименуваш и се убеди, че в съответните им handlers за onClick събитията има това:

procedure TForm1.Button1Click(Sender: TObject);
begin
 label1.Caption:= inttostr(strtoint(label1.Caption)+1);
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:longint;
begin
 for i:= 0 to 100000 do
 begin
   label2.Caption:= inttostr(strtoint(label2.Caption)+1);
   if (i mod 100) = 0 then Application.ProcessMessages;
 end;
end;

 

Първия сложен от теб бутон просто увеличава стойността на първия лейбъл с единица при всяко натискане.

Втория бутон пуска цикъл, който брои до 100 000. Не го натискай повече от веднъж за всяко стартиране на цикъла докато не свърши цикъла иначе ще се чудиш защо се бави докато завърши.

Идеята е, че докато цикъла брои, можеш да натискаш първия бутон, който съвсем независимо си работи и увеличава първия лейбъл. Това е идеята, в евент-а за първия бутон можеш да сложиш примерно trmcycle:= true, и тази променлива да се проверява по начина който ти казах, в блока if (i mod 100) = 0.

Ако и от това обяснение не схванеш, явно се захващаш с нещо, което не разбираш и по-добре не се захващай.

Смисълът на ProcessMessages е, че когато се извика, обработва messages, които са в опашката за приложението, като натискане на бутон например, или draw на формата при нужда. Ако не сложиш този оператор, докато цикъла работи, приложението ти ще изглежда все едно е блокирало, освен ако цикъла не си го сложил в нишка.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...