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

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

13.03.2015, 22:15. Просмотров 1289. Ответов 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.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2015, 22:15
Ответы с готовыми решениями:

Перебор всех TStringGrid на форме
Доброе! Пытаюсь сделать что-то в этом духе: for i := 1 to ComponentCount - 1...

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

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

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

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

21
krapotkin
3420 / 3027 / 1047
Регистрация: 14.04.2014
Сообщений: 14,689
Записей в блоге: 15
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
987 / 512 / 133
Регистрация: 12.03.2015
Сообщений: 3,518
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

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

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

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


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

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

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