Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

Как получить 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.041 c
1-1106279118
Poha
2005-01-21 06:45
2005.02.06
AutoCad


1-1106403052
Avi
2005-01-22 17:10
2005.02.06
Взлом программы.


3-1104748932
UVV
2005-01-03 13:42
2005.02.06
последовательность в Oracle


10-1082362359
7th_Angel
2004-04-19 12:12
2005.02.06
Диаграммы в Excel


4-1102848769
aster_x
2004-12-12 13:52
2005.02.06
Пимер работы с процессами в НТ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский