Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2014, 10:29   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Как выполнить действия с компонентом?

Добрый день!
Если известно имя компонента, которое хранится в строковой переменной, то как можно сделать что-то с компонентом, имя которого хранится в переменной, не нажимая кнопкой мыши на это компоненте? Например, изменить цвет или изменить ширину компонента или его высоту. Как бы не "трогая" сам компонент на форме, а просто зная его имя.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 09.08.2014, 10:47   #2
MODBUS
Пользователь
 
Регистрация: 01.08.2014
Сообщений: 66
По умолчанию

Код:
var
  i:integer;
begin
  for i:=0 to ComponentCount-1 do
   if Components[i].Name = 'Panel2' then (Components[i] as tpanel).color:= clred;
MODBUS вне форума Ответить с цитированием
Старый 09.08.2014, 10:54   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Сообщение от MODBUS Посмотреть сообщение
Код:
var
  i:integer;
begin
  for i:=0 to ComponentCount-1 do
   if Components[i].Name = 'Panel2' then (Components[i] as tpanel).color:= clred;
Не работает. Ничего не изменяется на компоненте цвет. Если это важно, то я использую компоненты Alpha Controls.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 09.08.2014 в 10:56.
artemavd вне форума Ответить с цитированием
Старый 09.08.2014, 11:00   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
var c:TComponent;
...
c:=FindComponent('Компонент1');
if c<>nil then begin
 TPanel(c).чет делаем;
end;
Цитата:
я использую компоненты Alpha Controls.
А ты типы привел правильно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.08.2014, 11:08   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
var c:TComponent;
...
c:=FindComponent('Компонент1');
if c<>nil then begin
 TPanel(c).чет делаем;
end;
А ты типы привел правильно?
Данный код тоже не работает.
Типы? В смысле? Поясни.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 09.08.2014, 12:28   #6
MODBUS
Пользователь
 
Регистрация: 01.08.2014
Сообщений: 66
По умолчанию

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

Дополнено

...например для скроллбара:
Код:
var
  i:integer;
begin
  for i:=0 to ComponentCount-1 do
   if Components[i].Name = 'bla-bla-bla' then (Components[i] as TsScrollBar).Position:= 20;
p.s.: и вообще, подход изменить бы ...имхо рациональнее иметь дело с динамическим набором объектов и обращаться к нужному по индексу в наборе, без переборов и поисков.

Последний раз редактировалось MODBUS; 09.08.2014 в 12:44.
MODBUS вне форума Ответить с цитированием
Старый 09.08.2014, 13:26   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

А реал пименить, США запретило?
Бл..., а ох.....ю. Молодёжь, совершенно думать разучилась.
Ну, мы умрём и чё?, каменный век?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 09.08.2014, 14:03   #8
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Есть такое замечательное в TComponent и называется FindComponent. Если, компонент принадлежит форме, то надо иметь ещё и дескриптор этой формы(Handle), его получаем через FindWindow. Дальше приводим типы к типу TForm. А уже из него вызываем FindComponent, который приводим к типу компонента или TWinControl. А у него уже изменяем свойства.
Если действия происходят в классе формы, на которой компонент, то искать форму не надо. Можно сразу FindComponent.
Пример кода:
Код:
//процедура описанная в классе формы.
begin
(FindComponent('Имя_Компонента') as TWinControl).Height:=0; //изменяем свойство Height у компонента. 
//P.S. Компонент должен быть наследником TWinControl. 
end;
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 09.08.2014, 14:06   #9
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

О ещё, проверяй наличие компонента. FindComponent выдаст nil, если компонента нет(он не создан!). Так же можно проверить и форму. Функция FindWindow выдаст 0, если форма не создана.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 09.08.2014, 14:40   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Типы? В смысле? Поясни.
Ну приведение типов. Какой компонент ты хочешь обрабатывать?
Покажи пример своего кода.
Цитата:
О ещё, проверяй наличие компонента. FindComponent выдаст nil
Если что в своем примере я это учел.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскль,Дан массив A(n), разработать программу, которая позволяет выполнить с массивом следующие действия икше Помощь студентам 1 01.12.2012 20:07
Используя компоненту Edit выполнить следующие действия. Аделинка Помощь студентам 2 31.03.2011 14:42
Выполнить действия при закрытии программы Lauri Общие вопросы Delphi 2 08.02.2011 02:34
Выполнить действия над машинными кодами Dimext Общие вопросы C/C++ 1 25.10.2010 18:46
Выполнить действия после отображения формы zhefran Общие вопросы Delphi 15 14.08.2008 16:50