Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Разноцветный потомок DbGrid [D6]


European ©   (2003-10-08 01:11:00) 

Уважаемые дамы и господа!
Ниже приведен код потомка DBGrida, в котором я хочу получить все строки одного цвета, отличного от стандартного, а выделенную строку – другим цветом. При компиляции возникает ошибка Declaration of " DrawColumnCell " differs from previous declaration в строке {*****}. Ответьте, пожалуйста, на один вопрос: что изменить чтобы всё заработало. Заранее благодарен!

unit MyDBGrid;
interface
uses Windows, DBGrids, Messages, Classes, Types, DB, Grids, Graphics, QControls, Dialogs;

Type
TMyDBGrid = class (TDBGrid)
Private
FOnDrawDataCell: TDrawDataCellEvent;
Protected
property OnDrawDataCell: TDrawDataCellEvent read FOnDrawDataCell write FOnDrawDataCell;
procedure DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); override; {*****}
public
constructor Create(AOwner: TComponent); override;
end;

implementation

constructor TMyDBGrid.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Options:=[dgTitles,dgColumnResize,dgColLines,dgRowLines,dgRowSelect,dgConfirmDelete,dgCancelOnExit];
DefaultDrawing:=true;
end;

procedure TMyDBGrid.DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with TDBGrid(Sender).Canvas do
begin
Brush.Color:=clGreen; Font.Color:=clWhite; FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
end;

if gdSelected in State then
begin TDBGrid(Sender).Canvas.Brush.Color:= clRed; end;
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;

end.


European   (2003-10-10 00:16:00) [1]

Да, уважаемые! Вы как всегда правы.
Использовал прототип, представленный gek-ом, а до канвы добрался через Self. Предполагаю что тема закрыта. Если у кого есть соображения - пишите.


ЮЮ   (2003-10-09 02:30:00) [2]

1. если в DrawColumnCell, то просто Canvas, т.е. св-во самогокомпонента
2. Не путай метод DrawDataCell и обработчик OnDrawDataCell


European   (2003-10-09 00:05:00) [3]

to gek
> procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
> Column: TColumn; State: TGridDrawState); override;


В таком случае возникает 2 вопроса:
1 - как добраться без Sender-а до канвы DBGrida?
2 - почему стандартный обработчик события OnDrawDataCell имеет такой прототип как указано в исходном коде?


gek   (2003-10-08 07:10:00) [4]

procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
Column: TColumn; State: TGridDrawState); override;


Наверх

Титульная страница Поиск, карта сайта Написать письмо