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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2013, 16:52   #1
Rusland
Пользователь
 
Регистрация: 13.04.2010
Сообщений: 16
По умолчанию Определение активного/выдленного компонента

Добрый день.
Есть несколько Edit-ов, Button-ов, ComboBox-ов, при нажатии кнопки F1 в них должны вызываться моя процедура ShowTooltip. Писать для каждого Edit-а отдельный вызов этой процедуры мне кажется неправильным.
Я решил повесить один обработчик нажатия F1 (OnKeyDown) на саму форму.
Теперь надо только определить какой из компонентов в фокусе.

Я попытался сделать так (определяю имя компонента)
Код:
procedure TFrm1Main.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if (Key=VK_F1) then begin
   	 Caption:=FindControl(GetFocus()).Name;
   end;
end;
Все работает, но если фокус находится на компоненте TComboBox, то вылетает AccessViolation.

Как это правильно искать активный компонент?
Rusland вне форума Ответить с цитированием
Старый 07.02.2013, 16:56   #2
Rusland
Пользователь
 
Регистрация: 13.04.2010
Сообщений: 16
По умолчанию

Прошу прощение, друзья, оказывается вот так надо было делать:
Код:
if (Key=VK_F1) then ActiveControl.Name;
Rusland вне форума Ответить с цитированием
Старый 07.02.2013, 16:57   #3
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

а если:
Код:
procedure TFrm1Main.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_F1 then 
    if ((Sender as TObject) is TEdit) OR ((Sender as TObject) is TButton) OR ((Sender as TObject) is TComboBox) then
      Caption := (Sender as TObject).Name;
end;
(не проверял, но думаю идея ясна)
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 07.02.2013, 17:22   #4
Rusland
Пользователь
 
Регистрация: 13.04.2010
Сообщений: 16
По умолчанию

Yurk@, так не получится, так как Sender всегда выдает саму Форму.
И
Код:
Caption := (Sender as TObject).Name;
не работает.
Тогда уж
Код:
Caption := (Sender as TComponent).Name;
Но спасибо за желание помочь
Rusland вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
EasyListView - вставка своего компонента куда-нибудь, или аналог компонента ListView Человек_Борща Компоненты Delphi 12 11.02.2013 00:01
определение активного окна DeDoK Общие вопросы Delphi 3 13.12.2010 19:07
Определение размеров компонента и положения по хендлу Marsel737 Общие вопросы Delphi 10 03.05.2010 00:53