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

Вниз

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

 
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 вся ветка

Форум: "KOL";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.054 c
14-1106553402
Kerk
2005-01-24 10:56
2005.02.20
Я на грани самоубийства!!!


1-1107518010
snake_r
2005-02-04 14:53
2005.02.20
неактивность пользователя


11-1091695983
Unknown Mystic
2004-08-05 12:53
2005.02.20
Небольшие вопросы TIniFile, TKOLListView.


3-1106048248
Argentum
2005-01-18 14:37
2005.02.20
Как быстро присвоить lookup колонке в TDBGrid значение null


14-1107249320
Ozone
2005-02-01 12:15
2005.02.20
Настройка маршрутизаторов (Cisco)





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