Чтение онлайн

на главную - закладки

Жанры

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

Метод FindComponent (упомянутый где-то еще) только производит поиск компонентов в текущем списке Components[]. Если объект, который вы хотите найти, принадлежит другому компоненту, вы должны просканировать его список компонентов.

В зависимости от того, как вы создаете свою базу и другие компоненты, вы можете осуществить рекурсивный алгоритм поиска, который стартует в верхней части дерева собственника набора компонентов (вероятно, формы), спускаясь вниз и проходя по списку Components[] каждого вновь найденного компонента, пока желаемый объект не будет найден.

Хорошей альтернативой может служить способ, при котором

вы всегда определяете базовый компонент в качестве владельца всех других ваших «подкомпонентов» (при их создании). После этого будет работать поиск по свойству вашего базового компонента Components[]. 

CANVAS.TEXTWIDTH

Delphi 1 

Установить размер шрифта для панели можно следующим образом:

With StatusBar1.Panels[1] do begin

 Text := Edit1.Text;

 Canvas.Font.Size := StatusBar1.Font.Size;

 Width := Canvas.TextWidth(Text) + 10;

end;

Создание компонента

Delphi 1

…чтобы сгруппировать свойства наподобие Font, вам необходимо создать наследника (подкласс) TPersistent. Например:

TBoolList = class(TPersistent)

private

 FValue1: Boolean;

 FValue2: Boolean

published

 property Value1: Boolean read FValue1 write FValue1;

 property Value2: Boolean read FValue2 write FValue2;

end;

Затем, в вашем новом компоненте, для этого подкласса необходимо создать ivar. Чтобы все работало правильно, вам =необходимо= перекрыть конструктор.

TMyPanel = class(TCustomPanel)

private

 FBoolList: TBoolList;

public

 constructor Create(AOwner: TComponent); override;

published

 property BoolList: TBoolList read FBoolList write FBoolList;

end;

Затем добавьте следующий код в ваш конструктор:

constructor TMyPanel.Create(AOwner: TComponent);

begin

 inherited Create(AOwner);

 FBoolList := TBoolList.Create;

end;

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

Delphi 1

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 и имеют это свойство.

Поделиться:
Популярные книги

Курсант: назад в СССР

Дамиров Рафаэль
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Курсант: назад в СССР

Чужая семья генерала драконов

Лунёва Мария
6. Генералы драконов
Фантастика:
фэнтези
5.00
рейтинг книги
Чужая семья генерала драконов

Пышка и Герцог

Ордина Ирина
Фантастика:
юмористическое фэнтези
историческое фэнтези
фэнтези
5.00
рейтинг книги
Пышка и Герцог

Имперский Курьер. Том 5

Бо Вова
5. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Имперский Курьер. Том 5

Имя нам Легион. Том 7

Дорничев Дмитрий
7. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 7

Возвышение Меркурия

Кронос Александр
1. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия

Законы Рода. Том 11

Андрей Мельник
11. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 11

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Вираж бытия

Ланцов Михаил Алексеевич
1. Фрунзе
Фантастика:
героическая фантастика
попаданцы
альтернативная история
6.86
рейтинг книги
Вираж бытия

Отмороженный 11.0

Гарцевич Евгений Александрович
11. Отмороженный
Фантастика:
боевая фантастика
рпг
попаданцы
фантастика: прочее
фэнтези
5.00
рейтинг книги
Отмороженный 11.0

История "не"мощной графини

Зимина Юлия
1. Истории неунывающих попаданок
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
История немощной графини

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Газлайтер. Том 15

Володин Григорий Григорьевич
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Газлайтер. Том 15

Призыватель нулевого ранга

Дубов Дмитрий
1. Эпоха Гардара
Фантастика:
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга