Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Видеокурс программиста и крэкера 5D 2O17
(актуальность: октябрь 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Циклический опрос компонентов

Сидит вечером программист у компота и третий час подряд кликает на свою мышь. Сзади подходит жена:
- Дорогой, может меня лучше покликаешь?
Программист, бешено колотя кулаком по мыши:
- Блин, кликалка у меня не работает.


 procedure TForm1.FormCreate(Sender: TObject);
 var
   I: integer;
 begin
   for I:= 0 to ComponentCount -1 do
     if (Components[I] IS TEdit) then
       (Components[I] AS TEdit).{Вашпараметр} := {ваше значение};
 end;
 

Если вам необходимо идентифицировать конкретный набор edit-компонентов, поместите их на панели и сделайте примерно так:


 procedure TForm1.FormCreate(Sender: TObject);
 var
   I: integer;
 begin
   with MyPanel do
     for I:= 0 to ControlCount -1 do
       if (Controls[I] IS TEdit) then
         (Controls[I] AS TEdit).{Вашпараметр} := {Ваше значение};
 end;
 

В контексте примера, Edit1, Edit2 и т.д. есть то же самое, что и Edit[1], Edit[2]. Если вы хотите иметь доступ к серии элементов управления как к элементам массива, поместите их в TList.


 MyArr := TList.Create;
 MyArr.Add(Edit1);
 MyArr.Add(Edit2);
 
 ...
 
 For i := 0 To MyArr.count - 1 Do
   (MyArr.items[i] As TEdit).Enabled := False;
 
 MyArr.Free;
 
 
 procedure TForm1.FormCreate(Sender: TObject);
 var
   I: Integer;
 begin
   for I := 0 to ComponentCount -1 do
     if Components[I] is TEdit then
       TEdit(Components[I]).Whatever := 10;
 end;
 

Для получения доступа используйте:


 TButton(mylist.items[i]).property := sumpin;
 

или


 TButton(mylist.items[i]).method;
 

Это хорошее решение для пакетной обработки компонентов или для получения доступа при линейном способе. Для решения вашей проблемы есть еще более легкое решение, которое требует предварительной работы в режиме проектирования. Установите свойство tag и получите преимущество в том, что все компоненты являются производными от TComponent и имеют это свойство.


 Procedure TMyForm.MyButtonHandler(Sender: TObject);
 Begin
   Case (Sender As TComponent).Tag Of
     1: { что-то делаем }
     2: { делаем что-то еще }
     .
     .
   End;
 End;
 

Просто укажите в событии OnClick на MyButtonHandler для тех кнопок, в которых вы хотите использовать общий обработчик события.




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS