Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обработать Shift+Left, Ctrl+Left, Alt+Left / 23 сообщений из 23, страница 1 из 1
12.11.2003, 13:13
    #32321370
Обработать Shift+Left, Ctrl+Left, Alt+Left
У меня такая идея:
При нажатом Ctrl+Left происходят некие действия, а при Ctrl+Right некие другие действия. При нажатии просто на Left или Right ничего не делается.

Что-то не пойму как поймать событие Ctrl+Left при Form1.KeyPreview = true.
Событие Form1.KeyPress при нажатии на Left или Right не возникает, а Form1.KeyDown при нажатом Ctrl (Shift, Alt) тоже не происходит.
Как же тогда их отловить?
...
Рейтинг: 0 / 0
12.11.2003, 14:38
    #32321547
Обработать Shift+Left, Ctrl+Left, Alt+Left
Что никто не сталкивался с такой проблемой?
...
Рейтинг: 0 / 0
12.11.2003, 14:59
    #32321590
Adony
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработать Shift+Left, Ctrl+Left, Alt+Left
Код: plaintext
if ((key=vk_left) and (ssCtrl in Shift)) then ...
...
Рейтинг: 0 / 0
12.11.2003, 15:09
    #32321612
Обработать Shift+Left, Ctrl+Left, Alt+Left
Именно так я и сделал.
Проблема в том, что если при нажатом Shift нажимать Left, то событие KeyDown не наступает, а KeyPress предназначено только для печатаемых символов.
...
Рейтинг: 0 / 0
12.11.2003, 15:17
    #32321637
Adony
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработать Shift+Left, Ctrl+Left, Alt+Left
Вот проверил на новом проекте и на KeyDown
if ((key=vk_left) and (ssShift in Shift)) then label1.Visible:=not label1.Visible;
работает.
...
Рейтинг: 0 / 0
12.11.2003, 15:38
    #32321683
Обработать Shift+Left, Ctrl+Left, Alt+Left
Дело в том что фокус находится на кнопке. Если брать форму без кнопок, то все работает.
...
Рейтинг: 0 / 0
12.11.2003, 17:38
    #32321954
Lana
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработать Shift+Left, Ctrl+Left, Alt+Left
установи у формы KeyPreview:=true;
...
Рейтинг: 0 / 0
13.11.2003, 09:57
    #32322458
Обработать Shift+Left, Ctrl+Left, Alt+Left
Про KeyPreview я знаю.
И установил его в true в самом начале:
автор вопроса писал:Что-то не пойму как поймать событие Ctrl+Left при Form1.KeyPreview = true
Специально создал новый проект для экспериментов (показываю текст модуля):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
unit Unit1;

interface

uses
  Windows, Classes, Controls, Forms, Buttons, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     if ((key=vk_left) and (ssShift in Shift)) then label1.Visible:=not label1.Visible;
end;

end.

Так вот если у Button1 TabStop стоит true, то ничего не работает.
А если установить его в false, то сначала работает, а после нажатия на кнопку фокус устанавливается на нее и все крендец.
Положил еще TEdit на форму. При фокусе в Edit1 все пашет.
Что-то не пойму как победить данную траблу.
...
Рейтинг: 0 / 0
13.11.2003, 10:18
    #32322489
Обработать Shift+Left, Ctrl+Left, Alt+Left
Delphi 6, если это имеет значение.

to Lana
А тигра на фотке настоящая? :))
...
Рейтинг: 0 / 0
13.11.2003, 11:52
    #32322682
Nemec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработать Shift+Left, Ctrl+Left, Alt+Left
попробуй назначить обработку на KeyUp, с KeyDown у меня тоже проблемы были.
...
Рейтинг: 0 / 0
13.11.2003, 12:02
    #32322704
Обработать Shift+Left, Ctrl+Left, Alt+Left
Да, на KeyUp все работает.
Но я хотел в промежутке между KeyDown и KeyUp включать Timer...
...
Рейтинг: 0 / 0
13.11.2003, 13:06
    #32322872
