Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Trolle9535
0 / 0 / 2
Регистрация: 23.12.2013
Сообщений: 30
#1

Перебор элементов на форме - Delphi

13.03.2015, 22:15. Просмотров 1206. Ответов 21
Метки нет (Все метки)

У меня на форме будет ~250 Panel и каждая должна окращиватся в соответствующий ей цвет в зависимости от значения ( 0-серый, 1-желтый, 2-красый) значения берутся из таблицы. Написал что, то вроде тестового варианта на 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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids;
 
type
  TForm1 = class(TForm)
    btn1: TButton;
    StringGrid1: TStringGrid;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    GroupBox1: TGroupBox;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.btn1Click(Sender: TObject);
var i:Integer;
begin
StringGrid1.Cells[0,0]:='1';
StringGrid1.Cells[0,1]:='2';
StringGrid1.Cells[0,2]:='0';
for i := 0 to ComponentCount - 1 do
 begin
   if Components[i] is TPanel then
    begin
      if StringGrid1.Cells[0,i] = '0' then (Components[i] as TPanel).Color:=clSilver
      else
        if StringGrid1.Cells[0,i] = '1' then (Components[i] as TPanel).Color:=clYellow
        else
          if StringGrid1.Cells[0,i] = '2' then (Components[i] as TPanel).Color:=clRed;
    end;
 end;
end;
 
end.

http://www.cyberforum.ru/delphi-beginners/thread614129.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2015, 22:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перебор элементов на форме (Delphi):

Перебор таблиц на другой форме
Здравствуйте, скажите как правильно написать поиск таблицы и действие с ней на...

Полный перебор и сокращенный перебор, путем исключения одного цикла
1) Разработать на основе метода полного перебора программу razmen1 для решения...

Перебор элементов матрицы
Дана матрица A(N*M). Программа должна перебрать все возможные сочетания выбора...

Перебор элементов матрицы
Есть двумерный массив, ячейки которого содержат булевые переменные. Массив...

Перебор всех элементов EnumChildWnd
Всем привет. Вот столкнулся с такой проблемой: Вот пробую перебрать все...

21
krapotkin
3295 / 2935 / 1015
Регистрация: 14.04.2014
Сообщений: 14,254
Записей в блоге: 13
15.03.2015, 00:27 #21
Лучший ответ Сообщение было отмечено Trolle9535 как решение

Решение

у меня получилось вот так
главная форма
на ней только pb1:TPaintBox;

Кликните здесь для просмотра всего текста
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
unit Unit2;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, CinemaTypes;
 
type
 
 
  TForm2 = class(TForm)
    pb1: TPaintBox;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure pb1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure pb1Paint(Sender: TObject);
  private
    procedure drawSeat(Seat:TSeat);
    function MouseToSeat(x,y:integer):TSeat;
  public
    Seats:TSeatList;
  end;
 
var
  Form2: TForm2;
 
 
implementation
 
{$R *.dfm}
 
procedure TForm2.FormCreate(Sender: TObject);
var
  seat:TSeat;
begin
  seats:=TSeatList.Create(true);
 
  seat := TSeat.Create;
  seat.Coords := Rect(30,30,70,70);
  seats.Add(seat);
 
  seat := TSeat.Create;
  seat.Coords := Rect(80,30,120,70);
  seats.Add(seat);
end;
 
procedure TForm2.FormDestroy(Sender: TObject);
begin
  FreeAndNil(Seats);
end;
 
function TForm2.MouseToSeat(x, y: integer): TSeat;
var i:integer;
begin
  for i := 0 to Seats.Count-1 do
  begin
    result:=Seats[i];
    if PtInRect(Result.Coords, point(X,Y)) then
    begin
      exit;
    end;
  end;
  result := Nil;
end;
 
procedure TForm2.pb1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  seat:TSeat;
begin
  seat := MouseToSeat(x,y);
  if seat<>NIL then
    pb1.Cursor := crHandPoint
  else
    pb1.Cursor := crDefault;
end;
 
procedure TForm2.drawSeat(Seat:TSeat);
begin
 
  case seat.State of
    stFree: pb1.Canvas.Brush.Color := clMoneyGreen;
    stReserved: pb1.Canvas.Brush.Color := clSilver;
    stBusy: pb1.Canvas.Brush.Color := clGray;
  end;
  pb1.Canvas.FillRect(seat.Coords);
  pb1.Canvas.Brush.Color := clWhite;
  pb1.Canvas.FrameRect(seat.Coords);
end;
 
procedure TForm2.pb1Paint(Sender: TObject);
var
  i: Integer;
begin
  pb1.Canvas.Brush.Color := clWhite;
  pb1.Canvas.FrameRect(pb1.ClientRect);
 
  for i := 0 to Seats.Count-1 do
    drawSeat(Seats[i])
end;
 
end.

и юнит с описанием классов
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
unit CinemaTypes;
 
interface
uses System.Types, System.Generics.Collections;
 
type
  TSeatState = (stFree, stReserved, stBusy);
 
  TSeat = class
  public
    Coords:TRect;
    State:TSeatState;
    Row:Integer;
    Num:Integer;
  end;
 
  TSeatList = class(TObjectList<TSeat>)
  end;
 
implementation
 
end.
1
Verevkin
581 / 313 / 90
Регистрация: 12.03.2015
Сообщений: 2,435
15.03.2015, 02:28 #22
Цитата Сообщение от krapotkin Посмотреть сообщение
главная форма
на ней только pb1:TPaintBox;
так проще и удобней. народ не верит, пока не попробует.
для кинозала я прогу не писал, но могу дать исходник проги решени судоку.
0
Миниатюры
Перебор элементов на форме  
15.03.2015, 02:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2015, 02:28
Привет! Вот еще темы с решениями:

Как сделать перебор элементов массива?
Здравствуйте, Попробую как можно понятнее объяснить мой вопрос. Пользователей...

Создать на форме кнопку очистки элементов управления Label от старых данных и кнопку заполнения этих элементов с
Создать на форме кнопку очистки элементов управления Label от старых данных и...

Видимостью элементов на форме
Народ помогите. На форме есть MainMenu, Edit, при инсталляции программы...

Перемещение элементов на форме
Братья по разуму помогите пожалуйста решить такую вот праблему: К примеру есть...


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

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

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