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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.127 c
11-1137414495
BeZ
2006-01-16 15:28
2006.11.05
Аналог Screen.Cursor ...


15-1161242512
Серьезный Сэм
2006-10-19 11:21
2006.11.05
Общий доступ


15-1160804375
Andy BitOff
2006-10-14 09:39
2006.11.05
Ваше мнение о книге?


9-1138054239
Аццкий_рыцарь:)
2006-01-24 01:10
2006.11.05
TBackGroundSprite В DelphiX...


1-1159008685
DelphiLamer
2006-09-23 14:51
2006.11.05
Как получить список всех процедур в библиотеке?