Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 18.06.2019
Сообщений: 7

Правка кода

21.06.2019, 17:06. Показов 1288. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть подобное задание: Движение закрашенного круга по кромке экрана с изменением цвета при изменении направления движения.

Есть код, но он у меня что-то не работает, может конечно проблема в самой программе. Установлен Embarcadero® Delphi 10.3.

Сам код:
Delphi
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
unit Unit7;
 
interface
 
uses
 
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 
Dialogs;
 
type
 
TForm7 = class(TForm)
 
procedure FormClick(Sender: TObject);
 
procedure FormCreate(Sender: TObject);
 
procedure FormDblClick(Sender: TObject);
 
procedure FormShow(Sender: TObject);
 
private
 
{ Private declarations }
 
public
 
{ Public declarations }
 
end;
 
var
 
Form7: TForm7;
 
implementation
 
const r=150;
 
{$R *.dfm}
 
procedure TForm7.FormClick(Sender: TObject); //движении круга по экрану
 
var
 
i, j : integer;
 
begin
 
for i:=1 to screen.Width-r do // пока не достигнут конец экрана
 
begin
 
form7.Color:=clGreen; //задаем форме зеленый цвет
 
form7.Left:=i; //задаем отступ формы слева
 
sleep(5); //задержка времени
 
//form7.Top:=j;
 
end;
 
for j:=1 to screen.Height-r do // пока не достигнут низ экрана
 
begin
 
form7.Color:=clRed; // задаем форме красный цвет
 
form7.Top:=j; //задаем отступ сверху
 
sleep(5); // задержка времени
 
end;
 
for i:=screen.Width-r downto 1 do // пока не достигнуто начало экрана
 
begin
 
form7.Color:=clBlue; // задаем форме синий цвет
 
form7.Left:=i; // задаем отступ слева
 
sleep(5); //задержка времени
 
//form7.Top:=j;
 
end;
 
for j:=screen.Height-r downto 1 do // пока не достигнут верх экрана
 
begin
 
form7.Color:=clYellow; // задаем форме желтый цвет
 
form7.Top:=j; //задаем отступ сверху
 
sleep(5); // задержка времени
 
end;
 
end;
 
procedure TForm7.FormCreate(Sender: TObject); // задаем визуальную форму формы задания №3
 
var
 
formRgn : HRGN;
 
//i, j : integer;
 
begin
 
FormRgn:=createEllipticRgn(0,0,r,r);
 
SetWindowRgn(Handle, FormRgn, True);
 
end;
 
procedure TForm7.FormDblClick(Sender: TObject);
 
begin
 
close;
 
end;
 
procedure TForm7.FormShow(Sender: TObject);
 
begin
 
form7.Left:=1;
 
form7.Top:=1;
 
end;
 
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.06.2019, 17:06
Ответы с готовыми решениями:

ПРАВКА КОДА
помогите пожалуйста с кодом надо как то его дописать что бы буква жесткого диска сама определялась и подставлялась в путь откуда...

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

Правка кода
ребят не подскажите что тут исправить. я вообще е пойму может не дошел ещё <html> <head> <script> function...

12
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,431
22.06.2019, 07:52
На Delphi 7 работает.
0
0 / 0 / 0
Регистрация: 18.06.2019
Сообщений: 7
25.06.2019, 11:18  [ТС]
Странно, запустил на 7-ой, но код всё равно не отображает ничего.
0
0 / 0 / 0
Регистрация: 18.06.2019
Сообщений: 7
25.06.2019, 12:35  [ТС]
У меня это вот так отображается.
Миниатюры
Правка кода  
0
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,431
25.06.2019, 14:18
aNk19, ну вот же, отображает. Только почему не зелёная?

Добавлено через 2 минуты
Вообще, так двигать форму и другие компоненты в таком цикле не хорошо. Надо бы использовать таймер.

Добавлено через 21 минуту
Вот с таймером, например:
Delphi
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    dx, dy, minx, maxx, miny, maxy: integer;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
const 
  r = 150;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  formRgn : HRGN;
begin
  FormRgn := CreateEllipticRgn(0, 0, r, r);
  SetWindowRgn(Handle, FormRgn, True);
  dx := 0;
  dy := 0;
  minx := 0;
  maxx := Screen.Width  - r;
  miny := 60;
  maxy := Screen.Height - r - 60;
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
  Left := minx + 1;
  Top  := miny;
end;
 
procedure TForm1.FormClick(Sender: TObject);
begin
  Timer1.Enabled := not Timer1.Enabled;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 
  Left := Left + dx;
  Top  := Top  + dy;
 
  if Left >= maxx then begin
    Left := maxx - 1;
    dx :=  0;
    dy :=  1;
    Color := clRed;
  end;
 
  if Top >= maxy then begin
    Top := maxy - 1;
    dx := -1;
    dy :=  0;
    Color := clBlue;
  end;
 
  if Left <= minx then begin
    Left := minx + 1;
    dx :=  0;
    dy := -1;
    Color := clYellow;
  end;
 
  if Top <= miny then begin
    Top := miny + 1;
    dx :=  1;
    dy :=  0;
    Color := clGreen;
  end;
 
