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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2015, 08:15   #1
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию Снять фокус с элемента

Приветствую.

Имеется: форма, на которой расположены TImage и TScrollBar.
TScrollBar единственный enabled-компонент.

Проблема: после его использования фокус остается на нем, и, соответственно, он перехватывает нажатия на курсорные клавиши.

Задача: снять с него фокус, в идеале перекинув его на форму в целом.

Пробовал:
Код:
  SintForm.SetFocus;
Код:
  SelectNext(ScrollBar1,true,false);
Эффект нулевой.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 27.10.2015, 08:43   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ActiveControl:=nil; не подходит?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.10.2015, 08:51   #3
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Практически то, что нужно, однако вылезла проблема с попаданием скролла в фокус при длительном зажимании кнопки. Это победимо?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 27.10.2015, 08:56   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Проблема: после его использования фокус остается на нем, и, соответственно, он перехватывает нажатия на курсорные клавиши.
А как там на счёт KeyPreview у формы?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 27.10.2015, 09:08   #5
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Цитата:
А как там на счёт KeyPreview у формы?
Установлено в False
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 27.10.2015, 09:42   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Присвой true. Отпадёт вот это:
Цитата:
Проблема: после его использования фокус остается на нем, и, соответственно, он перехватывает нажатия на курсорные клавиши.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 27.10.2015, 11:05   #7
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

min@y™, не отпало. Как я понял, KeyPreview работает для события OnKeyPress. А нажатие стрелок обрабатывается в OnKeyDown.

Сделал костыльно:
Код:
procedure TSintForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
//Какая-то обработка
  Key := VK_SPACE;
end;
Фокус на скролл так и перескакивает, зато скролл не бегает.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 27.10.2015, 11:14   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Ты прав.
If KeyPreview is true, keyboard events occur on the form before they occur on the active control. (The active control is specified by the ActiveControl property.)

If KeyPreview is false, keyboard events occur only on the active control.

Navigation keys (Tab, BackTab, the arrow keys, and so on) are unaffected by KeyPreview because they do not generate keyboard events. Similarly, when a button has focus or when its Default property is true, the Enter key is unaffected by KeyPreview because it does not generate a keyboard events.

Сорри.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
снять защиту maksim_serg Windows 11 20.12.2014 16:09
[XML] Нахождение аттрибута элемента по значению дочернего элемента. Banavia C# (си шарп) 10 29.07.2013 00:48
Фокус выбранного элемента Defunate C# (си шарп) 2 06.02.2012 10:14
Как снять фокус? MyLastHit Общие вопросы Delphi 2 20.08.2010 23:03
Си -Расположить элементы в порядке возрастания от первого нулевого элемента до отрицательного элемента Freia Помощь студентам 17 13.12.2009 15:41