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

Исправление отображения текста в TDBGrid в Delphi 10.2 при работе с SQL Server 2008

Delphi , Компоненты и Классы , TDBGrid

При работе с компонентом TDBGrid в среде разработки Delphi 10.2 при подключении к базе данных SQL Server 2008, пользователи могут столкнуться с проблемой перекрытия текста при изменении данных в ячейках. Это может быть связано с особенностями отрисовки компонента в новых версиях Delphi, в отличие от Delphi 7, где такая проблема отсутствует.

Проблема

При использовании события OnDrawColumnCell для изменения данных в TDBGrid, текст в ячейках может перекрываться. Это происходит в Delphi 10.2, в то время как в Delphi 7 подобной проблемы не наблюдается.

Пример кода

В примере кода создается таблица Persons и вставляется в нее некоторая данных в SQL Server 2008. В Delphi создается новое VCL Forms приложение, где для отображения данных используется TADOConnection, TADOQuery, TDataSource и TDBGrid. Строка запроса TADOQuery.SQL устанавливается как "select LastName from Persons".

В обработчике события OnDrawColumnCell изменяется отображаемый текст для столбца LastName. Однако, из-за отсутствия очистки области перед отрисовкой, текст может перекрываться.

Решение

Для корректного отображения текста необходимо очистить область перед отрисовкой. TDBGrid предоставляет удобный метод DrawCellBackground, который можно использовать для этой цели. Ниже приведен пример реализации:

type
    TDBGridHelper = class helper for TDBGrid
    public
        procedure writeText(
            const   inRect:         TRect;
            const   text:           String;
            const   State:          TGridDrawState;
            const   columnIndex:    Integer
        );
    end;

procedure TDBGridHelper.writeText(
    const   inRect:         TRect;
    const   text:           String;
    const   State:          TGridDrawState;
    const   columnIndex:    Integer
);
var
    backgroungRect: TRect;
begin
    backgroungRect := inRect;
    backgroungRect.Inflate(-1, -1);

    if (gdSelected in State) then
        DrawCellHighlight(inRect, State, columnIndex, 0)
    else
        DrawCellBackground(backgroungRect, Color, State, columnIndex, 0);

    Canvas.TextRect(
        inRect,
        inRect.Left + 2,
        inRect.Top + 2,
        text
    );
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
    DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
    columnText: String;
begin
    columnText := '---';
    if Assigned(Column.Field) then begin
        if (Column.FieldName = 'LastName') then
            columnText := 'change';
        else
            columnText := Column.Field.DisplayText;
    end;
    DBGrid1.writeText(Rect, columnText, State, Column.Index);
end;

Альтернативное решение

В качестве альтернативного решения предлагается отключить "Runtime themes" в проекте, что позволит вернуться к старому виду интерфейса и алгоритмам отрисовки, использовавшимся в более ранних версиях Delphi.

  1. Выберите Project > Options > Application.
  2. Снимите галочку с опции Enable Runtime Themes.

Однако, следует помнить, что это решение может повлечь за собой другие изменения в интерфейсе и поведении приложения.

Заключение

Приведенные решения позволяют исправить проблему с перекрытием текста в компоненте TDBGrid при работе с Delphi 10.2 и SQL Server 2008. Рекомендуется тщательно протестировать изменения в приложении, чтобы убедиться в их корректности и отсутствии побочных эффектов.

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

При работе с компонентом `TDBGrid` в Delphi 10.2 при использовании события `OnDrawColumnCell` для изменения текста в ячейках может возникнуть проблема перекрытия текста, которая отсутствовала в Delphi 7 и связана с изменениями в отрисовке компонента.


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

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




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


:: Главная :: TDBGrid ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:55:12/0.0036520957946777/0