Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблема с изменением цвета фона в TInplaceEdit в Delphi 11 Community Edition

Delphi , Графика и Игры , Цвета и Палитра

Вопрос пользователя касается проблемы с изменением цвета фона в компоненте TInplaceEdit в среде разработки Delphi 11 Community Edition. В предыдущих версиях, таких как Delphi 2010, аналогичный код работал корректно. Однако, в более новых версиях, включая Delphi 11, изменение цвета фона в редакторе не происходит, хотя изменение регистра символов (CharCase) функционирует нормально.

Описание проблемы

Пользователь переопределяет класс TInplaceEdit, создавая новый класс TMyInplaceEdit, в котором объявляется свойство Color и устанавливается цвет фона в конструкторе. Также создается класс TTestGrid, наследующийся от TStringGrid, с переопределенным методом CreateEditor, который возвращает экземпляр TMyInplaceEdit. Однако, несмотря на эти изменения, цвет фона в редакторе не изменяется в Delphi 11 Community Edition.

Пример кода

type
  TMyInplaceEdit = class(TInplaceEdit)
  public
    property Color; // redeclare to make public
    constructor Create(AOwner: TComponent); override;
  end;

  TTestGrid = class(TStringGrid)
  public
    property InplaceEditor; // redeclare to make public
    function CreateEditor: TInplaceEdit; override;
  end;

  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    TestGrid: TTestGrid;
  end;

implementation

constructor TMyInplaceEdit.Create(AOwner: TComponent);
begin
  inherited;
  Color := clMoneyGreen; // Установка цвета фона
  CharCase := ecUpperCase; // Изменение регистра символов
end;

function TTestGrid.CreateEditor: TInplaceEdit;
begin
  Result := TMyInplaceEdit.Create(Self);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  TestGrid := TTestGrid.Create(Self);
  TestGrid.Parent := Self;
  TestGrid.Show;
  TestGrid.Options := [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goEditing, goTabs];
end;

Подтвержденный ответ

Проблема заключается в том, что после создания редактора CreateEditor(), компонент TTestGrid перезаписывает свойство Color редактора TInplaceEdit на цвет фона своего собственного, что было добавлено в Delphi XE3 и последующих версиях. Это поведение происходит каждый раз при обновлении редактора, что приводит к сбросу кастомного цвета фона.

Для решения проблемы можно переопределить обработчик уведомления CM_COLORCHANGED в классе TMyInplaceEdit, который будет устанавливать нужный цвет фона при каждом изменении цвета редактора:

type
  TMyInplaceEdit = class(TInplaceEdit)
  protected
    procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
  ...
  end;

procedure TMyInplaceEdit.CMColorChanged(var Message: TMessage);
begin
  inherited;
  Color := clMoneyGreen; // Установка цвета фона
end;

Альтернативный ответ

Пользователь также упоминает, что использование события OnDrawCell компонента TTestGrid для изменения цвета выделенной ячейки дает похожий результат, как в Delphi 2010. Однако, это изменяет цвет ячейки, а не самого ин-place редактора. Для одновременного изменения цвета выделенной ячейки и редактора можно использовать комбинацию этих подходов.

Заключение

Изменение цвета фона в TInplaceEdit в Delphi 11 Community Edition требует более сложного подхода, чем в предыдущих версиях. Необходимо переопределить обработку уведомления CM_COLORCHANGED, чтобы поддерживать заданный цвет фона редактора. Это решение позволяет сохранить кастомный цвет фона даже при перерисовке компонента.

Создано по материалам из источника по ссылке.

Пользователь сталкивается с проблемой, когда в среде разработки Delphi 11 Community Edition не удается изменить цвет фона компонента TInplaceEdit, в то время как ранее это было возможно в Delphi 2010 и аналогичный код работал корректно.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Цвета и Палитра ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 09:19:05/0.0033400058746338/0