Witam was serdecznie.
Zacząłem się uczyć Delphi, jako że mam do napisania w nim projekt zaliczeniowy.
Polega on na pokazaniu w quicksorcie, który element z którym jest porównywany i zamieniany.
Mój problem polega na tym, że polecenie typu memo.color:=costam; działa, ale tylko jeśli po tym daję polecenie showmessage('cos');. Jeśli zamiast tego dam sleep(1500);, to już kolorowania nie widzę :/ Bardzo mi zależy na tym, żebym mógł zastosować sleep, bo wtedy będzie widać ładnie, który z którym jest porównywany.
Mam 20 obiektów typu memo, w każdym z nich jest inna liczba
Oto część kodu, w którym widać problem:
function przydziel(i: integer): TMemo;
var
aMemo: TMemo;
begin
aMemo:=Form1.input;
case i of
1: aMemo := Form1.Memo1;
2: aMemo := Form1.Memo2;
3: aMemo := Form1.Memo3;
4: aMemo := Form1.Memo4;
5: aMemo := Form1.Memo5;
6: aMemo := Form1.Memo6;
7: aMemo := Form1.Memo7;
8: aMemo := Form1.Memo8;
9: aMemo := Form1.Memo9;
10: aMemo := Form1.Memo10;
11: aMemo := Form1.Memo11;
12: aMemo := Form1.Memo12;
13: aMemo := Form1.Memo13;
14: aMemo := Form1.Memo14;
15: aMemo := Form1.Memo15;
16: aMemo := Form1.Memo16;
17: aMemo := Form1.Memo17;
18: aMemo := Form1.Memo18;
19: aMemo := Form1.Memo19;
20: aMemo := Form1.Memo20;
end;
przydziel:=aMemo;
end;
procedure domysl(aMemo : TMemo);
begin
aMemo.Color:=ClHighlight;
end;
procedure quicksort(lewy, prawy : integer);
var
i, j: integer;
x, pivot: extended;
aMemo, bMemo, cMemo: TMemo;
s: string;
kolor: TColor;
begin
i := (lewy + prawy) div 2;
//showmessage('pivot na miejscu '+inttostr(i));
pivot := tablica[i];
aMemo:=przydziel(i);
aMemo.Color:=ClTeal;
tablica[i] := tablica[prawy];
bMemo:=przydziel(prawy);
bMemo.Color:=ClTeal;
//Tu np jest problem - jak zakomentuję sleep, a odkomentuję showmessage, to widzę zmianę kolorów,a tak nie
sleep(2000);
//showmessage('zamiana');
s:=aMemo.lines.text;
aMemo.Lines.text:=bMemo.lines.Text;
bMemo.lines.Text:=s;
sleep(1500);
aMemo.Color:=clBtnFace;
bMemo.Color:=clBtnFace;
j := lewy;
for i := lewy to prawy - 1 do
begin
bMemo:=przydziel(i);
bMemo.Color:=ClWhite;
if tablica[i] < pivot then
begin
cMemo:=przydziel(j);
kolor:=cMemo.color;
cMemo.Color:=ClWhite;
x := tablica[i];
//showmessage('nr '+inttostr(i)+' jest mniejszy od '+floattostr(pivot));
tablica[i] := tablica[j];
tablica[j] := x;
bMemo.Color:=clLime;
//cMemo.Color:=clLime;
//showmessage('mniejsze,i='+inttostr(i));
sleep(1500);
s:=bMemo.Lines.Text;
bMemo.Lines.Text:=cMemo.Lines.Text;
cMemo.Lines.Text:=s;
cMemo.Color:=kolor;
inc(j);
end
else
begin
bMemo:=przydziel(i);
bMemo.Color:=ClSkyBlue;
//showmessage('wieksze od '+floattostr(pivot)+', i='+inttostr(i));
sleep(1500);
//bMemo.Color:=clBtnFace;
end
end;
bMemo:=przydziel(prawy);
bMemo.Color:=ClRed;
cMemo:=przydziel(j);
cMemo.Color:=ClRed;
tablica[prawy] := tablica[j];
tablica[j] := pivot;
//showmessage('zamiana, pivot idzie na miejsce '+inttostr(j)+', a nr '+inttostr(prawy)+' ma wartosc nr '+inttostr(j));
bMemo.Lines.Text:=cMemo.Lines.Text;
cMemo.Lines.Text:=FloatToStrF(pivot,ffFixed,6,4);
sleep(1500);
bMemo.Color:=clBtnFace;
cMemo.Color:=clBtnFace;
if lewy < j - 1 then
begin
//showmessage('ok1, j='+inttostr(j)+',lewy='+inttostr(lewy));
for i:=lewy to j-1 do
begin
aMemo:=przydziel(i);
aMemo.color:=ClBtnFace;
end;
quicksort(lewy, j - 1);
end;
if j + 1 < prawy then
begin
//showmessage('ok2, j='+inttostr(j)+',prawy='+inttostr(prawy));
for i:=j+1 to prawy do
begin
aMemo:=przydziel(i);
aMemo.color:=ClBtnFace;
end;
quicksort(j + 1, prawy);
end;
end;