Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
ВнизTShiftState Найти похожие ветки
← →
Belorus © (2007-05-09 14:59) [0]Как можно получить текущий TShiftState ?
Такой который передаётся в OnMouseMove на форме.
Можно конечно вручную написать проверку состояний нескольких клавиш, но не хотелось бы писать то что наверняка написано...
Или не написано ?
← →
SergeyIT © (2007-05-09 15:05) [1]А это не подходит?
SHORT GetKeyState(
int nVirtKey // virtual-key code
);
← →
SergeyIT © (2007-05-09 15:12) [2]А в сорсах Делфи есть такая
function KeysToShiftState(Keys: Word): TShiftState;
← →
X9 © (2007-05-09 15:14) [3]Ставим Form.KeyPreview в True, на Form.OnKeyDown запоминаем ShiftState, на Form.OnKeyUp - очищаем.
← →
X9 © (2007-05-09 15:15) [4]> [1] SergeyIT © (09.05.07 15:05)
> А это не подходит?
> SHORT GetKeyState(
>
> int nVirtKey // virtual-key code
> );
А где взять аргумент для данной функции?
← →
Belorus © (2007-05-09 15:37) [5]Нет, вы не поняли. Сохранять Shift я могу, но это просто глупо. Вручную перебирать клавиши мне тоже не хочется(не потому что лень, а потому что некрасиво). Нужно просто получить TShiftState в произвольный момент времени.
← →
SergeyIT © (2007-05-09 15:43) [6]
> А где взять аргумент для данной функции?
Так это виртуальный код клавиши.
Virtual-Key Codes в Wn32 helpe.
← →
X9 © (2007-05-09 15:52) [7]> [5] Belorus © (09.05.07 15:37)
> Нет, вы не поняли. Сохранять Shift я могу, но это просто
> глупо.
Отчего ж глупо?
> [6] SergeyIT © (09.05.07 15:43)
>
> > А где взять аргумент для данной функции?
>
> Так это виртуальный код клавиши.
> Virtual-Key Codes в Wn32 helpe.
Ещё раз, откуда его брать?
← →
{RASkov} © (2007-05-09 16:12) [8]> [7] X9 © (09.05.07 15:52)
> Ещё раз, откуда его брать?
Аргумент этой функции - это код клавиши, которую необходимо проверить - нажата или нет.
← →
X9 © (2007-05-09 16:19) [9]> [8] {RASkov} © (09.05.07 16:12)
По какому событию его проверять?
← →
X9 © (2007-05-09 16:21) [10]Автор ведь не хочет использовать события, следовательно, придёться перебирать все нужные коды клавиш.
← →
Belorus © (2007-05-09 16:39) [11]>
> Отчего ж глупо?
Чтобы его сохранить нужно чтобы произошло событие на форме OnMouseMove (например).
А если нету формы ? Или если событие ни разу не произошло с момента создания формы ?
Вот мне очень нравится функцияfunction KeysToShiftState(Keys: Word): TShiftState;
Но как достать для неё аргумент ?
← →
Belorus © (2007-05-09 16:40) [12]Ой, не заметил предыдущего сообщения. В общем x9 прав.
← →
{RASkov} © (2007-05-09 16:44) [13]> [9] X9 © (09.05.07 16:19)
и для > [12] Belorus © (09.05.07 16:40)
Например так:function GetShiftState: TShiftState;
begin
Result := [];
if GetKeyState(VK_CONTROL) < 0 then Include(Result, ssCtrl);
if GetKeyState(VK_SHIFT) < 0 then Include(Result, ssShift);
if GetKeyState(VK_LBUTTON) < 0 then Include(Result, ssLeft);
if GetKeyState(VK_RBUTTON) < 0 then Include(Result, ssRight);
if GetKeyState(VK_MBUTTON) < 0 then Include(Result, ssMiddle);
if GetKeyState(VK_MENU) < 0 then Include(Result, ssAlt);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
//procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); //это как хочет автор.
var ShSt: TShiftState; S: String;
begin
ShSt:=GetShiftState; S:="";
if ssCtrl in ShSt then S:=S+"ssCtrl, ";
if ssShift in ShSt then S:=S+"ssShift, ";
if ssLeft in ShSt then S:=S+"ssLeft, ";
if ssRight in ShSt then S:=S+"ssRight, ";
if ssMiddle in ShSt then S:=S+"ssMiddle, ";
if ssAlt in ShSt then S:=S+"ssAlt, ";
Caption:=S;
end;
← →
{RASkov} © (2007-05-09 16:48) [14]> //procedure TForm1.FormMouseMove(Sender: TObject; Shift:
> TShiftState; X, Y: Integer); //это как хочет автор
Т.е. автор так не хочет, сорри, но он хочет TShiftState... он его получил.
← →
Belorus © (2007-05-09 16:56) [15]Огромное спасибо {RASkov} за усилия. Работает как часы.
Видимо придётся остановиться на этом варианте, т.к судя по всему нет стандартной функции в API или библиотеках Delphi реализующих то же самое, в виде Shift := GetCurrentShiftState(от балды придумал);
Ещё раз спасибо за участие.
← →
begin...end © (2007-05-09 16:56) [16]> {RASkov} © (09.05.07 16:44) [13]
> function GetShiftState: TShiftState;
KeyboardStateToShiftState (Forms.pas)
← →
Belorus © (2007-05-09 16:57) [17]Кстати , любопытства ради...
ssDouble добавляется при нажатии сразу двух кнопок мыши ? Просто интересен смысл этого флага..
← →
Belorus © (2007-05-09 17:03) [18]> KeyboardStateToShiftState (Forms.pas)
Вот, оказывается, где собака порылась.
← →
{RASkov} © (2007-05-09 17:05) [19]> [17] Belorus © (09.05.07 16:57)
ssDouble добавляется при нажатии сразу двух кнопок мыши ?
Нет... это двойной клик...
> [16] begin...end © (09.05.07 16:56)
Ну да... оттуда и переделал для ветки, автор не догадался/недодумался так сделать ;)
> [18] Belorus © (09.05.07 17:03)
Угу... трудно было посмотреть? ;)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.045 c