Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 14.04.2015
Сообщений: 89
1
GraphABC

Перерисовка объектов, при изменении размера окна

23.04.2018, 13:22. Просмотров 1836. Ответов 5
Метки нет (Все метки)


Всем доброго времени суток, такая проблема, надо, чтобы при изменении масштаба окна, перерисовывалась диагональ, разделяющая окно на сектора, и объекты изменялись в соотвествии с диагональю. При нажатии левой кнопки мыши на 1 сектор, появляется квадрат, на второй сектор круг соответственно.
Заранее спасибо.
Код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
uses
  GraphABC;
 
const
  r = 20;
  n = 5;
 
procedure
 
MouseDown(x, y, mousebutton: integer);
 
begin
 
    if (x/y)>=(WindowWidth / WindowHeight) then
      begin
          SetPenColor(clRandom);
              Circle(x-r, y-n,30);
            end
     else
      begin
      SetPenColor(clRandom);
        rectangle(x-r,y-r,x+30,y+30);
 
      end;
end;  
 
begin
     CenterWindow;
     Line(0,0,WindowWidth,WindowHeight);
     SetFontSize(25);
     TextOut(200,320, 'I');
     TextOut(600,120, 'II');
     OnMouseDown := MouseDown;
 
 end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2018, 13:22
Ответы с готовыми решениями:

Изменение размера обьектов при изменении размера графического окна
Можно ли в pascalABC.net сделать следующее: чтобы приизменении размера графического окна изменялись...

При изменении размера графического окна сохранять в текстовый файл его текущие размеры
Кто напишет пример когда при изменении размера графического окна (graphABc) программа сохраняет в...

Сделать так, чтобы при изменении размера окна, линии рисовались опять по центру
Нужно сделать так, чтобы при изменении размера окна, линии рисовались опять по центру, а фигуры...

Графика в Pascal: сохранение траектории при изменении размера экрана
Сохранение траектории при изменении размер экранаuses graphabc; ****************************...

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30861 / 20184 / 7874
Регистрация: 22.10.2011
Сообщений: 35,046
Записей в блоге: 6
23.04.2018, 15:26 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
uses
  GraphABC;
 
const
  r = 20;
  n = 5;
 
procedure
 
MouseDown(x, y, mousebutton: integer);
 
begin
 
    if (x/y)>=(WindowWidth / WindowHeight) then
      begin
          SetPenColor(clRandom);
              Circle(x-r, y-n,30);
            end
     else
      begin
      SetPenColor(clRandom);
        rectangle(x-r,y-r,x+30,y+30);
 
      end;
end;  
 
procedure DoResize;
begin
     ClearWindow;
     SetPenColor(clBlack);
     Line(0,0,WindowWidth,WindowHeight);
     SetFontSize(25);
     TextOut(200,320, 'I');
     TextOut(600,120, 'II');
end;
 
begin
     CenterWindow;
     DoResize;
     OnMouseDown := MouseDown;
     OnResize := DoResize;
  end.
, например. Если же нужно, чтобы все ранее нарисованные объекты сохранились, то нужно завести массив/список, в котором будут хранится координаты точек клика мыши, цвета фигур и признаки, какая именно фигура. А в DoResize перерисовать не только диагональ, но и все, что содержится в списке.

Только вот непонятно, как именно пересчитывать координаты фигур при изменении размера окна. Расскажешь?
0
0 / 0 / 1
Регистрация: 14.04.2015
Сообщений: 89
23.04.2018, 18:00  [ТС] 3
Сейчас приеду домой, напишу через массивы и попробую. В пересчитывание, те, чтобыли кругами и залезли в 1 сектор, должны стать квадратами
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30861 / 20184 / 7874
Регистрация: 22.10.2011
Сообщений: 35,046
Записей в блоге: 6
23.04.2018, 19:37 4
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Вот так я бы сделал через списки (с массивами возни больше)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
uses GraphABC;
 
const
  r = 20;
  n = 5;
 
type
  Fig = record
    x, y: integer;
    c: Color;
    constructor(px, py: integer; pc: Color);
    begin
      x := px; y := py; c := pc;
    end;
  end;
 
var
  L: List<Fig> := new List<Fig>;
 
procedure PaintFigure(F: Fig);
begin
  SetPenColor(F.c);
  with F do
    if (x / y) >= (WindowWidth / WindowHeight) then 
      Circle(x - r, y - n, 30)
    else 
      Rectangle(x - r, y - r, x + 30, y + 30);
end;
 
procedure MouseDown(x, y, mousebutton: integer);
begin
  var fg := new Fig(x, y, clRandom);
  PaintFigure(fg);
  L.Add(fg);
end;
 
procedure DoResize;
begin
  ClearWindow;
  SetPenColor(clBlack);
  Line(0, 0, WindowWidth, WindowHeight);
  SetFontSize(25);
  TextOut(200, 320, 'I');
  TextOut(600, 120, 'II');
  
  foreach var fg in L do
    PaintFigure(fg);
end;
 
begin
  CenterWindow;
  DoResize;
  OnMouseDown := MouseDown;
  OnResize := DoResize;
end.
1
0 / 0 / 1
Регистрация: 14.04.2015
Сообщений: 89
23.04.2018, 22:21  [ТС] 5
не поверишь, я тоже часик сидел с массивами, чет так лень стало все писать, да и много других проектов без дела лежат, воот, начал тоже через списки пробовать, спасибо!! Так даже намного проще
0
Alvin Seville
332 / 265 / 131
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
24.04.2018, 16:57 6
ELMO_much_FANCY, имеется ввиду, что объекты будут растягиваться/сжиматься при ресайзинге окна? Точнее, их координаты относительные и задаются в логической системе координат?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2018, 16:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Две линии в окне и сохранение их пропорций при изменении его размера
Здравствуйте, такая задача: На экране 2 линии. Одна горизонтальная, вторая вертикальная, обе...

Перерисовка внутри окна при изменении размера
Подскажите, когда начинаю менять размер окна с помощью мышки - тяну за угол, само окно становится...

Перерисовка графика при изменении размера виджета
Делаю программу, которая должна визуализировать алгоритмы сортировок. Для вывода создал виджет...

Не работает перерисовка pictureBox при изменении размера
Не работает перерисовка pictureBox при изменении размера. Точнее не работает если изменять размер с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.