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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2009, 20:52   #1
regman
Пользователь
 
Регистрация: 11.07.2009
Сообщений: 90
По умолчанию Постоянный фокус на одной программе

как постоянно держать программу активной?? То есть чтобы фокус с нее не уходил?? Или при потере фокуса возвращать его обратно на главное окно программы (программа однооконная)??
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64
Vertrigo
regman вне форума Ответить с цитированием
Старый 28.07.2009, 20:58   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Application.OnDeactivate(вроде так)..метод назначается в ран-тайме(потом пример дам..сейчас я не дома)

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    procedure AppDeactivate(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormDeactivate(Sender: TObject);
begin
 Form1.SetFocus;
end;

end.
вроде так(но не факт что она всегда видима будет)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Stilet; 29.07.2009 в 10:09.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.07.2009, 10:06   #3
regman
Пользователь
 
Регистрация: 11.07.2009
Сообщений: 90
По умолчанию

Не работает. Приведу пример чтобы понятнее было. Есть у меня окно формы, оно у меня всегда наверху fsStayOnTop. Но если клацнуть мышкой по рабочему столу вне формы - тогда все, окно формы больше не принимает команд нажатия клавиш, например F2. Нужно опять щелкнуть (перейти) на окно программы, чтобы оно опять принимало команды...
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64
Vertrigo
regman вне форума Ответить с цитированием
Старый 29.07.2009, 10:10   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не принимает команд нажатия клавиш, например F2.
Зарегистрируй их как Hot-Key через RegisterHotKey и не парься по поводу фокуса.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2009, 11:17   #5
regman
Пользователь
 
Регистрация: 11.07.2009
Сообщений: 90
По умолчанию

программа вообще-то помимо F2 еще должна принимать еще несколько клавиш - Backspace, Enter, Up, Down. И что, их тоже всех регить через ХотКей??
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64
Vertrigo
regman вне форума Ответить с цитированием
Старый 29.07.2009, 11:40   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
И что, их тоже всех регить через ХотКей??
Тогда хук на клавиатуру поставь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2009, 11:42   #7
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Могу со своей стороны предложить вам использовать такой код:
Код:
if (-GetKeyState(VK_F4) in [127, 128])
чтобы проверить нажата ли лЮбАя клавиша в системе. Список VK можно посмотреть в windows.pas. Вобщем с некоторыми оговорками это проще всего, чтобы хуки не ставить.

Вот я поставил таймер и выставил мин. интервал, потом написал:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (-GetKeyState(VK_F4) in [127, 128]) then close;
  if (-GetKeyState(VK_BACK) in [127, 128]) then close;
  if (-GetKeyState(VK_RETURN) in [127, 128]) then close;
  if (-GetKeyState(VK_UP) in [127, 128]) then close;
  if (-GetKeyState(VK_DOWN) in [127, 128]) then close;
end;
И соответствующие действия выполняются с/без фокуса. Такой фокус-покус...

Последний раз редактировалось BaronTreep; 29.07.2009 в 11:50.
BaronTreep вне форума Ответить с цитированием
Старый 29.07.2009, 12:41   #8
regman
Пользователь
 
Регистрация: 11.07.2009
Сообщений: 90
По умолчанию

что именно значит эта строка: in [127, 128])??

Конечно вариант интересный, но неужели так сложно реализовать постоянство формы в активном состоянии??
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64
Vertrigo
regman вне форума Ответить с цитированием
Старый 29.07.2009, 13:05   #9
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

regman - Почему вам именно постофнный фокус нужен ? Если вам необходима реакция программы на определённые клавиши то например с GetAnsyncKeyState можно узнать, нажата-ли клавиша. Используйте Virtual-Key Codes, а при нажатом состоянии клавиши функция возвращает отрицательное число.
Также можно воспользоватся советом Stilet'a
Ну а если все таки вам нужен постоянный фокус, то прийдётся учить хуки. Поскольку можно отлавливать сообщения передачи фокуса, и просто их блокировать.
Zeraim вне форума Ответить с цитированием
Старый 29.07.2009, 13:14   #10
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Цитата:
что именно значит эта строка: in [127, 128])??
GetKeyState возвращает значение с определяющим старшим битом, дабы не парится - это значит, что при нажатой кнопке это либо -127 или -128, особенности дельфи заставляют взять -GetKeyState и проверить, лежит ли она в [127, 128], т.е. равна либо тому, либо другому, такой синтаксис у нашего целевого языка, однако.

Цитата:
неужели так сложно реализовать постоянство формы в активном состоянии??
По моим представлениям это невозможно. Я имею в виду активность фокуса, процесс то постоянно активен, и может спросить клавиатуру (непосредственно через GetKeyState) нажата кнопка или нет.
BaronTreep вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянный запрос о выполнении действия (NOD32) Ronni10 Безопасность, Шифрование 2 19.12.2008 17:19
Передача данных из одной таблицы в другую, при выборе одной ячейки MickMick Microsoft Office Excel 6 06.10.2008 13:57
Acer постоянный AUTO config Carbon Компьютерное железо 4 25.04.2008 22:54
Фокус? AlexandrDel Помощь студентам 3 17.12.2006 01:54