Kezdőoldal » Számítástechnika » Programozás » A Delphi miért nem sorrendben...

A Delphi miért nem sorrendben hajtja végre az utasításokat?

Figyelt kérdés

van egy FOR ciklusom, ami több időt vesz igénybe, mivel szünetek vannak beleépítve. Betettem ELÉ egy parancsot, hogy az edit mező színe változzon át pirosra. A program el is indul, de csak az UTÁN változtatja át az edit mező színét, hogy az összes számolást elvégezte. Pedig ép az lenne a lényeg, hogy látni lehessen, mikor ép számol. Miért van ez, és hogy bírnám rávenni, hogy sorrendbe hajtsa végre az utasításokat?

köszi előre is a válaszokat.


2011. márc. 29. 22:16
 1/7 anonim ***** válasza:

Hát, ez nagyon jó kérdés.


Szerintem valahol te rontottad el, raktál bele egy visszaugrató parancsot, vagy valami, mert a fordító MINDIG sorrendben hajtja végre a parancsokat. Sosem hallottam még olyanról, hogy nem így tenne.


De esetleg másold be a kódot. Delphihez nem értek, mert C#-ban programozok, de talán meglátom a hibát :)

2011. márc. 29. 22:47
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

Nem vagyok nagy programozó, már amit tudtam azt is elfelejtettem, így valószínű nem a legjobb megoldásokat választottam, dehát ez van... :)

egyébként léptető motorokat akarok irányítani vele, és a progi működik is ahogy elterveztem, csak most ez kicsit bezavart... :S


begin

edit2.Color:=clRed;

timer1.Enabled:=true;

val(edit2.Text,a,l);

b:=12*a;

c:=round(b);

r:=m+c;

if (r>18) and (r<3505) then

for i:=1 to c do

begin

begin

for j:=0 to 3 do

begin

k:=1;

for d:=1 to j do

begin

k:=k*2;

end;

out32(888,k);

sleep(v);

end;

m:=m+1;

Str(m:10,s);

label1.Caption:=s;

end;

out32(888,0);

Sleep(10);

end


else

begin

MessageDlg('A pont nincs rajta az A4-es papíron! Adjon meg új értéket!', mterror, [mbOk],0);

end;

end;


Azóta megpróbáltam betenni a Timer-t, de azzal is ugyan ez a helyzet. először végigszámolja, aztán elindítja... :S pedig az elején van az is... :S

Egyébként az megoldható, hogy a timer működjön, és a ProgressBar-t irányítsa, amít fut a FOR ciklus?

2011. márc. 29. 23:11
 3/7 anonim ***** válasza:
a for előtt próbálj ki egy edit1.repaint parancsot!
2011. márc. 30. 06:54
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:

Köszi, ez így működik :)

Van esetleg valami megoldás az időzítőre is? Indulnia kéne a FOR előtt, és párhuzamosan kéne, hogy működjön vele. Az megoldható egyáltalán? Tehát amíg a for halad előre, addig a ProgressBar-nak is folyamatosan kéne töltődnie...

2011. márc. 30. 09:40
 5/7 anonim ***** válasza:

1. Már megmondták a választ, de elmélet mögé: a cucc színét megváltoztatja a parancs, de mivel nem rajzoltatta senki újra, ezért nem látszott.

2. Időzítő ugyanazon a szálon fut, mint a főprogi, tehát amíg erősen dolgoztatod, addig nem fog tickelni. Indítsd külön szálon, bár szerintem ez még neked bonyolult lenne.

Megoldás: a progressbart hajtsa maga a ciklus, ott mindig tudod, épp hol tartasz a feladatban, ha haladsz egyet, növeled eggyel, a max érték meg ugye az összes feladat száma.

2011. márc. 30. 11:02
Hasznos számodra ez a válasz?
 6/7 ejbenjaro ***** válasza:
Esetleg nézz utána az Application.ProcessMessages hívásnak is.
2011. márc. 30. 13:31
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:
Már nekem is eszembe jutott az este a progressBar-hoz ez a megoldás, hogy így megkerüljem az időzítőt, csak még nem próbáltam ki. Köszi szépen :)
2011. márc. 30. 14:12

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!