Nemec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработать Shift+Left, Ctrl+Left, Alt+Left
а если отлавливать WM_KEYDOWN ?
...
Рейтинг: 0 / 0
13.11.2003, 13:09
    #32322881
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработать Shift+Left, Ctrl+Left, Alt+Left
Попробовал сделать тоже самое. На KeyDown не работает, а на KeyUp работает. Думаю стоит попробывать заменить TButton на SpeedButton. С SpeedButton-ом все работает.
...
Рейтинг: 0 / 0
13.11.2003, 14:50
    #32323102
Обработать Shift+Left, Ctrl+Left, Alt+Left
to Nemec
Приведи пожалуйста пример. а то я никогда так не делал.
...
Рейтинг: 0 / 0
13.11.2003, 17:38
    #32323482
Nemec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработать Shift+Left, Ctrl+Left, Alt+Left
объявляешь процедуру:
procedure MyWMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;

...
procedure MyWMKeyDown(var Message: TWMKeyDown);
begin
(твои операторы)
inherited;
(или здесь)
end;

а вообще Delphi\Source\Vcl\ - неистощимый источник информации :)
...
Рейтинг: 0 / 0
14.11.2003, 15:20
    #32324640
Обработать Shift+Left, Ctrl+Left, Alt+Left
Что-то ругается на директиву message . В uses я прописал Messages, но все равно ругается.
...
Рейтинг: 0 / 0
14.11.2003, 15:30
    #32324669
Song
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработать Shift+Left, Ctrl+Left, Alt+Left
Объявить надо в классе формы.

-----
Прежде чем сказать "Невозможно", подумай, прав ли ты?!
...
Рейтинг: 0 / 0
17.11.2003, 08:43
    #32325808
Обработать Shift+Left, Ctrl+Left, Alt+Left
Или я такой тупой или вы мне что-то недоговорили...
Вообще не заходит в процедуру MyWMKeyDown. Написал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure MyWMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
.............
implementation
var fl:boolean;
{$R *.dfm}
procedure TForm1.MyWMKeyDown(var Message: TWMKeyDown);
begin
     if (fl) and (Message.CharCode = vk_left) then
       label1.Visible:=not label1.Visible;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     //if ((key=vk_left) and (ssShift in Shift)) then label1.Visible:=not label1.Visible;
     if key=vk_shift then fl := true;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     //if ((key=vk_left) and (ssShift in Shift)) then label1.Visible:=not label1.Visible;
     if not (key=vk_shift) then fl := false;
end;
...
Рейтинг: 0 / 0
17.11.2003, 08:50
    #32325813
Mihail R.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработать Shift+Left, Ctrl+Left, Alt+Left
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Tform1 = class (TForm)
  ....
private
  ....
public
  ......
  procedure MyWMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
  ........
end;
.............
...
Рейтинг: 0 / 0
17.11.2003, 09:06
    #32325822
Обработать Shift+Left, Ctrl+Left, Alt+Left
Была процедура написана перед private. Перенес в public - не помогло.
...
Рейтинг: 0 / 0
17.11.2003, 10:37
    #32325896
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработать Shift+Left, Ctrl+Left, Alt+Left
а что кричит ?
_____________
__
...
Рейтинг: 0 / 0
17.11.2003, 10:43
    #32325902
Обработать Shift+Left, Ctrl+Left, Alt+Left
Теперь уже ничего не кричит. Просто в эту процедуру даже не заходит. Сделал точку останова на if (fl) and (Message.CharCode = vk_left) then - точно не заходит. Что-то я никак не врублюсь в чем дело.
...
Рейтинг: 0 / 0
17.11.2003, 11:20
    #32325957
Nemec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработать Shift+Left, Ctrl+Left, Alt+Left
ну значит форма действительно не получает это сообщение, потому и KeyDown не обрабатывается. что сказать? - глюк.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обработать Shift+Left, Ctrl+Left, Alt+Left / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]