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

Вниз

Глюк !!!   Найти похожие ветки 

 
fog   (2006-10-20 01:13) [0]

ДВС. Написал обработчик KeyDown в TCustomControl.

...
published
  procedure KeyDown(var Key: Word; Shift: TShiftState); override;
...

procedure TMCWindow.KeyDown(var Key: Word; Shift: TShiftState);
var p: integer;
begin
case Key of
VK_UP: if Shift = [ssCtrl] then SetYRange(-10)
           else
            if Shift = [ssShift] then SetYRange(-1)
            else
             SetYRange(-2);
VK_DOWN: if Shift = [ssCtrl] then SetYRange(10)
           else
            if Shift = [ssShift] then SetYRange(1)
            else
             SetYRange(2);
VK_PRIOR: if Shift = [ssCtrl] then FmvOfs := SetYOfs(10)
                              else FmvOfs := SetYOfs(1);
VK_NEXT:  if Shift = [ssCtrl] then FmvOfs := SetYOfs(-10)
                              else FmvOfs := SetYOfs(-1);
VK_HOME:  if Shift = [ssCtrl] then
                              begin
                               p := integer(Round(FData[0] / FmVStep));
                               FmVOfs := 40 - p;
                              end;
else
 exit;
end;
end;
...

Проверил на 3 машинах с разными ОС, D7  - разные дистрибутивы (Rus, Eng).

Результат - VK_UP, VK_DOWN - не генерируются.
(break - на case Key...- не работает)

Как бороться?


 
Плохиш ©   (2006-10-20 01:20) [1]


> if Shift = [ssCtrl] then

Вообще-то в паскале/делфи это записывается обычно как
if ssCtrl in Shift then


 
fog   (2006-10-20 01:32) [2]

2 Плохиш>
Можно и так, а по существу вопроса?


 
Плохиш ©   (2006-10-20 01:35) [3]


> fog   (20.10.06 01:32) [2]
> 2 Плохиш>
> Можно и так

Ню..ню

> а по существу вопроса?

Вам надо нанять программиста.


 
fog   (2006-10-20 01:44) [4]

2 Плохиш>
> а по существу вопроса?

Вам надо нанять программиста.

 Не остроумно.


 
Gero ©   (2006-10-20 01:47) [5]

> Результат - VK_UP, VK_DOWN - не генерируются.

А как он должен генерироваться?

> (break - на case Key...- не работает)

А откуда там break и как он должен работать?


 
fog   (2006-10-20 01:57) [6]

2 Gero >
Break поставил я для отлова UP, DOWN т.к. PRiOR, NEXT, HOME и др. работают нормально - процедуры отрабатываются, а на этих - не работают.
Если поставить break на case Key of.., то на всех клавишах останавливается и Key показывает, а на стрелках - не "брэкует".


 
Loginov Dmitry ©   (2006-10-20 07:58) [7]

fog   (20.10.06 1:13)
published
 procedure KeyDown(var Key: Word; Shift: TShiftState); override;


И ктоже надоумил расположить KeyDown в published?
Чем не устроил protected?


 
ЮЮ ©   (2006-10-20 08:24) [8]

Form.KeyPreview не true случайно?

Может лучше не KeyDown перекрывать, а сообщения самому обработать?

Смотри,
function TWinControl.DoKeyDown(var Message: TWMKey): Boolean;
где, собственно, и вызывается  KeyDown


 
fog   (2006-10-20 13:17) [9]

2 ЮЮ >
Form.KeyPreview = false;

> Может лучше не KeyDown перекрывать, а сообщения самому обработать ?

Можно и так.

Но, кто-нибудь может объяснить КАК с глюком бороться, т.к. он доводит до "синяка" даже XP. Работают ВСе кнопки, КРОМЕ курсорных.


 
Loginov Dmitry ©   (2006-10-20 15:31) [10]

fog   (20.10.06 13:17) [9]
доводит до "синяка" даже XP


Это что за...


 
ProgRAMmer Dimonych ©   (2006-10-20 18:30) [11]

А что WM_GETDLGCODE?


 
fog   (2006-10-21 03:32) [12]

1. "синяк" - "синий экран смерти".

2. published - эт на одну строчку промахнулся при драге. protected - выше.

3. Вирусов нет, вчера обновил каспера и проверил всех.

В результате.

Запускаю прогу или из-под IDE, после нескольких нажатий (штук 10) по курсорам, прога перестает реагировать на другие клавиши, на C-A-D - не отвечает она, IDE соотв-но, и Explorer.  После этого 2 пути - или мертвое зависание до резета или "синяки".


 
Loginov Dmitry ©   (2006-10-21 09:25) [13]

Выбрось Delphi


 
Percent   (2006-10-21 11:59) [14]

Танкистам:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 case Key of
   VK_UP: Label1.Caption := "VK_UP";
   VK_DOWN: Label1.Caption := "VK_DOWN";
   VK_PRIOR: Label1.Caption := "VK_PRIOR";
   VK_NEXT: Label1.Caption := "VK_NEXT";
   VK_HOME: Label1.Caption := "VK_HOME";
 else
   Label1.Caption := "$" + IntToHex(Key, 6);  
 end;
end;


Но, кто-нибудь может объяснить КАК с глюком бороться

Алгоритм:
1. Ударься головой об стену.
2. Перейди к п. 1.

Loginov Dmitry ©
Выбрось Delphi


Лучше автору самому выброситься...


 
fog   (2006-10-22 01:38) [15]

2 Percent>

гы-гы-гы :)))
Закомментил свой KeyDown, вставил твой код, активировал KeyPreview - никаких изменений. Пишет в caption все, кроме VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT.
Проверил на 2-х компах.

"Убей сибя ап стену!" - только и остается, если переустановка не поможет..


 
Ketmar ©   (2006-10-22 01:42) [16]

аффтар, есть предложение: ты идёшь читать книги. и не занимаешься сексом с нашими мозгами. а?


 
fog   (2006-10-23 23:06) [17]

2 ProgRAMmer Dimonych>

Огромное спасибо за подсказку!!!



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

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

Наверх





Память: 0.49 MB
Время: 0.046 c
1-1159387946
Servelat
2006-09-28 00:12
2006.11.05
поймать SIGINT


15-1160170272
Альберт
2006-10-07 01:31
2006.11.05
смена иконки скомпилированной программы


11-1137763000
chum
2006-01-20 16:16
2006.11.05
Ошибка с TKOLOpenDirDialog


15-1160968930
Slider007
2006-10-16 07:22
2006.11.05
С днем рождения ! 16 октября


2-1161430828
nokk
2006-10-21 15:40
2006.11.05
время gmt





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