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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2010, 14:33   #1
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
Вопрос Canvas.Poligon - есть проблемка..

Вот часть кода, по которому должен рисоваться квадрат при нажатии кнопки:

============================
procedure Kubik(q: array of TPoint; a,b,c,d,e,f,g,h,t: integer);
begin
case t of
1:Form1.Canvas.Brush.Color:=clGreen ;
2:Form1.Canvas.Brush.Color:=RGB (255, 150, 00);
3:Form1.Canvas.Brush.Color:=clYello w;
4:Form1.Canvas.Brush.Color:=clWhite ;
5:Form1.Canvas.Brush.Color:=clBlue;
6:Form1.Canvas.Brush.Color:=clRed;
end;
q[1].x:=a; q[1].y:=b;
q[2].x:=c; q[2].y:=d;
q[3].x:=e; q[3].y:=f;
q[4].x:=g; q[4].y:=h;
Form1.Canvas.Polygon(q);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Kubik(Up11,100,100,200,100,200,200, 100,200,4) ;
end;
==================================

Но рисуется не квадрат, а то, что изображено на картинке:


Подскажите пожалуйста, в чем тут ошибка, я не могу понять....
Mr_freeman вне форума Ответить с цитированием
Старый 14.03.2010, 14:47   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

up11 что за массив по-вашему?
Код:
  q: array[1..4] of TPoint;
  t: array[1..6] of Tcolor = (clGreen, clmaroon, clYellow, clwhite, clblue, clred);

procedure Kubik(a,b,c,d,e,f,g,h,color: integer);
begin
 Form1.Canvas.Brush.Color:= t[color];
 //
 q[1].x:=a; q[1].y:=b;
 q[2].x:=c; q[2].y:=d;
 q[3].x:=e; q[3].y:=f;
 q[4].x:=g; q[4].y:=h;
 Form1.Canvas.Polygon(q);
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 Kubik(100,100,200,100,200,200,100,200, 4);
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 14.03.2010, 15:04   #3
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

up11 - это array [1..4] of TPoint.

Я что то не понимаю в вашем коде, как масссив q будет работать в процедуре если он нигде не объявлен, и что такое SpeedButton... И можно ли как нибудь сделать, просто исправив мой код?..
Mr_freeman вне форума Ответить с цитированием
Старый 14.03.2010, 16:02   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...у меня он объявлен как - q: array[1..4] of TPoint
...а вы извратились передав статический up11[1..4] параметром в качестве динамического, первым элементом которого является "0" элемент, который тоже является точкой [0, 0] (по-умолчанию), фактически вы передали 5 точек - отсюда ваша картинка (полигону, что дали - то он и построил, он не гордый) /
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 14.03.2010, 16:13   #5
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Я не совсем разбираюсь, в том, что вы сказали.... Можно ли каким то образом просто исправить мой код?
Mr_freeman вне форума Ответить с цитированием
Старый 14.03.2010, 16:17   #6
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Вообщем суть моей программы в том, что сначала нужно построить около 20-ти таких квадратиков, но я объявил такое же количество массивов из точек и мне нужно, чтоб каждый из них сохранял координаты этих точек, поэтому я и хотел написать процедуру, чтоб по очереди использовать массивы.... Так можно ли вообще сделать так, как я хотел?
Mr_freeman вне форума Ответить с цитированием
Старый 14.03.2010, 16:38   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Можно ли каким то образом просто исправить мой код?
можно, заполняйте q внутри своего кода с нулевого элемента.
Цитата:
SpeedButton
просто кнопка такая.
Цитата:
нужно построить около 20-ти таких квадратиков, но я объявил такое же количество массивов из точек и мне нужно, чтоб каждый из них сохранял координаты этих точек
...например так:
Код:
type kvadrat = record // квадрат
 mas: array[0..3] of TPoint;
end;

var num_kvadrat: array of kvadrat; // массив квадратов
     t: array[1..6] of Tcolor = (clGreen, clmaroon, clYellow, clwhite, clblue, clred);

     
procedure graf(num, num_color: integer);
begin
 Form1.Canvas.Brush.Color:= t[num_color];
 Form1.Canvas.Polygon(num_kvadrat[num].mas)
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
 // задаете где и сколько нужно
 setlength(num_kvadrat, 1);    // один квадрат // setlength(num_kvadrat, 2);    // два квадрата и т.д.
 num_kvadrat[0].mas[0].X:= 100; // 1 квадрат 1 точка x-координата
 num_kvadrat[0].mas[0].y:= 100; // 1 квадрат 1 точка y-координата
 num_kvadrat[0].mas[1].X:= 200; // 1 квадрат 2 точка x-координата
 num_kvadrat[0].mas[1].y:= 100; // 1 квадрат 2 точка y-координата
 num_kvadrat[0].mas[2].X:= 200; // 1 квадрат 3 точка x-координата
 num_kvadrat[0].mas[2].y:= 200; // 1 квадрат 3 точка y-координата
 num_kvadrat[0].mas[3].X:= 100; // 1 квадрат 4 точка x-координата
 num_kvadrat[0].mas[3].y:= 200; // 1 квадрат 4 точка y-координата
 ...
 при необходимости еще квадрат заполняем
 ...
 // отображаете
 graf(0, 3)
end;
смысл ясен?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 14.03.2010, 17:04   #8
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Все ясно, спасибо огромное=)
Mr_freeman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите! есть проблемка RML Microsoft Office Excel 28 12.05.2010 20:56
Canvas.Poligon - есть проблемка.. Mr_freeman Помощь студентам 0 14.03.2010 14:32
Я-чайник (в excel) - у меня есть к Вам просьба, если есть желание и время - помогите. rococococo Microsoft Office Excel 0 04.10.2009 12:16
проблемка( Alexcomeback Общие вопросы C/C++ 4 16.04.2009 18:38