Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2009, 03:27   #1
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
Вопрос графика. ромб. оч странный ромб

помогите найти ошибку!!!

вся программка длиненькая, но ошибочка в рисовании ромбика, который серого цвета, неактивный- зеленый:
Код:
procedure knopka.draw2;
var
   t:array[1..4] of pointtype;
begin
setcolor(2);
if ac=true       then
begin
setcolor(8);
     t[1].x:=x1+1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2)+1;
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1+1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2)+1;
     t[4].y:=y1+round((x2-x1)/2);
     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),8);

     setcolor(15);
     t[1].x:=x1-1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2)-1;
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1-1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2)-1;
     t[4].y:=y1+round((x2-x1)/2);
     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),15);

  setcolor(7);
       t[1].x:=x1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2);
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2);
     t[4].y:=y1+round((x2-x1)/2);
     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),7);
     setcolor(4);
end 
else begin
setcolor(15);
     t[1].x:=x1+1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2)+1;
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1+1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2)+1;
     t[4].y:=y1+round((x2-x1)/2);
     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),8);

     setcolor(8);
     t[1].x:=x1-1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2)-1;
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1-1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2)-1;
     t[4].y:=y1+round((x2-x1)/2);
     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),15);

  setcolor(2);
       t[1].x:=x1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2);
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2);
     t[4].y:=y1+round((x2-x1)/2);
     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),7);
     setcolor(4);
end;end;
он очень странный получается
aka_faith вне форума Ответить с цитированием
Старый 31.05.2009, 03:55   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Мда.. Вы б хоть описание объекта выложили )
Ну да ладно, восстановил.

А что в нем странного? Ромб как ромб.

Тестил такой код:
Код:
type KN = object
x1,x2,y1,y2 : integer;
ac : boolean;
procedure draw2;
end;

var knopka : KN;

// ваша процедура
//......
knopka.x1:=100;
knopka.x2:=150;
knopka.y1:=100;
knopka.y2:=150;
knopka.ac :=true;
knopka.draw2;
Изображения
Тип файла: jpg scr1.jpg (2.3 Кб, 73 просмотров)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 31.05.2009 в 03:58.
Sazary вне форума Ответить с цитированием
Старый 31.05.2009, 04:08   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ага.. Вроде, понял, что вы имеете в виду - присвоил ac значение false )

Вот, подправил. Изменения коснулись только части else
Код:
procedure KN.draw2;
var
t:array[1..4] of pointtype;
begin
setcolor(2);
if ac=true then
begin
setcolor(8);
     t[1].x:=x1+1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2)+1;
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1+1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2)+1;
     t[4].y:=y1+round((x2-x1)/2);

     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),8);

     setcolor(15);
     t[1].x:=x1-1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2)-1;
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1-1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2)-1;
     t[4].y:=y1+round((x2-x1)/2);
     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),15);

  setcolor(7);
       t[1].x:=x1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2);
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2);
     t[4].y:=y1+round((x2-x1)/2);
     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),7);
     setcolor(4);
end 
else begin
setcolor(15);
     t[1].x:=x1+1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2)+1;
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1+1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2)+1;
     t[4].y:=y1+round((x2-x1)/2);
     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),15);

     setcolor(8);
     t[1].x:=x1-1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2)-1;
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1-1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2)-1;
     t[4].y:=y1+round((x2-x1)/2);
     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),8);

  setcolor(2);
     t[1].x:=x1;
     t[1].y:=y1;
     t[2].x:=x1+round((x2-x1)/2);
     t[2].y:=y1+round((y2-y1)/2);
     t[3].x:=x1;
     t[3].y:=y2;
     t[4].x:=x1-round((x2-x1)/2);
     t[4].y:=y1+round((x2-x1)/2);
     fillpoly(4,t);
     setfillstyle(1,8);
     floodfill(x1+3,y1+round((y2-y1)/2),2);
     setcolor(4);
end;
end;
Вот такой получился:
Изображения
Тип файла: jpg scr2.jpg (4.3 Кб, 87 просмотров)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.05.2009, 17:30   #4
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
Вопрос

я немного помучала ромбик:
Код:
procedure knopka.draw2;{а вот тут должна быть кнопка-ромб}
var
t:array[1..4] of pointtype;
begin
setcolor(2);
if ac=true then
begin
     setcolor(7);
     t[1].x:=x1; t[1].y:=y1+round((y2-y1)/2);
     t[2].x:=x1+round((x2-x1)/2); t[2].y:=y1;
     t[3].x:=x2; t[3].y:=y1+round((y2-y1)/2);
     t[4].x:=x1+round((x2-x1)/2); t[4].y:=y2;

     fillpoly(4,t);
     setfillstyle(1,8);


     setcolor(0);
     t[1].x:=x1-3; t[1].y:=y1+round((y2-y1)/2);
     t[2].x:=x1+round((x2-x1)/2); t[2].y:=y1-3;
     t[3].x:=x2; t[3].y:=y1+round((y2-y1)/2);
     t[4].x:=x1+round((x2-x1)/2); t[4].y:=y2;

     fillpoly(4,t);
     setfillstyle(1,8);

     setcolor(15);
     t[1].x:=x1; t[1].y:=y1+round((y2-y1)/2);
     t[2].x:=x1+round((x2-x1)/2); t[2].y:=y1;
     t[3].x:=x2+3; t[3].y:=y1+round((y2-y1)/2);
     t[4].x:=x1+round((x2-x1)/2); t[4].y:=y2+3;

     fillpoly(4,t);
     setfillstyle(1,8);

