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

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

13.03.2015, 22:15. Просмотров 1253. Ответов 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
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,590
Записей в блоге: 15
13.03.2015, 22:40 #2
что за жесть???
250 Panel ?
0
FIL
Модератор
3417 / 2553 / 726
Регистрация: 19.09.2012
Сообщений: 7,922
13.03.2015, 22:44 #3
А почему ты решил, что индексы нужных тебе компонентов (Панелей) будут совпадать с индексами строк Грида?
1
Trolle9535
0 / 0 / 0
Регистрация: 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 / 0
Регистрация: 23.12.2013
Сообщений: 30
13.03.2015, 23:21  [ТС] #6
Цитата Сообщение от pavel_pushok Посмотреть сообщение
может через findcomponent идти
А как?
0
FIL
Модератор
3417 / 2553 / 726
Регистрация: 19.09.2012
Сообщений: 7,922
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 / 0
Регистрация: 23.12.2013
Сообщений: 30
13.03.2015, 23:52  [ТС] #9
Связи нет но совпадать будут инфа 146%
0
Verevkin
868 / 414 / 108
Регистрация: 12.03.2015
Сообщений: 2,992
14.03.2015, 00:10 #10
Цитата Сообщение от Trolle9535 Посмотреть сообщение
У меня на форме будет ~250 Panel
ой, не надо так!
0
northener
пофигист широкого профиля
3419 / 2319 / 630
Регистрация: 15.07.2013
Сообщений: 13,710
14.03.2015, 01:16 #11
Цитата Сообщение от Trolle9535 Посмотреть сообщение
Связи нет но совпадать будут инфа 146%
Тебя обманули. Возможно по причине твоей малограмотности.
0
krapotkin
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,590
Записей в блоге: 15
14.03.2015, 10:33 #12
если скажешь для чего, тебе посоветуют как
вопрос про 250 панелей не должен даже обсуждаться
0
Trolle9535
0 / 0 / 0
Регистрация: 23.12.2013
Сообщений: 30
14.03.2015, 21:22  [ТС] #13
нужно сделать что то вроде мест в кинозале и что бы они закрашивались в зависимом от того заняты, забронировано или свободно
0
Verevkin
868 / 414 / 108
Регистрация: 12.03.2015
Сообщений: 2,992
14.03.2015, 21:26 #14
Цитата Сообщение от Trolle9535 Посмотреть сообщение
нужно сделать что то вроде мест в кинозале и что бы они закрашивались в зависимом от того заняты, забронировано или свободно
Canvas, руки и мозг - только эти компоненты нужны тебе, юный падаван!
0
krapotkin
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,590
Записей в блоге: 15
14.03.2015, 22:09 #15
Verevkin, +1
нужно просто нарисовать 250 прямоугольников нужного цвета в нужных местах
0
FIL
Модератор
3417 / 2553 / 726
Регистрация: 19.09.2012
Сообщений: 7,922
14.03.2015, 22:39 #16
Вот уж любители порисовать...
Зачем к прочим проблемам еще добавлять заморочки с отрисовкой?
0
krapotkin
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,590
Записей в блоге: 15
14.03.2015, 22:46 #17
for i:=0 to 249 do
DrawSeat(i);

офигеть заморочка
0
Миниатюры
Перебор элементов на форме  
FIL
Модератор
3417 / 2553 / 726
Регистрация: 19.09.2012
Сообщений: 7,922
14.03.2015, 22:55 #18
Цитата Сообщение от krapotkin Посмотреть сообщение
DrawSeat(i);
Это в Дельфи такая штатная ф-ция появилась ?)
0
krapotkin
3397 / 3009 / 1042
Регистрация: 14.04.2014
Сообщений: 14,590
Записей в блоге: 15
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 / 0
Регистрация: 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

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

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

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


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

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

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