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

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

13.03.2015, 22:15. Просмотров 1207. Ответов 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,255
Записей в блоге: 13
13.03.2015, 22:40 #2
что за жесть???
250 Panel ?
0
FIL
Модератор
3409 / 2547 / 725
Регистрация: 19.09.2012
Сообщений: 7,908
13.03.2015, 22:44 #3
А почему ты решил, что индексы нужных тебе компонентов (Панелей) будут совпадать с индексами строк Грида?
1
Trolle9535
0 / 0 / 2
Регистрация: 23.12.2013
Сообщений: 30
13.03.2015, 23:16  [ТС] #4
А почему нет, если они названны Panel1-panel250, и ячейки в таблице всегда 0-249
0
pavel_pushok
30 / 30 / 9
Регистрация: 25.12.2014
Сообщений: 115
13.03.2015, 23:19 #5
может через findcomponent идти
0
Trolle9535
0 / 0 / 2
Регистрация: 23.12.2013
Сообщений: 30
13.03.2015, 23:21  [ТС] #6
Цитата Сообщение от pavel_pushok Посмотреть сообщение
может через findcomponent идти
А как?
0
FIL
Модератор
3409 / 2547 / 725
Регистрация: 19.09.2012
Сообщений: 7,908
13.03.2015, 23:22 #7
Цитата Сообщение от Trolle9535 Посмотреть сообщение
А почему нет
Потому что между именами компонентов и их индексами в списке компонентов нет никакой связи.
0
pavel_pushok
30 / 30 / 9
Регистрация: 25.12.2014
Сообщений: 115
13.03.2015, 23:24 #8
если я правильно понял, то номер stringgrida совпадает с номером панели, тогда через findcomponent('Panel'+inttostr(номер stringgrid cella)) as tpanel).color:= нужный цвет;
писал навскидку.
0
Trolle9535
0 / 0 / 2
Регистрация: 23.12.2013
Сообщений: 30
13.03.2015, 23:52  [ТС] #9
Связи нет но совпадать будут инфа 146%
0
Verevkin
582 / 314 / 90
Регистрация: 12.03.2015
Сообщений: 2,436
14.03.2015, 00:10 #10
Цитата Сообщение от Trolle9535 Посмотреть сообщение
У меня на форме будет ~250 Panel
ой, не надо так!
0
northener
пофигист широкого профиля
3251 / 2303 / 628
Регистрация: 15.07.2013
Сообщений: 13,591
14.03.2015, 01:16 #11
Цитата Сообщение от Trolle9535 Посмотреть сообщение
Связи нет но совпадать будут инфа 146%
Тебя обманули. Возможно по причине твоей малограмотности.
0
krapotkin
3295 / 2935 / 1015
Регистрация: 14.04.2014
Сообщений: 14,255
Записей в блоге: 13
14.03.2015, 10:33 #12
если скажешь для чего, тебе посоветуют как
вопрос про 250 панелей не должен даже обсуждаться
0
Trolle9535
0 / 0 / 2
Регистрация: 23.12.2013
Сообщений: 30
14.03.2015, 21:22  [ТС] #13
нужно сделать что то вроде мест в кинозале и что бы они закрашивались в зависимом от того заняты, забронировано или свободно
0
Verevkin
582 / 314 / 90
Регистрация: 12.03.2015
Сообщений: 2,436
14.03.2015, 21:26 #14
Цитата Сообщение от Trolle9535 Посмотреть сообщение
нужно сделать что то вроде мест в кинозале и что бы они закрашивались в зависимом от того заняты, забронировано или свободно
Canvas, руки и мозг - только эти компоненты нужны тебе, юный падаван!
0
krapotkin
3295 / 2935 / 1015
Регистрация: 14.04.2014
Сообщений: 14,255
Записей в блоге: 13
14.03.2015, 22:09 #15
Verevkin, +1
нужно просто нарисовать 250 прямоугольников нужного цвета в нужных местах
0
FIL
Модератор
3409 / 2547 / 725
Регистрация: 19.09.2012
Сообщений: 7,908
14.03.2015, 22:39 #16
Вот уж любители порисовать...
Зачем к прочим проблемам еще добавлять заморочки с отрисовкой?
0
krapotkin
3295 / 2935 / 1015
Регистрация: 14.04.2014
Сообщений: 14,255
Записей в блоге: 13
14.03.2015, 22:46 #17
for i:=0 to 249 do
DrawSeat(i);

офигеть заморочка
0
Миниатюры
Перебор элементов на форме  
FIL
Модератор
3409 / 2547 / 725
Регистрация: 19.09.2012
Сообщений: 7,908
14.03.2015, 22:55 #18
Цитата Сообщение от krapotkin Посмотреть сообщение
DrawSeat(i);
Это в Дельфи такая штатная ф-ция появилась ?)
0
krapotkin
3295 / 2935 / 1015
Регистрация: 14.04.2014
Сообщений: 14,255
Записей в блоге: 13
14.03.2015, 23:50 #19
конечно
это ужасно сложная хрень

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.DrawSeat(index:integer);
begin
  case Seat[index].State of
    stFree:paintBox1.Canvas.Brush.Color := clRed;
    stReserved;paintBox1.Canvas.Brush.Color := clBrown;
    stBusy:paintBox1.Canvas.Brush.Color := clGreen;
  end;
  paintBox1.Canvas.FillRect(Seat[index].Coords);
  paintBox1.Canvas.Brush.Color := clWhite;
  paintBox1.Canvas.FrameRect(Seat[index].Coords);
end;
0
Trolle9535
0 / 0 / 2
Регистрация: 23.12.2013
Сообщений: 30
15.03.2015, 00:01  [ТС] #20
Спасибо пробую

Добавлено через 8 минут
Цитата Сообщение от krapotkin Посмотреть сообщение
case Seat[index].State of
Извните, а не могли бы еще обЪснить что значит эта строчка для того кто в танке
0
15.03.2015, 00:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2015, 00:01
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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