Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Глюк !!! [D7, 95/98, 2000, XP]


fog ©   (2006-10-20 01:13:00) 

ДВС. Написал обработчик 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...- не работает)

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


fog   (2006-10-23 23:06:00) [1]

2 ProgRAMmer Dimonych>

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


Ketmar   (2006-10-22 01:42:00) [2]

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


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

2 Percent>

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

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


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

Танкистам:

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


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


Loginov Dmitry   (2006-10-21 09:25:00) [5]

Выбрось Delphi


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

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

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

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

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

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


ProgRAMmer Dimonych   (2006-10-20 18:30:00) [7]

А что WM_GETDLGCODE?


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

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


Это что за...


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

2 ЮЮ >
Form.KeyPreview = false;

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

Можно и так.

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


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

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

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

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


Loginov Dmitry   (2006-10-20 07:58:00) [11]

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


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


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

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


Gero   (2006-10-20 01:47:00) [13]

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

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

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

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


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

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

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

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


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


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

Ню..ню

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

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


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

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


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


> if Shift = [ssCtrl] then

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо