Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 4
Регистрация: 07.10.2012
Сообщений: 123
1

Как сделать, чтобы "Робот Петька" не заходил на остальные на форме?

16.12.2012, 18:28. Показов 1051. Ответов 2
Метки нет (Все метки)

Мне говорили про функции, но я так и не понял что за функции и как ими пользоваться. Что можно прописать в программном коде для кнопок Вправо, Влево, Вниз, Вверх? Всю бошку уже сломал.
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
procedure TForm1.Button3Click(Sender: TObject);
begin
button1.Top:=button1.Top+1;
if (button1.Top>471) then
begin
button1.Top:=471;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
button1.Left:=button1.Left+1;
if (button1.left>649) then
begin
button1.Left:=649;
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
button1.Left:=button1.Left-1;
if button1.Left<0 then
begin
button1.left:=0;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
CH,CW:integer;
begin
randomize;
CH:=random(ClientHeight-speedbutton1.Height);
CW:=random(ClientWidth-speedbutton1.Width);
if (CH<0) or (CW<0) then
begin
CH:=CH+speedbutton1.Height;
CW:=CW+speedbutton1.Width;
speedbutton1.Top:=CH;
speedbutton1.Left:=CW;
end
else
speedbutton1.Top:=CH;
speedbutton1.Left:=CW;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
shape1.width:=shape1.width + 1;
shape1.height:=shape1.height + 1;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
shape1.width:=shape1.width - 1;
shape1.height:=shape1.height - 1;
end;
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Как сделать, чтобы "Робот Петька" не заходил на остальные на форме?  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2012, 18:28
Ответы с готовыми решениями:

Как сделать чтобы при присвоении флагу выбранной записи "Истина", остальные флаги автоматически становились "Ложь"?
Сценарий: 1. Ставлю галку в &quot;запись2&quot; &quot;флаг1&quot; - все флаги таблицы становятся = &quot;Ложь&quot; ...

Как сделать чтобы при нажатии на кнопку "PlayWarcraft" заходил на мой сервер через IP adress
ссылка https://code.google.com/p/wc3launcher/ ЛАунчер для сервера Как сделать чтобы при...

как сделать чтобы в форме не невозможно было ввести символы "-" и "+"
как сделать чтобы в форме не невозможно было ввести символы &quot;-&quot; или &quot;+&quot; чтобы только можно было...

Что можно сделать, чтобы робот почаще заходил?
Вопрос не про конкретный сайт. Удостоверился, что если в их каталоге то чаще. Что ещё влияет, кроме...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31075 / 20302 / 7906
Регистрация: 22.10.2011
Сообщений: 35,204
Записей в блоге: 6
16.12.2012, 19:53 2
Смотри:
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    btnRobot: TButton;
    btnUp: TButton;
    btnLeft: TButton;
    btnDown: TButton;
    btnRight: TButton;
    Button6: TButton; // Это так, просто разбросанные кнопки для теста
    Button7: TButton;
    Button8: TButton;
    btnExit: TButton;
    procedure btnExitClick(Sender: TObject);
    procedure btnUpClick(Sender: TObject);
    procedure btnDownClick(Sender: TObject);
    procedure btnLeftClick(Sender: TObject);
    procedure btnRightClick(Sender: TObject);
  private
    { Private declarations }
    function CheckRobotMove(DeltaX, DeltaY : Integer) : Boolean;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
const Step = 2;
 
procedure TForm1.btnDownClick(Sender: TObject);
begin
   if CheckRobotMove(0, Step) then
      btnRobot.Top := btnRobot.Top + Step;
end;
 
procedure TForm1.btnExitClick(Sender: TObject);
begin
   Close;
end;
 
procedure TForm1.btnLeftClick(Sender: TObject);
begin
   if CheckRobotMove(-Step, 0) then
      btnRobot.Left := btnRobot.Left - Step;
end;
 
procedure TForm1.btnRightClick(Sender: TObject);
begin
   if CheckRobotMove(Step, 0) then
      btnRobot.Left := btnRobot.Left + Step;
end;
 
procedure TForm1.btnUpClick(Sender: TObject);
begin
   if CheckRobotMove(-Step, 0) then
      btnRobot.Top := btnRobot.Top - Step;
end;
 
function TForm1.CheckRobotMove(DeltaX, DeltaY : Integer): Boolean;
var
   NewBounds, Foo : TRect;
   i : Integer;
