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

Вниз

Как в МСК/КОЛ узнать, что нажата нужная клавиша и отреагировать?   Найти похожие ветки 

 
M5   (2004-07-28 12:20) [0]

Нужно, чтобы при нажатии клавиши, н-р ESC, на главной форме программа завершалась.

На объекте Tlister (TLister = class(TForm)) установил KeyPreview=true и создал процедуру обработки OnKeyDown в объекте KOLForm1. Однако, ничего не работает:

procedure TLister.KOLForm1KeyDown(Sender: PControl; var Key: Integer;
 Shift: Cardinal);
begin
IF GetKeyState(VK_ESCAPE) = 1 then begin
 ShowMessage("Esc pressed");
 halt;
end;
end;


 
fellix   (2004-07-28 13:53) [1]

В KOL нет KeyPreview
см.:  
http://delphimaster.net/view/11-1089378422/


 
M5   (2004-07-28 18:11) [2]

Я прочел указанную ссылку, но к сожалению не смог разобраться как это работает. Можно подробнее? Так, даже при простом копировании указанной функции в мою прогу Д5 выдает ошибку "Необъявленный идентификатор GetShiftState" и на саму функцию "Function needs result type". Подскажите в каком месте программы определять эту функцию и как ею воспользоваться.


 
fellix   (2004-07-28 21:22) [3]

код GetShiftState внутри Kol.pas
просто взять и скопировать


 
M5   (2004-07-29 17:52) [4]

Куда вставлять код функции - в обработку метода OnKeyDown объекта KOLForm1 или еще куда? Объясните же немного подробнее что и как должно работать.


 
fellix   (2004-07-30 11:34) [5]

Что подробнее? Примера недостаточно? Ликбез по программированию устраивать?

Приклеить апплету OnMessage и вставить единственную строку:

if (Msg.message = WM_KEYDOWN) and (Msg.wParam = VK_ESCAPE) then ...


 
M5   (2004-08-02 18:11) [6]

И ликбез бы не помешал, доходчивость всегда высоко ценится. Теперь хоть более-менее понятно, спасибо. А другие посоветовали следующее:

- Нужно добавить функцию KOLForm1Message в основной модуль программы (двойной щелчок на методе OnMessage объекта TKOLForm):

function TMyUnit.KOLForm1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
var C : Char;
begin
Result:=False;
case Msg.message of
  WM_KEYDOWN, WM_SYSKEYDOWN:
    if assigned(Form.OnKeyDown) then Form.OnKeyDown(Form, Msg.wParam, GetShiftState);
  WM_KEYUP, WM_SYSKEYUP:
    if assigned(Form.OnKeyUp) then Form.OnKeyUp(Form, Msg.wParam, GetShiftState);
  WM_CHAR, WM_SYSCHAR:
    if assigned(Form.OnChar) then begin
     C := Char( Msg.wParam );
     Form.OnChar(Form, C, GetShiftState);
     Msg.wParam := Integer(C);
    end;
end;
end;

- Добавить функцию GetShiftState в раздел implementation
основного модуля или в саму функцию KOLForm1Message:

function GetShiftState: DWORD;
begin
 Result:= 0;
 if GetKeyState(VK_SHIFT) < 0 then Result:=Result or MK_SHIFT;
 if GetKeyState(VK_CONTROL) < 0 then Result:=Result or MK_CONTROL;
 if GetKeyState(VK_MENU) < 0 then Result:=Result or MK_ALT;
end;

- Наконец добавить процедуру анализа нажатых клавиш KOLForm1Char
(двойной щелчок на методе OnChar объекта TKOLForm), что-то типа:

procedure TMyUnit.KOLForm1Char(Sender: PControl; var Key: Char; Shift: Cardinal);
begin
if Key=#27 then ShowMessage("Нажата клавиша ESCAPE");
end;



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

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

Наверх




Память: 0.46 MB
Время: 0.039 c
6-1102174721
Linker
2004-12-04 18:38
2005.02.20
TAPI


14-1107178240
ArchValentin
2005-01-31 16:30
2005.02.20
Кто чё-нить знает про зверя VBScript просю...


3-1106327747
ZL
2005-01-21 20:15
2005.02.20
Звук и видео


1-1107352404
ВОТ
2005-02-02 16:53
2005.02.20
обработчик


4-1103657293
Митяй2
2004-12-21 22:28
2005.02.20
Как из программы на Delphi выполнить дозвон к интернету





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский