Delphi обратиться к компоненту по имени

Имена

Delphi обратиться к компоненту по имени


Smile ( 2009-01-06 19:31 ) [1]

Так это не по номеру, а по имени
🙂


Семён ( 2009-01-06 19:38 ) [2]

> Так это не по номеру, а по имени
извините, не верно выразился!
Так как бы мне «добавлять» при обращении число к названию компонента?


Denis__ © ( 2009-01-06 19:43 ) [3]


Семён ( 2009-01-06 19:49 ) [4]

> Семён (06.01.09 19:49) [4]
> как вот этот [i] мне прибавить?

var
B: TButton;
begin
for i := 1 to 3 do
begin
B := FindComponent(«Button» + IntToStr(i));
if B <> nil then
B.Caption := «Ура!»;
end;
end;


Семён ( 2009-01-06 20:56 ) [6]

Большое СПАСИБО, Юрий!


Denis__ © ( 2009-01-06 21:30 ) [7]

var
B: TComponent;
begin
for i := 1 to 3 do
begin
B := FindComponent(«Button» + IntToStr(i));
if B <> nil then
if B.ClassName = «TButton» then
(B as TButton).Caption := «Ура!»;
end;
end;

Юрий, как Вам кажется, есть в этом коде ошибки/то чего лучше не делать? (Пытаюсь учиться всегда:))


Правильный$Вася ( 2009-01-06 21:41 ) [8]


Denis__ © ( 2009-01-06 21:46 ) [9]

Но от чего-то отталкиваться надо)))
Заменить TButton на TMyCoolComponent не проблема)) Но Семён видимо не пытался этот код проверить, ибо вариант[5] не компилится. TButton <> TComponent 🙂


> есть в этом коде ошибки/то чего лучше не делать?

эту проверку

> if B.ClassName = «TButton» then
> (B as TButton).Caption := «Ура!»;

лучше делать через IS, поскольку нет гарантий
а то можно на exception вывалиться при AS


Юрий Зотов © ( 2009-01-06 21:47 ) [11]

> Denis__ © (06.01.09 21:30) [7]

Так будет немного лучше:

var
B: TComponent;
begin
for i := 1 to 3 do
begin
B := FindComponent(«Button» + IntToStr(i));
if B is TButton then // Это быстрее, чем сравнивать строку ClassName
TButton(B).Caption := «Ура!»; // Приведение типа быстрее, чем AS
end;
end;

Читайте также:  Как найти мастера на ярмарке мастеров по имени

Но вообще, код все равно неоптимальный. Было бы лучше один раз запомнить ссылки на нужные кнопки в массиве, а потом вместо вызова FindComponent сразу брать кнопку по ее индексу.

Хотя, конечно, выбор наилучшего решения обычно зависит от задачи.


Denis__ © ( 2009-01-06 21:49 ) [12]

Спасибо, Юрий. Что-то у меня гигантские пробелы)) про is не знал.


Юрий Зотов © ( 2009-01-06 21:52 ) [13]

Тут неявно используются еще 2 момента:

1. if B is TButton заодно делает проверку на nil. Если компонент не был найден, условие не выполнится.

2. Если условие выполнено, то компонент точно найден и он точно кнопка. Поэтому приведение типа будет безопасным.


Anatoly Podgoretsky © ( 2009-01-06 21:56 ) [14]

> Denis__ (06.01.2009 21:30:07) [7]

Если нужна такая гарантия, то

var
B: TComponent;
begin
for i := 1 to 3 do
begin
B := FindComponent(«Button» + IntToStr(i));
if B is <> TButton then
TButton(B).Caption := «Ура!»;


> 1. if B is TButton заодно делает проверку на nil. Если компонент
> не был найден, условие не выполнится.

Это я проверил, спасибо:) Странно мне показалось, теперь все понятно.


Denis__ © ( 2009-01-06 22:01 ) [16]

[Error] Unit1.pas(34): Expression expected but «<>» found

Что я делаю не так?


Anatoly Podgoretsky © ( 2009-01-06 22:03 ) [17]


> Юрий Зотов © (06.01.09 21:47) [11]

Пока я по NNTP форум читал, Юрий уже успел ответить исправленым кодом, практически буква в букву.


Anatoly Podgoretsky © ( 2009-01-06 22:05 ) [18]


> Что я делаю не так?

В каком коде, если в моем, то добавь два END в конце. Я привел только значимую часть.


Denis__ © ( 2009-01-06 22:06 ) [19]


