На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> KeyDown в TCustomGrid , То поймал то промазал :))
    Играясь с TCustomGrid наткнулся на... сам не знаю что :blush:.
    Создал Новый класс и ловлю в нём KeyDown, а оно капризничает и не ловиться :blush: ну ни то чтоб вообще не ловился, а как то на половину.
    Если Grid на форме активен то KeyDown работает, а вот если активировать ячейку на ввод и жать по клавишам то Не работает. Добавил процедуру для отлова WM_CHAR но и сней тоже самое. И Шо делать? Если захочется ограничить ввод некоторых клавиш ну например как в Hex редакторе да и мало ли где.


    ExpandedWrap disabled
      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;
      :o СПС за хелп...

      Нашёл решение "Спаси себя сам" называется :D ...
      Controls.TWinControl.OnKeyDown вот ето и нужно было.

      ExpandedWrap disabled
        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;
      Сообщение отредактировано: Idol -
        Почему вы считаете, что при "активизации ячейки на ввод", то есть в то время когда фокус находится в контроле редактирования, а не в гриде, должен отрабатываться OnKeyDown грида. Отрабатывается OnKeyDown контрола редактирования
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0264 ]   [ 16 queries used ]   [ Generated: 28.03.24, 11:38 GMT ]