end
else begin
setcolor(7);
     t[1].x:=x1; t[1].y:=y1+round((y2-y1)/2);
     t[2].x:=x1+round((x2-x1)/2); t[2].y:=y1;
     t[3].x:=x2; t[3].y:=y1+round((y2-y1)/2);
     t[4].x:=x1+round((x2-x1)/2); t[4].y:=y2;

     fillpoly(4,t);
     setfillstyle(1,2);

     setcolor(0);
     t[1].x:=x1+3; t[1].y:=y1+round((y2-y1)/2);
     t[2].x:=x1+round((x2-x1)/2)+3; t[2].y:=y1;
     t[3].x:=x2+3; t[3].y:=y1+round((y2-y1)/2);
     t[4].x:=x1+round((x2-x1)/2)+3; t[4].y:=y2;


     fillpoly(4,t);
     setfillstyle(1,2);

     setcolor(15);
     t[1].x:=x1-1; t[1].y:=y1+round((y2-y1)/2);
     t[2].x:=x1+round((x2-x1)/2)-1; t[2].y:=y1;
     t[3].x:=x2-1; t[3].y:=y1+round((y2-y1)/2);
     t[4].x:=x1+round((x2-x1)/2)-1; t[4].y:=y2;

     fillpoly(4,t);
     setfillstyle(1,2);

end;
end;
но как сделать его выпуклым:??
Изображения
Тип файла: jpg ромб.JPG (5.4 Кб, 82 просмотров)
aka_faith вне форума Ответить с цитированием
Старый 31.05.2009, 17:36   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
я немного помучала ромбик:
Судя по тому, что он мне рисует, вы его жестоко пытали

Вы можете объяснить, что за параметр ac?
А то я даже не знаю, на какую часть процедуры смотреть.
И с каким значением этого поля нужно запускать для теста?

И вот это, то что выше (рисунок) - это так должно выглядеть?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.05.2009, 17:43   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот. Изменил для части ac=true.
Код:
if ac=true then
begin
     setcolor(7);
     t[1].x:=x1-3; t[1].y:=y1+round((y2-y1)/2);
     t[2].x:=x1+round((x2-x1)/2); t[2].y:=y1-3;
     t[3].x:=x2-3; t[3].y:=y1+round((y2-y1)/2);
     t[4].x:=x1+round((x2-x1)/2); t[4].y:=y2+3;

     fillpoly(4,t);
     setfillstyle(1,8);


     setcolor(0);
     t[1].x:=x1+3; t[1].y:=y1+round((y2-y1)/2);
     t[2].x:=x1+round((x2-x1)/2)+3; t[2].y:=y1-3;
     t[3].x:=x2+3; t[3].y:=y1+round((y2-y1)/2);
     t[4].x:=x1+round((x2-x1)/2)+3; t[4].y:=y2+3;

     fillpoly(4,t);
     setfillstyle(1,8);

     setcolor(10);
     t[1].x:=x1; t[1].y:=y1+round((y2-y1)/2);
     t[2].x:=x1+round((x2-x1)/2); t[2].y:=y1;
     t[3].x:=x2; t[3].y:=y1+round((y2-y1)/2);
     t[4].x:=x1+round((x2-x1)/2); t[4].y:=y2;

     fillpoly(4,t);
     setfillstyle(1,10);

end
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.05.2009, 17:45   #7
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

ac - активность кнопочки)) если на нее хотят нажать, то она серенькая, а если на другую, то она зелененькая... кнопочки на панельки - выпуклые!! и при нажатии на них происходит "магия"))))

рисуночек схемотичный, все что в пеинте смогла изобразить, но то, что слева ромбик светленький, а справа темненький - это точно

трабл в коде, к чему правильно пиксели прибавлять??
aka_faith вне форума Ответить с цитированием
Старый 31.05.2009, 17:50   #8
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

а как от ободочка избавиться? белого и зелененького
aka_faith вне форума Ответить с цитированием
Старый 31.05.2009, 17:54   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от aka_faith
а как от ободочка избавиться? белого и зелененького
о_О Я думал он вам наоборот нужен. А как вы тогда собираетесь кнопку объемной делать?

Или вы о каком ободочке говорите?
Вот, что у меня рисует:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.05.2009, 18:15   #10
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

у меня получается что-то с жирным контуром ярко-зеленого цвета и вместо темной части рисуется таким же цветом как и внутри контура...

а квадратик у меня без контура:
Код:
procedure knopka.draw1; {моя кнопо4ка-квадрат}
    begin
      setcolor(2);
      if ac=true then begin
        setfillstyle(1,8);
        setcolor(15);line(x1-1,y1,x2+1,y1);line(x1,y1+2,x1,y2);
        setcolor(0);line(x1+1,y2,x2,y2);line(x2,y1+1,x2,y2);
        setcolor(7);line(x1+3,y2-3,x2-3,y2-3);line(x2-3,y1+3,x2-3,y2-3);
        bar(x1+2,y1+2,x2-3,y2-3);
      end
      else  begin
        setfillstyle(1,2);
        setcolor(15);line(x1-1,y1,x2+1,y1);line(x1,y1+2,x1,y2);
        setcolor(0);line(x1+1,y2,x2,y2);line(x2,y1+1,x2,y2);
        setcolor(7);line(x1+3,y2-3,x2-3,y2-3);line(x2-3,y1+3,x2-3,y2-3);
        bar(x1+2,y1+2,x2-3,y2-3);
      end;
   end;
aka_faith вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выаод из DBGrid в EXcel (странный способ) Girl БД в Delphi 1 02.04.2009 08:47
Странный тип Yuran Общие вопросы Delphi 4 10.06.2008 10:11
Странный скрипт на страницах моих сайтов! Lx62GjVWZQJFjPD JavaScript, Ajax 5 29.03.2008 17:22
Странный, не стандартный файл valerij Microsoft Office Excel 4 26.03.2008 12:24