Denis__ © ( 2009-01-06 22:10 ) [20]

Читайте также:  Назовите имя и фамилию первого космонавта в мире

Ну это-то я знаю)) Не совсем ламер. У вас там if B is <> TButton then


Anatoly Podgoretsky © ( 2009-01-06 22:44 ) [21]

> Denis__ (06.01.2009 22:10:20) [20]

Опа, это осталось при переделки китайским методом.
Глаза не видят очевидного.


Denis__ © ( 2009-01-06 22:49 ) [22]


Anatoly Podgoretsky © ( 2009-01-06 23:11 ) [23]

Оно самое, очень опасная вещь.


Германн © ( 2009-01-07 01:50 ) [24]


> Было бы лучше один раз запомнить ссылки на нужные кнопки
> в массиве, а потом вместо вызова FindComponent сразу брать
> кнопку по ее индексу.
>

+1

Вот никогда ещё не использовал функцию FindComponent. И не жалею об этом. 🙂

Источник

Delphi обратиться к компоненту по имени

Всем доброго вечера, как можно обратиться к форме, зная имя формы,идентификатор, или имя класса от которого она созданна?

через написание имени ее.


Игорь Шевченко © ( 2009-12-06 00:55 ) [2]


Германн © ( 2009-12-06 01:01 ) [3]


> Тимофей123 (05.12.09 23:52)

Ты все-таки сначала разберись с заданием преподавателя. А то пока бред спрашиваешь.


Юрий Зотов © ( 2009-12-06 12:11 ) [4]


Anatoly Podgoretsky © ( 2009-12-06 13:52 ) [6]

> Тимофей123 (06.12.2009 13:50:05) [5]

Это он тебя к армии готовит.


KilkennyCat © ( 2009-12-06 13:54 ) [7]


2. Доступ организовать через свойства.
> Мне не понятно как реализовать 1 и 3 пункт и что значит
> организовать доступ через свойства

Надо запомнить такой прием: мне все понятно, за исключением (дальше перечисляются все пункты) 🙂


KilkennyCat © ( 2009-12-06 14:00 ) [8]

Источник

Обращение к объекту не по индексу, а по имени

Смысл в том, что мы создаём класс, добавляем его в Лист PF_Buttons, в каждом классе есть список динамически созданных кнопок в «List:TList ;»

Далее идёт обращение, допустим:

Обращение к объекту в зависимости от имени, передаваемого в функцию
Добрый день. У меня есть форма с TDataGrid и несколькими TImage. Есть процедура, которая.

Читайте также:  С каким театром связано имя островского

Обращение к компоненту по индексу
Помогите а как можно обратиться к компоненту frxDBDataset1″Имя поля в таблице access» по индексу.

Обращение к объекту не по полю Name.
Ситуация такова: на форме есть шесть компонентов типа TShape(Shape1. Shape6). Как скопировать в.

Ну ты же сам их и использовал, объявив класс
TList

Из того кода, что привёл ранее, если к словарю добавить ещё список кнопок(с другими Caption), и запросить Caption любой кнопки из первого списка, то он почему то выводит Caption кнопки из второго списка.

Какой-то бардак у тебя творится со списками.

Выкинь вообще класс TButtons и пользуй вот этот:

TButtonListsNamedList = TDictionary ; // именованый список списков кнопок

Да, класс тут это бред, удалил его. Но проблема осталась. В мемо1 добавляется 2 строки ’10’;

«// именованый список списков кнопок» да, все верно, именно это я и хотел (в простом варианте)

Добавлено через 1 минуту
А если ты имеешь ввиду заменить TList на массив, то по моему TList тот же самый одномерный массив, только с большим функционалом.

qwertehok, для создание интерфейса при старте программы.

Добавлено через 3 минуты
Кажется я понял:
Когда мы добавляем в словарь

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Обращение по имени и индексу
Ребята, ткните носом, как реализовать следующее: Есть список объектов Items. namespace.

Обращение к объекту по имени
В ходе скрипта генерируется какое-то количество объектов img с name вида n1,n2 и т.д. Я хочу.

Обращение к объекту по имени
Такая ситуация: Есть много listbox’ов и в один прекрасный момент когда нажимается кнопка TButton на.

Обращение к объекту не зная его имени
Есть у нас объект tefal в объекте machines, и у него есть метод run(); Зная название объекта.

Источник

Оцените статью
Имя, Названия, Аббревиатуры, Сокращения
Добавить комментарий

Adblock
detector