Помощь - Поиск - Пользователи - Календарь
Полная версия: Смена цвета фона в графическом режиме
Форум «Всё о Паскале» > Pascal, Object Pascal > 32 битные компиляторы
RathaR
Не выходит сменить цвет фона в графическом режиме, процедура SetBkColor не меняет ничего... экран остается черный. Я порылся в поиске, пару прецендентов нашёл, но подходящих решений, и внятного ответа не попалось. В графике пока понимаю немного, никаких видео-режимов, или еще чегот подобного не менял и не использую. Как решить подобную проблему? unsure.gif
Unconnected
А графический режим какой? Стандартный, или какой-то сторонний модуль подключаешь, типа vesa256?
Кодом покажи, короче.
RathaR
Цитата(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
Во-первых - ты прямо тут набирал, что ли? И какое разрешение тебе надо? И где ты тут цвет фона устанавливаешь? И зачем очищать экран в текстовом режиме перед переходом в графический?
RathaR
Цитата(Unconnected @ 8.07.2009 19:24) *

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

не=) просто, остальное там заливка, линии и кружочки, ничего большего, ну и setbkcolor, который фон не меняет...
Unconnected
А как же "close graph;" в два слова? Этот оператор пишется слитно. И ты не ответил про разрешение.
RathaR
Цитата(Unconnected @ 8.07.2009 20:06) *

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

"close graph;"в два слова - очепятка, хз как получилась, я в курсе что слитно smile.gif , разрешение мне надо 640 на 480.
Раньше я пользовал Турбо Паскаль 7.0 там всё было норм, и разрешение 640 на 480, вот пару дней назад перешёл на фри паскаль, и тут уже пошли несостыковочки...
volvo
Так. Или ты приводишь файл, содержащий точный текст программы, вызывающей проблемы (с указанием компилятора), или тема закрывается как "переливание воды". Неужели не ясно, что важно ВСЕ, чтобы понять, почему оно не работает?
RathaR
Кусок что есть...среда-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
Мой 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
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
Цитата(volvo @ 8.07.2009 21:29) *

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

smile.gif пасыба, учту smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.