Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Как получить TShiftState который в OnMouseDown используется ?   Найти похожие ветки 

 
Enabled   (2005-01-09 01:52) [0]

Я хочу его значения в таймере использовать. Просто он удобнее, чем опрашивать клавиатуру и мышь по отдельности.


 
Kerk ©   (2005-01-09 01:53) [1]

GetAsyncKeyState


 
Enabled   (2005-01-09 02:46) [2]

function GetAsyncKeyState(vKey: Integer): SHORT; stdcall;

И что это ? Какой vKey ей посылать ? И как ею воспользоваться вообще ?


 
Дмитрий В. Белькевич   (2005-01-09 06:12) [3]

F1?


 
Enabled   (2005-01-12 01:34) [4]

Это не даёт TShiftState, а даёт лишь некоторые значения. Кроме того, требует многократного обращения к одной и той же функции, с разными параметрами, что скорости не добавляет.


 
begin...end ©   (2005-01-12 08:56) [5]

> [4] Enabled   (12.01.05 01:34)

Тогда попробуйте GetKeyboardState.


 
asafr ©   (2005-01-12 12:18) [6]

Вот пример функции, отлавливающей нажатие Shift и заталкиваешь в обработку таймера. По аналогии можно поступить с остальными кнопками, описаными в TShiftState...

function TForm1.ShiftKeyDown : boolean;
begin
result:=(Word(GetKeyState(VK_SHIFT)) and $8000)<>0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if ShiftKeyDown then Label1.Caption:="Ура!";
end;


 
Gero ©   (2005-01-12 17:18) [7]

if GetKeyState(VK_SHIFT) < 0


 
Enabled   (2005-01-13 06:57) [8]


> Gero ©   (12.01.05 17:18) [7]
> if GetKeyState(VK_SHIFT) < 0

Надо не VK_SHIFT, а TShiftState, в котором много параметров.


> asafr ©   (12.01.05 12:18) [6]
> аналогии можно поступить с остальными кнопками, описаными
> в TShiftState...

Ну, так сделай для ssDouble, если можно.


 
ЮЮ ©   (2005-01-13 07:16) [9]

>Ну, так сделай для ssDouble, если можно.

Типа DoubleClick по таймеру обнаружить? :) Если уж хочещь TShiftState, то и делай как в VCL, благо код доступен, обрабаьывая соответствующие сообщения Windows, а не опрашивая устройства в таймере


 
asafr ©   (2005-01-13 12:02) [10]

Ну а так? Зачем Timer-то?
 public
   procedure WMLBUTTONDBLCLK (var Message: TMessage); message WM_LBUTTONDBLCLK;
   { Public declarations }
 end;
.........
.........
implementation
{$R *.dfm}
procedure TForm1.WMLBUTTONDBLCLK(var Message: TMessage);
begin
Label1.Caption:="Ура!";
end;



 
Enabled   (2005-01-17 03:02) [11]


> ЮЮ ©   (13.01.05 07:16) [9]
>  Если уж хочещь TShiftState, то и делай как в VCL, благо
> код доступен, обрабаьывая соответствующие сообщения Windows

А где этот код, который доступен ? Можно его сюда запостить ?


 
ЮЮ ©   (2005-01-17 04:25) [12]


procedure TControl.DoMouseDown(var Message: TWMMouse; Button: TMouseButton;
 Shift: TShiftState);
begin
 if not (csNoStdEvents in ControlStyle) then
   with Message do
     if (Width > 32768) or (Height > 32768) then
       with CalcCursorPos do
         MouseDown(Button, KeysToShiftState(Keys) + Shift, X, Y)
     else
       MouseDown(Button, KeysToShiftState(Keys) + Shift, Message.XPos, Message.YPos);
end;

Итак, обработчик соообщения Windows DoMouseDown формирует привычный для VCL TShiftState, и вызывает метод MouseDown, который вызывает уже знакомый обработчик OnMouseDown:

procedure TControl.MouseDown(Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if Assigned(FOnMouseDown) then FOnMouseDown(Self, Button, Shift, X, Y);
end;


 
Благодарный пользователь   (2005-01-21 04:01) [13]


> ЮЮ ©   (17.01.05 04:25) [12]

Спасибо, ЮЮ !



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
1-1106167593
Blaster
2005-01-19 23:46
2005.02.06
В чом ошыбка?


1-1106550880
ISK
2005-01-24 10:14
2005.02.06
Как получить наивысший уровень привилегий в ХР?


14-1106081823
Hypercube
2005-01-18 23:57
2005.02.06
Linux


6-1100879482
Chery
2004-11-19 18:51
2005.02.06
Как скопировать файл с клиента на сервер?


14-1106020502
Чеширский_Кот
2005-01-18 06:55
2005.02.06
"Губит людей не пиво...