begin
   Result := False;
   NewBounds := btnRobot.BoundsRect;
   OffsetRect(NewBounds, DeltaX, DeltaY);
 
   // Сначала проверим, не выходим ли за границы формы
   if not PtInRect(Self.ClientRect, NewBounds.TopLeft) or
      not PtInRect(Self.ClientRect, NewBounds.BottomRight) then Exit;
 
   for i := 0 to Self.ControlCount - 1 do // А потом - смотрим, не наедем ли на другой контрол
   begin
      if Controls[i] <> btnRobot then // Самого с собой сравнивать не будем
      begin
         if IntersectRect(Foo, NewBounds, Controls[i].BoundsRect) then Exit;
      end;
   end;
   Result := True; // Вернем True, если всё нормально и можно двигать робота
end;
 
end.
0
Вложения
Тип файла: zip robot.zip (244.6 Кб, 16 просмотров)
1 / 1 / 4
Регистрация: 07.10.2012
Сообщений: 123
16.12.2012, 23:34  [ТС] 3
Цитата Сообщение от UI Посмотреть сообщение
Смотри:
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    btnRobot: TButton;
    btnUp: TButton;
    btnLeft: TButton;
    btnDown: TButton;
    btnRight: TButton;
    Button6: TButton; // Это так, просто разбросанные кнопки для теста
    Button7: TButton;
    Button8: TButton;
    btnExit: TButton;
    procedure btnExitClick(Sender: TObject);
    procedure btnUpClick(Sender: TObject);
    procedure btnDownClick(Sender: TObject);
    procedure btnLeftClick(Sender: TObject);
    procedure btnRightClick(Sender: TObject);
  private
    { Private declarations }
    function CheckRobotMove(DeltaX, DeltaY : Integer) : Boolean;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
const Step = 2;
 
procedure TForm1.btnDownClick(Sender: TObject);
begin
   if CheckRobotMove(0, Step) then
      btnRobot.Top := btnRobot.Top + Step;
end;
 
procedure TForm1.btnExitClick(Sender: TObject);
begin
   Close;
end;
 
procedure TForm1.btnLeftClick(Sender: TObject);
begin
   if CheckRobotMove(-Step, 0) then
      btnRobot.Left := btnRobot.Left - Step;
end;
 
procedure TForm1.btnRightClick(Sender: TObject);
begin
   if CheckRobotMove(Step, 0) then
      btnRobot.Left := btnRobot.Left + Step;
end;
 
procedure TForm1.btnUpClick(Sender: TObject);
begin
   if CheckRobotMove(-Step, 0) then
      btnRobot.Top := btnRobot.Top - Step;
end;
 
function TForm1.CheckRobotMove(DeltaX, DeltaY : Integer): Boolean;
var
   NewBounds, Foo : TRect;
   i : Integer;
begin
   Result := False;
   NewBounds := btnRobot.BoundsRect;
   OffsetRect(NewBounds, DeltaX, DeltaY);
 
   // Сначала проверим, не выходим ли за границы формы
   if not PtInRect(Self.ClientRect, NewBounds.TopLeft) or
      not PtInRect(Self.ClientRect, NewBounds.BottomRight) then Exit;
 
   for i := 0 to Self.ControlCount - 1 do // А потом - смотрим, не наедем ли на другой контрол
   begin
      if Controls[i] <> btnRobot then // Самого с собой сравнивать не будем
      begin
         if IntersectRect(Foo, NewBounds, Controls[i].BoundsRect) then Exit;
      end;
   end;
   Result := True; // Вернем True, если всё нормально и можно двигать робота
end;
 
end.
Спасибо!!!
Только можете объяснить эти сроки: if CheckRobotMove(0, Step) then...; function CheckRobotMove(DeltaX, DeltaY : Integer) : Boolean; для чего эта процедура function TForm1.CheckRobotMove(DeltaX, DeltaY : Integer): Boolean; if not PtInRect(Self.ClientRect, NewBounds.TopLeft) or
not PtInRect(Self.ClientRect, NewBounds.BottomRight) then Exit (что значит PtInRect, Self.ClientRect, NewBounds.BottomRight); if IntersectRect(Foo, NewBounds, Controls[i].BoundsRect) then Exit; ???
А то нужно будет мне это объяснить, а как не знаю.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2012, 23:34

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как сделать, чтобы после "выпадения" предмета во 2 форме - в 1 форме этот предмет добавлялся в некий массив?
всем доброго времени суток! Делаю небольшую прогу: ее часть - &quot;открытие кейсов&quot;). так вот, у меня...

поле в форме "Студенты" - "Дата рождения". Как сделать,чтобы при переходе в данное поле автоматически появлялся календарь.
Есть поле в форме &quot;Студенты&quot; - &quot;Дата рождения&quot;. Как сделать,чтобы при переходе в данное поле...

Как в sql реализован логич.тип?Как можно в sql сделать так,чтобы были только значения "0"и"1" или "да"и"Нет"?
Хочу использовать в таблице переменные логического типа, но не нашла ничего про логический тип в...

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


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

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

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