end;
 
end.
Добавлено через 24 секунды
Таймер изначально выключен. Интервал 15.
0
0 / 0 / 0
Регистрация: 18.06.2019
Сообщений: 7
25.06.2019, 14:22  [ТС]
Ну вот я и говорю, что у меня что-то не очень хорошо работает этот код.
Сможете помочь как-то его править?
0
0 / 0 / 0
Регистрация: 18.06.2019
Сообщений: 7
25.06.2019, 14:32  [ТС]
Что-то ругается на таймер
Миниатюры
Правка кода  
0
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,431
25.06.2019, 14:55
Цитата Сообщение от aNk19 Посмотреть сообщение
ругается на таймер
Может, обработчик 2 раза вставлен?
Удали сам таймер и из модуля удали всё, что с ним связано. Потом по новой добавь таймер и его обработчик двойным щелчком по таймеру. И уже в сгенерированный обработчик вставь код из сообщения выше без всяких procedure TForm1.Timer1Timer(Sender: TObject); и его начальных begin...end.

Добавлено через 4 минуты
У формы в инспекторе объектов свойство BorderStyle сделай bsNone, чтобы весь круг был залитой клиентской областью.
Или можно создаваемый регион сделать ниже и правее.
0
0 / 0 / 0
Регистрация: 18.06.2019
Сообщений: 7
25.06.2019, 15:14  [ТС]
Delphi
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
unit Unit1;
 
interface
 
uses
 
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 
Dialogs, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    dx, dy, minx, maxx, miny, maxy: integer;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
const 
  r = 150;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  formRgn : HRGN;
begin
  FormRgn := CreateEllipticRgn(0, 0, r, r);
  SetWindowRgn(Handle, FormRgn, True);
  dx := 0;
  dy := 0;
  minx := 0;
  maxx := Screen.Width  - r;
  miny := 60;
  maxy := Screen.Height - r - 60;
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
  Left := minx + 1;
  Top  := miny;
end;
 
procedure TForm1.FormClick(Sender: TObject);
begin
  Timer1.Enabled := not Timer1.Enabled;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 
  Left := Left + dx;
  Top  := Top  + dy;
 
  if Left >= maxx then begin
    Left := maxx - 1;
    dx :=  0;
    dy :=  1;
    Color := clRed;
  end;
 
  if Top >= maxy then begin
    Top := maxy - 1;
    dx := -1;
    dy :=  0;
    Color := clBlue;
  end;
 
  if Left <= minx then begin
    Left := minx + 1;
    dx :=  0;
    dy := -1;
    Color := clYellow;
  end;
 
  if Top <= miny then begin
    Top := miny + 1;
    dx :=  1;
    dy :=  0;
    Color := clGreen;
  end;
 
end;
 
end.
В настройке сделал. круг просто серый и ничего не делает(
0
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,431
25.06.2019, 15:18
Цитата Сообщение от aNk19 Посмотреть сообщение
круг просто серый и ничего не делает(
А если прицепить обработчик щелчка по форме и потом запустит и щёлкнуть по форме?
0
0 / 0 / 0
Регистрация: 18.06.2019
Сообщений: 7
25.06.2019, 15:35  [ТС]
Чуток не понимаю, куда его пихнуть(
0
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,431
25.06.2019, 15:46
aNk19, щелчок по форме и в инспекторе объектов двойной щелчок по событию OnClick, дельфи по идее подхватит обработчк, если он есть в модуле.

Ещё можно таймер оставить изначально включенный, тогда при запуске программы круг сразу начнёт бегать по экрану.
0
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,431
25.06.2019, 15:48
aNk19, вот мой проект.
Вложения
Тип файла: rar RoundOnScr.rar (5.6 Кб, 0 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.06.2019, 15:48
Помогаю со студенческими работами здесь

Правка кода
осталось несколько ошибок никак не могу испрвить using System; namespace ConsoleApplication1 { public class Program { ...

Правка кода
Здравствуйте уважаемые будущие коллеги=), читал интересную книгу хотел практики, начал писать обработчик+форму, когда дело дошло до...

Правка кода в лабораторной
Есть такой код, вроде все поправили, но блин у меня не запускается, что я делаю не так? include 'emu8086.inc' #make_COM# ; COM...

Правка кода бд Производство
Добрый вечер форумчане ! Помогите, пожалуйста, в том в чём я не силён. 1. Переписать код в форме табель чтобы отображалась подчиненная...

Правка кода, рандом
Ребята как переделать вот этот код - под чтение построчно. Что бы не загружать в память. procedure TForm1.Button1Click(Sender:...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru