Конференция "Компоненты" » новая опция StringGrid [D7, WinXP]
 
  • JohnJ (21.04.09 16:43) [0]
    Здравствуйте, уважаемые мастера!
    Мой объект, наследник StringGrid, должен, поддерживать свойство goEditing только для чётных (по номеру столбца) ячеек, а для нечётных не реагировать, будто бы goEditing отключено. Всё это происходит если свойство (новое) goEditingEven включено. Иначе нужно работать как обычный StringGrid.
    Вот что я для этого делаю:
     TMyGridOption = (goFixedVertLine, goFixedHorzLine, goVertLine,
       goHorzLine, goRangeSelect, goDrawFocusSelected, goRowSizing,
       goColSizing, goRowMoving, goColMoving, goEditing, goEditingEven, goTabs, goRowSelect, goAlwaysShowEditor, goThumbTracking);

     TMyGridOptions = set of TMyGridOption;

     TMyGrid = class(TStringGrid)
     private
      FOptions: TMyGridOptions;
     protected
      procedure SetOptions(Value: TMyGridOptions);
     published
      property Options: TMyGridOptions read FOptions write SetOptions;

    // ...

    procedure TMyGrid.SetOptions(Value: TMyGridOptions);
    begin
     inherited;
     if (goEditingEven in Value) then
      begin
        Value := Value + [goEditing]; // <-- здесь большие сомнения
      end;
    end;



    В результате, на сколько я понимаю, в инспекторе свойств объекта должна измениться вкладка Options, но я не нахожу внутри goEditingEven - это первое.
    И вторая проблема - не знаю как, учитывая опцию goEditingEven и не затрагивая goEditing, по двойному нажатию организовать редактирование ячейки, если она чётная...
    Может быть в OnDrawCell?
    if (goEditingEven in Options) and (ACol mod 2 = 0) then
    StartEditCell(ACol, ARow);


    Что дожно содержаться в StartEditCell?
  • MBo © (22.04.09 05:16) [1]
    для этого не обязательно делать новый компонент, достаточно в событии выбора ячейки переключать свойство
  • DimaBr © (22.04.09 08:50) [2]
    TMyStringGrid = class(Grids.TStringGrid)
     private
       fEditingOdd: boolean;
     protected
       function CanEditShow: Boolean;override;
     published
       property EditingOdd: boolean read fEditingOdd write fEditingOdd;
    end;

    function TMyStringGrid.CanEditShow: Boolean;
    var s: string;
     x,Code: integer;
    begin
     S := Cells[Col,Row];
     Val(S,X,Code);
     Result := EditingOdd and (Code = 0) and not Odd(X);
    end;

  • JohnJ (22.04.09 21:19) [3]
    Благодарю MBo за действенный совет и DimaBr за код, только не понял к чему там проверка на содержимое выделенной ячейки...
    Сделал как советовал MBo, результат устроил.
  • DimaBr © (23.04.09 08:37) [4]
    Ну и показали бы своё решение.
 
Конференция "Компоненты" » новая опция StringGrid [D7, WinXP]
Есть новые Нет новых   [134467   +6][b:0][p:0.001]