![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глюк !!! [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