Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.204.218.79] |
|
Сообщ.
#1
,
|
|
|
Играясь с TCustomGrid наткнулся на... сам не знаю что .
Создал Новый класс и ловлю в нём KeyDown, а оно капризничает и не ловиться ну ни то чтоб вообще не ловился, а как то на половину. Если Grid на форме активен то KeyDown работает, а вот если активировать ячейку на ввод и жать по клавишам то Не работает. Добавил процедуру для отлова WM_CHAR но и сней тоже самое. И Шо делать? Если захочется ограничить ввод некоторых клавиш ну например как в Hex редакторе да и мало ли где. unit TestCustomGrid; interface uses Windows, Messages, Dialogs, SysUtils, Classes, Graphics, Controls, Forms, Grids; Type TNewCustomGrid = Class(TCustomGrid) Protected Procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); Override; Procedure KeyDown(var Key: Word; Shift: TShiftState); Override; Procedure WMChar(Var Msg: TWMChar); Message WM_CHAR; Public Constructor Create(AOwner: TComponent); Override; End; implementation { TNewCustomGrid } procedure TNewCustomGrid.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); begin //inherited; end; Constructor TNewCustomGrid.Create(AOwner: TComponent); begin inherited Create(AOwner); DefaultColWidth := 25; DefaultRowHeight := 20; Options := [goThumbTracking] + [goEditing] + [goVertLine] + [goHorzLine] + [goFixedVertLine] + [goFixedHorzLine]; end; procedure TNewCustomGrid.KeyDown(var Key: Word; Shift: TShiftState); begin //inherited; ShowMessage('KeyDown: ' + Char(Key)); end; procedure TNewCustomGrid.WMChar(var Msg: TWMChar); begin ShowMessage('WMChar: ' + Char(Msg.CharCode)); end; end. {====================================================================================================================} Uses TestCustomGrid, ... ; ... Var TestGrid : TNewCustomGrid; ... procedure TForm1.FormShow(Sender: TObject); Begin TestGrid := TNewCustomGrid.Create(Form1); TestGrid.Parent := Form1; End; |
Сообщ.
#2
,
|
|
|
СПС за хелп...
Нашёл решение "Спаси себя сам" называется ... Controls.TWinControl.OnKeyDown вот ето и нужно было. unit TestCustomGrid; interface uses Windows, Messages, Dialogs, SysUtils, Classes, Graphics, Controls, Forms, Grids; Type TNewCustomGrid = Class(TCustomGrid) Protected Procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); Override; // Добавим Ето!!! ////////////////////////////////////////////////////////////////////// Procedure OldKeyDown(Sender : TObject; var Key: word; Shift: TShiftState); //////////////////////////////////////////////////////////////////////////////////////// Procedure KeyDown(var Key: Word; Shift: TShiftState); Override; Procedure WMChar(Var Msg: TWMChar); Message WM_CHAR; Public Constructor Create(AOwner: TComponent); Override; End; implementation { TNewCustomGrid } procedure TNewCustomGrid.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); begin //inherited; end; Constructor TNewCustomGrid.Create(AOwner: TComponent); begin inherited Create(AOwner); DefaultColWidth := 25; DefaultRowHeight := 20; Options := [goThumbTracking] + [goEditing] + [goVertLine] + [goHorzLine] + [goFixedVertLine] + [goFixedHorzLine]; // Здесь вот Ето ///////////////////////////////////////////////////////////////////// OnKeyDown :=OldKeyDown; ////////////////////////////////////////////////////////////////////////////////////// end; // И procedure Add сюда //////////////////////////////////////////////////////////////// procedure TNewCustomGrid.OldKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); begin ShowMessage('OldKeyDown: ' + Char(Key)); KeyDown(Key, Shift); end; //////////////////////////////////////////////////////////////////////////////////////// procedure TNewCustomGrid.KeyDown(var Key: Word; Shift: TShiftState); begin //inherited; ShowMessage('KeyDown: ' + Char(Key)); end; procedure TNewCustomGrid.WMChar(var Msg: TWMChar); begin ShowMessage('WMChar: ' + Char(Msg.CharCode)); end; end. {====================================================================================================================} Uses TestCustomGrid, ... ; ... Var TestGrid : TNewCustomGrid; ... procedure TForm1.FormShow(Sender: TObject); Begin TestGrid := TNewCustomGrid.Create(Form1); TestGrid.Parent := Form1; End; |
Сообщ.
#3
,
|
|
|
Почему вы считаете, что при "активизации ячейки на ввод", то есть в то время когда фокус находится в контроле редактирования, а не в гриде, должен отрабатываться OnKeyDown грида. Отрабатывается OnKeyDown контрола редактирования
|