Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ Смена цвета фона в графическом режиме

Автор: RathaR 8.07.2009 22:54

Не выходит сменить цвет фона в графическом режиме, процедура SetBkColor не меняет ничего... экран остается черный. Я порылся в поиске, пару прецендентов нашёл, но подходящих решений, и внятного ответа не попалось. В графике пока понимаю немного, никаких видео-режимов, или еще чегот подобного не менял и не использую. Как решить подобную проблему? unsure.gif

Автор: Unconnected 8.07.2009 22:58

А графический режим какой? Стандартный, или какой-то сторонний модуль подключаешь, типа vesa256?
Кодом покажи, короче.

Автор: RathaR 8.07.2009 23:21

Цитата(Unconnected @ 8.07.2009 18:58) *

А графический режим какой? Стандартный, или какой-то сторонний модуль подключаешь, типа vesa256?
Кодом покажи, короче.

Без ничего, весь код это

uses graph,crt;
var Gdriver,Gmod:integer;
begin
clrscr;
Gdriver:=detected;
initgraph(Gdriver,Gmod,'');
getmaxx;getmaxy;
readln;
close graph;
end.

а разрешение выходит в итоге 1024 на 768

Автор: Unconnected 8.07.2009 23:24

Во-первых - ты прямо тут набирал, что ли? И какое разрешение тебе надо? И где ты тут цвет фона устанавливаешь? И зачем очищать экран в текстовом режиме перед переходом в графический?

Автор: RathaR 8.07.2009 23:25

Цитата(Unconnected @ 8.07.2009 19:24) *

Во-первых - ты прямо тут набирал

не=) просто, остальное там заливка, линии и кружочки, ничего большего, ну и setbkcolor, который фон не меняет...

Автор: Unconnected 9.07.2009 0:06

А как же "close graph;" в два слова? Этот оператор пишется слитно. И ты не ответил про разрешение.

Автор: RathaR 9.07.2009 0:19

Цитата(Unconnected @ 8.07.2009 20:06) *

А как же "close graph;" в два слова? Этот оператор пишется слитно. И ты не ответил про разрешение.

"close graph;"в два слова - очепятка, хз как получилась, я в курсе что слитно smile.gif , разрешение мне надо 640 на 480.
Раньше я пользовал Турбо Паскаль 7.0 там всё было норм, и разрешение 640 на 480, вот пару дней назад перешёл на фри паскаль, и тут уже пошли несостыковочки...

Автор: volvo 9.07.2009 0:21

Так. Или ты приводишь файл, содержащий точный текст программы, вызывающей проблемы (с указанием компилятора), или тема закрывается как "переливание воды". Неужели не ясно, что важно ВСЕ, чтобы понять, почему оно не работает?

Автор: RathaR 9.07.2009 0:30

Кусок что есть...среда-FPC

program  pole2;

uses
Crt,Graph;
var
Gdriver,Gmod:integer;
x,y,x1,y1:integer;
procedure Fon;
const
H_size = 1000;

V_size = 600;

Gora:array[1..8] of integer = (H_size div 3, 600,

H_size div 2, 2 * V_size div 3,

2 * H_size div 3, 600,

H_size div 3, 600);
Z1 = 500;

Z2 = 500;
begin
setbkcolor(15); {<====}
setfillstyle(10,8);
setlinestyle(0,0,3);
setcolor(8);
drawpoly(4,Gora);
floodfill(Z1,Z2,8);
rectangle(1,1,1000,600);
setcolor(1);
rectangle(950,550,1000,600);
end;
function popal(x,y,zvet:integer):boolean;

begin
if getpixel(x,y)= 1 then popal:=true else popal:=false;
end;
begin
Gdriver:=detect;
initgraph(Gdriver,Gmod,'');
Fon;
readln;
closegraph;
end.

Автор: Unconnected 9.07.2009 0:42

Мой FreePascal заболел, поэтому компилировал в обычном TP7, изменённые строки отмечены, цвет фона меняется.

program  pole2;

uses
Crt,Graph;
var
Gdriver,Gmod:integer;
x,y,x1,y1:integer;
procedure Fon;
const
H_size = 1000;

V_size = 600;

Gora:array[1..8] of integer = (H_size div 3, 600,

H_size div 2, 2 * V_size div 3,

2 * H_size div 3, 600,

H_size div 3, 600);
Z1 = 500;

Z2 = 500;
begin
setbkcolor(blue); //<== поставил символьное обозначение цвета вместо числового, иногда помогает
setfillstyle(10,8);
setlinestyle(0,0,3);
setcolor(8);
drawpoly(4,Gora);
floodfill(Z1,Z2,8);
rectangle(1,1,1000,600);
setcolor(1);
rectangle(950,550,1000,600);
end;
function popal(x,y,zvet:integer):boolean;

begin
if getpixel(x,y)= 1 then popal:=true else popal:=false;
end;
begin

Gdriver:=0; //<==
GMod:=0; //<==
initgraph(Gdriver,Gmod,'');
Fon;
readln;
closegraph;
end.



Разрешение 640/480, за счёт установки Gdriver(или GMod, точно не помню) в 0.

Автор: volvo 9.07.2009 1:29

FPC 2.2.4:

program  pole2;

uses
Crt,Graph;
var
Gdriver,Gmod:integer;
x,y,x1,y1:integer;
procedure Fon;
const
H_size = 1000;

V_size = 600;

Gora:array[1..8] of integer = (H_size div 3, 600,

H_size div 2, 2 * V_size div 3,

2 * H_size div 3, 600,

H_size div 3, 600);
Z1 = 500;

Z2 = 500;
begin
setbkcolor(15);
cleardevice; { <--- Вот это добавить, тогда отрабатывает SetBkColor }
setfillstyle(10,8);
setlinestyle(0,0,3);
setcolor(8);
drawpoly(4,Gora);
floodfill(Z1,Z2,8);
rectangle(1,1,1000,600);
setcolor(1);
rectangle(950,550,1000,600);
end;
function popal(x,y,zvet:integer):boolean;

begin
if getpixel(x,y)= 1 then popal:=true else popal:=false;
end;
begin
Gdriver:=VGA; GMod := VGAHI; { <--- Установка 640*480 }
initgraph(Gdriver,Gmod,'');
Fon;
readln;
closegraph;
end.
Естественно, координаты всех фигур - меняй, они будут некорректными smile.gif И никогда не привязывайся к конкретным значениям ширины/высоты экрана - GetMaxX/GetMaxY совсем не просто так придумали.

Автор: RathaR 9.07.2009 4:30

Цитата(volvo @ 8.07.2009 21:29) *

Естественно, координаты всех фигур - меняй, они будут некорректными smile.gif И никогда не привязывайся к конкретным значениям ширины/высоты экрана - GetMaxX/GetMaxY совсем не просто так придумали.

smile.gif пасыба, учту smile.gif