12 / 11 / 3
Регистрация: 12.10.2010
Сообщений: 268
1

Классы

26.02.2011, 14:25. Показов 819. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день всем . Есть такая задача . Нужно на форме разместить панель (75 на 75) ,панели , и в ней нарисовать 3 кружочка (25 на 25 ) , красного , зеленого и желтого цветов . Все реализовать с помощью классов . По нажатию мышки на кружочек (любой), они должны выстраиваться в виде светофора . Вот мой код :
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
type
  TMySvetofor = class (TPanel)
  procedure mydown1(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  public
    Shp: array [0..2]  of TShape;
  end;
 var
  Form1: TForm1;
  MySvetofor : TMySvetofor;
 implementation
 {$R *.dfm}
 procedure tmysvetofor.mydown1(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
   var
   i:integer;
      begin
        if (sender is tshape) then
        begin
    MySvetofor.shp[0].Left:=25 ;
    MySvetofor.shp[0].Top:=0;
        end;
    if (sender is tshape)  then
    begin
    MySvetofor.shp[1].Left:=25 ;
    MySvetofor.shp[1].Top:=25;
    end;
    if (sender is tshape)  then
    begin
    MySvetofor.shp[2].Left:=25 ;
    MySvetofor.shp[2].Top:=50;
 
    end;
      end;
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 randomize;
 end;
 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 var
  i:integer;
 begin
  MySvetofor:=TMySvetofor.Create(Self);
  MySvetofor.Parent:=Self;
  MySvetofor.Width:=75;
  MySvetofor.Height:=75;
  MySvetofor.Left:= x-MySvetofor.Width div 2;
  MySvetofor.Top:=y-MySvetofor.Height div 2;
  for i:=0 to 2 do
  begin
    MySvetofor.shp[i]:=TShape.Create(MySvetofor);
    MySvetofor.shp[i].Parent:=MySvetofor;
    MySvetofor.shp[i].Width:=25;
    MySvetofor.shp[i].Height:=25;
    MySvetofor.shp[i].Shape:=stCircle;
       MySvetofor.shp[i].Left:= Random(MySvetofor.Width-25);
    MySvetofor.shp[i].Top:=Random(MySvetofor.Height-25);
      mysvetofor.Shp[i].OnMouseDown:=mysvetofor.mydown1;
  end;
 
 
  MySvetofor.shp[0].Brush.color:=clRed;
  MySvetofor.shp[1].Brush.color:=clYellow;;
  MySvetofor.shp[2].Brush.color:=clGreen;
  for i := form1.ComponentCount -1 downto componentcount do
  begin
    if (form1.Components[i] is TMySvetofor) or (form1.Components[i] is TShape) then
    begin
      (form1.Components[i] as TMySvetofor).Free;
      (form1.Components[i] as TShape).Free;
    end;
  end;
end;
end.
Проблема заключается вот в чем . Если создать панель с кружочками , а потом еще одну панель и на первой панели нажать на кружочек в ней , то в светофор превращаются кружочки второй панели , а не первой . Я выложил мой проект .
Всех заранее спасибо !
Вложения
Тип файла: rar n.rar (215.0 Кб, 15 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2011, 14:25
Ответы с готовыми решениями:

Классы
Здравствуйте, есть ли какие нибудь хорошие книги или статьи про классы? а то прочитал пару книг,...

Классы
Дядьки и Тетьки,есть таккя задачка: Создать класс TBook, экземпляры которого описывают книги,...

Классы !
Создал класс, Как написать процедуру которая вызывается при нажатии на него что то типа Onclick

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

1
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
26.02.2011, 15:57 2
Зачем у тебя 3 условия
if (sender is tshape) then
одного достаточно.

попробуй так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
   if (sender is tshape) then
   begin
 
   (TShape(sender).Parent.Components[0] as tshape).Left:=25 ;
    (TShape(sender).Parent.Components[0] as tshape).top:=0;
 
    (TShape(sender).Parent.Components[1] as tshape).Left:=25 ;
    (TShape(sender).Parent.Components[1] as tshape).top:=25;
 
    (TShape(sender).Parent.Components[2] as tshape).Left:=25 ;
    (TShape(sender).Parent.Components[2] as tshape).top:=50;
 
    end;
1
26.02.2011, 15:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2011, 15:57
Помогаю со студенческими работами здесь

Классы
Вот основная программа: unit Unit1; interface uses Windows, Messages, SysUtils,...

Классы
Кто может написать просто матрицу через классы?

классы
ребят помогите пожалуйста с задачкой: создать базовый класс шашка (для игры в шашки) в котором...

Классы
Помогите плиз Разработать программу, в которой: создать класс; в классе предусмотреть...

классы
Объект: Музыкальный альбом. Имя исполнителя, название альбома, дата выпуска. Методы: Сколько лет...

Классы
Здравстуйте, форумчане. Долгое время прогаммировал и всё обходился без классов. Сейчас хочется...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru