Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Запрет фокуса form и button


Автор: Darksquall 17.3.2006, 14:50
Есть Form1 на ней лежит image1 и button1 я считываю коды клавиатуры

Код

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
kbd:=inttostr(ord(Key));
end;

procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
form1.KeyDown(Key,Shift);
end;


Однако, когда Form1 теряет фокус и он переходит на button1 то расширенные коды (стрелки tab и т.д.) в Button1KeyDown не получают, получает их только Form1. Решил я запертить button получать фокус раз так, однако нужно чтобы сам он при этом работал, т.е. мышкой мы могли на него нажать. Кто че знает опишите плиз!

P.S. Setfocus на Form1 не удается т.к. и Focuscontrol пишет что не может установить фокус на невидимое окно(хотя форму я не скрывал), может это из за image который на form1 лежит.

Автор: Romikgy 17.3.2006, 15:04
Код

procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
form1.KeyDown(Key,Shift);
form1.setfocus;
end;

так попробуй

Автор: Darksquall 17.3.2006, 16:14
Romikgy не а не работает для всех клавиш, я пробовал так уже, Button1KeyDown не в состоянии принимать расширенные коды :-(
Добавлено @ 16:21
вот он выход

блокируем Tab

Код

  private
  Procedure CMDialogKey(Var Msg:TWMKey); message CM_DIALOGKEY;

Procedure TForm1.CMDialogKey(Var Msg: TWMKey);
Begin
If NOT (ActiveControl Is TButton) Then
If Msg.Charcode = 9 Then
Msg.Charcode := 0;
inherited;
End;

procedure TForm1.Button1Enter(Sender: TObject);
begin
form1.SetFocusedControl(Form1);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
kbd:=inttostr(ord(Key));
end;


все заработало smile

странно но в данном случае KeyPreview:=true не сработал

Автор: Romikgy 17.3.2006, 16:24
Поставь у формы KeyPreview=true и будет тебе щастье

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)