Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 23.12.2013
Сообщений: 30

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

13.03.2015, 22:15. Показов 7140. Ответов 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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.03.2015, 22:15
Ответы с готовыми решениями:

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

Перебор всех TStringGrid на форме
Доброе! Пытаюсь сделать что-то в этом духе: for i := 1 to ComponentCount - 1 do if Copy(Components.Name, 1, 8) = 'sgPoints' then...

Перебор элементов управления на форме
Нужно подобрать элементы (button, label), чтото вроде этого: foreach (int i in Label) { MessageBox.Show(label.Text); }

21
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
15.03.2015, 00:27
Лучший ответ Сообщение было отмечено 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
Нарушитель
10899 / 5833 / 1289
Регистрация: 12.03.2015
Сообщений: 26,921
15.03.2015, 02:28
Цитата Сообщение от krapotkin Посмотреть сообщение
главная форма
на ней только pb1:TPaintBox;
так проще и удобней. народ не верит, пока не попробует.
для кинозала я прогу не писал, но могу дать исходник проги решени судоку.
Миниатюры
Перебор элементов на форме  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2015, 02:28

Перебор Widget на форме
Здравствуйте, подскажите как перебрать динамически созданые формы, для того что бы считать с каждой формы label. FrameFlash *ff =...

Перебор кнопок на форме
Работаем в visual studio 2012 express на с#,есть кнопки с названиями btn1 btn2 btn3 ...,есть цикл for,нужно чтобы бралась кнопка...

Перебор всех frame на форме
Здравствуйте. Подскажите, пожалуйста, каким образом перебрать все frame на форме. Мне их нужно сделать все невидимыми. А показывать...

Перебор и сравнение позиций компонентов на форме
Рубрика моих вопросов постоянно пополняется да-да :D Всем доброго вечера.Хорошего настроения. Перейду к очередному вопросу: ...

Перебор компонент на форме: неожиданный тупик (VB 2005)
Если мне нужно перебрать все контролы на форме Frm, то понятно: For Each ... In Frm.ControlsОднако, мне вдруг понадобилось перебрать...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru