Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 19 апр 2024, 09:08

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: 24 янв 2019, 10:10 
Не в сети

Зарегистрирован: 14 мар 2018, 10:34
Сообщений: 22
Добрый день, уважаемые разработчики!
Подскажите пожалуйста, какой метод нужно перегрузить и что дописать, чтобы у меня прорисовывалась моя окантовка для строк в таблице для всех эксемпляров DBGridEh в программе?
На текущий момент имею
Код:
type
  TCustomDBGridEh = class(TDBGridEh)
  public
    procedure DefaultDrawColumnCell(const Rect: TRect; DataCol: Integer;
      Column: TColumnEh; State: TGridDrawState); reintroduce;
    procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
  Column: TColumnEh; State: TGridDrawState); reintroduce;
  end;

  TDBGridEh = class(TCustomDBGridEh);
  TForm1 = class(TForm)
    DBGrdEh1: TDBGridEh;
    ds1: TDataSource;
    MemTblEh1: TMemTableEh;
    FDQuery1: TFDQuery;
    dtstdrvrh1: TDataSetDriverEh;
    con1: TFDConnection;
    fdphysfbdrvrlnk1: TFDPhysFBDriverLink;
   
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TCustomDBGridEh.DefaultDrawColumnCell(const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
  inherited;
  with Canvas do
  if gdSelected in State then
  begin
    // окантовка
    Pen.Color:= $000080FF;
    MoveTo(Rect.Left, Rect.Top);
    LineTo(Rect.Right, Rect.Top);
    MoveTo(Rect.Left, Rect.Bottom - 1);
    LineTo(Rect.Right, Rect.Bottom - 1);
    if Column.Index = 0 then
    begin
      MoveTo(Rect.Left, Rect.Bottom - 1);
      LineTo(Rect.Left, Rect.Top);
    end;
    if Column.Index = Columns.Count - 1 then
    begin
      MoveTo(Rect.Right, Rect.Bottom - 1);
      LineTo(Rect.Right, Rect.Top);
    end;
  end;
end;

procedure TCustomDBGridEh.DrawColumnCell(const Rect: TRect; DataCol: Integer;
  Column: TColumnEh; State: TGridDrawState);
begin
  DefaultDrawColumnCell(Rect, DataCol, Column, State);
  inherited;
end;

Прорисовка будет работать, если я добавлю событие к таблице OnDrawColumnCell и в нем DefaultDrawColumnCell(Rect, DataCol, Column, State), но как быть, если в программе много таких таблиц? Не хочется каждой добавлять одно и то же.. Спасибо!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 янв 2019, 11:03 
Не в сети

Зарегистрирован: 14 мар 2018, 10:34
Сообщений: 22
Как обычно. Сначала ищешь ответ на свой вопрос часами, потом пишешь на форум и, пока ждешь ответа, находишь сам. За 15 минут :twisted:
Вместо директивы overloaded надо использовать перекрытие override, вот так:
Код:
    procedure DefaultDrawColumnCell(const Rect: TRect; DataCol: Integer;
      Column: TColumnEh; State: TGridDrawState); reintroduce;
    procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
      Column: TColumnEh; State: TGridDrawState); override;

Остальное без изменений. Вопрос закрыт :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB