Главная страница
    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.038 c
4-1101921383
TankMan
2004-12-01 20:16
2005.02.06
Хорошо...Скажите пожалуйста, как (возможно ли) "опознать" чипсет


14-1105969105
Aleksandr
2005-01-17 16:38
2005.02.06
Помнится был сайт...


9-1099412843
Masacre
2004-11-02 19:27
2005.02.06
Обьясните пожалста, как вообще сделать сохранение в игре...


14-1106025452
Антонио
2005-01-18 08:17
2005.02.06
Типы языков


1-1106297005
ShimON
2005-01-21 11:43
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский