Пользователь
Регистрация: 01.11.2014
Сообщений: 52
|
Блокировка рисования
Имеется следующий код:
Код:
uses
ABCObjects, GraphABC;
var
x, y, i, x1, y1, r, r1, m, z, xx, yy, d: integer;
c: CircleABC;
a: array[-100..2000, -100..2000] of color;
s1: RectangleABC;
label u, p;
begin
Window.Width := 600;
Window.Height := 600;
Window.Title := 'Генерация карты';
Window.SetPos(1, 1);
Window.IsFixedSize := True;
ClearWindow(clGreen);
s1 := new RectangleABC(1, 1, 599, 20, clMoneyGreen);
s1.Text := 'Введите число интераций (от 0 до 200)';
readln(m);
s1.Text := 'Введите число флоктаций (от 0 до 3000)';
readln(z);
ClearWindow(clNavy);
LockDrawing;//Блокировка рисованя.
//
//Пририсовка фона
for r := 3 to 597 do
for r1 := 3 to 597 do
case random(r, 7000) of
0..4099:
begin
Setpixel(r1, r, clYellow);
a[r1, r] := clYellow end;
4100..6999:
begin
Setpixel(r1, r, clSilver);
a[r1, r] := clSilver end;
7000:
begin
PictureABC.Create(r, r1, 'Фон.png');// !!!!!!!!!! Рисунок ///////////////// прорисовуется !!
end;
end;
//
//Постановка флоктаций
for r := 1 to z do
a[random(40, 560), random(40, 560)] := clGreen;
for i := 1 to m do
for x := 1 to 600 do
for y := 1 to 600 do
//
// Генерерация корпункул
if a[x, y] = clGreen
then begin
x1 := x - Random(-1, 1);
y1 := y - Random(-1, 1);
s1.Number := i;
if (a[x1, y1] = clYellow) or (a[x1, y1] = clSilver) then
begin
case random(1, 100) of
1..40: a[x1, y1] := clGreen;//Генерация зелёного.
41..96: a[x1, y1] := clBlue;//Генерация синего.
//
//Генерация красного и чорного.
97..98:
begin
a[x1, y1] := clBlack;
a[x1 + Random(-1, 1), y1 + Random(-1, 1)] := ClRed;
a[x1 + Random(-1, 1), y1 + Random(-1, 1)] := ClRed;
a[x1 + Random(-1, 1), y1 + Random(-1, 1)] := ClRed;
//
//Генерация коричневого и фиолетового.
end;
99..100:
begin
a[x1, y1] := clMagenta;
a[x1 - 1, y1] := clBrown;
a[x1, y1 - 1] := clBrown;
a[x1 - 1, y1 - 1] := clBrown;
a[x1 + 1, y1] := clBrown;
a[x1, y1 + 1] := clBrown;
a[x1 + 1, y1 + 1] := clBrown;
end;
end;
end;
//
// Перенос во внеэкранный буфер
setpixel(x1, y1, a[x1, y1]);
setpixel(x1 - 1, y1, a[x1 - 1, y1]);
setpixel(x1, y1 - 1, a[x1, y1 - 1]);
setpixel(x1 - 1, y1 - 1, a[x1 - 1, y1 - 1]);
setpixel(x1 + 1, y1, a[x1 + 1, y1]);
setpixel(x1, y1 + 1, a[x1, y1 + 1]);
setpixel(x1 + 1, y1 + 1, a[x1 + 1, y1 + 1]);
end; //
Redraw;//Вывод на экран.
for r := 3 to 597 do
for r1 := 3 to 597 do
case random(1, 200000) of
1: PictureABC.Create(r, r1, '1.png');
2: PictureABC.Create(r, r1, '2.png');
3: PictureABC.Create(r, r1, '3.png');
4: PictureABC.Create(r, r1, '4.png');
else
end ;
end.
Рисование на экране отключено, НО функция "PictureABC.Create(r, r1, 'Фон.png')" выводит на экран рисунок в момент её выполнения. Подскажите что не так.
Последний раз редактировалось Stilet; 30.12.2014 в 09:39.
|