Форум: "Основная";
Текущий архив: 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