Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.03;
Скачать: CL | DM;

Вниз

CheckBox на заголовке Grid а   Найти похожие ветки 

 
hoper   (2003-01-17 23:23) [0]

возможно ли поместить checkbox на заголовок грида (Grid/DBGrid)?
DrawFrameControl с Rect, принадлежащим заголовку не работает (Control рисуется, но при первой возможности стирается)


 
hoper   (2003-01-21 03:06) [1]

нет?


 
hoper   (2003-01-21 03:07) [2]

может, есть компонент с такой фичей?


 
Кулюкин Олег ©   (2003-01-21 08:55) [3]

Либо написать свой компонент - наследник грида, там Вам будет доступна обработка отрисовки заголовокв, либо подменить WindowProc у грида, ждать собщения WM_Paint и отрисовывать все ручками.

А зачем там чекбокс?


 
danilka   (2003-01-21 09:54) [4]

компонены есть, куча великая, только они либо платные, либо кривые, лучше самому нарисовать.
а вообще, посмотри код, вроде катит без проблем. накатал на скорую руку, могут быть глюки.
рисуешь форму, ложишь на нее tstringgrid, по-умолчанию он обзовется как stringgrid1, вставляешь этот код и все.

const
cell_x=2; cell_y=3; //ячейка, с чекбоксом

var
Form1: TForm1;
CheckBox1: TCheckBox;

implementation

{$R *.DFM}

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
r:trect;
begin
if (cell_x>=StringGrid1.LeftCol) and
(cell_x<=StringGrid1.LeftCol+StringGrid1.VisibleColCount) and
(cell_y>=StringGrid1.TopRow) and
(cell_x<=StringGrid1.TopRow+StringGrid1.VisibleRowCount) then
CheckBox1.Visible:=true else CheckBox1.Visible:=false;
if (acol=cell_x) and (arow=cell_y) then begin
r:=stringgrid1.CellRect(cell_x,cell_y);
r.Left:=r.left+stringgrid1.left+2;
r.right:=r.right+stringgrid1.left+2;
r.top:=r.top+stringgrid1.top+2;
r.bottom:=r.bottom+stringgrid1.top+2;
CheckBox1.BoundsRect:=r;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
CheckBox1:=TCheckBox.Create(form1);
CheckBox1.parent:=form1;
CheckBox1.Caption:="proba pera";
end;


 
danilka   (2003-01-21 10:11) [5]

да, с учетом заголовков, процедура StringGrid1DrawCell выглядит вот-так:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
r:trect;
begin
if (cell_x=0) and (cell_y=0) then CheckBox1.Visible:=true else begin
if (cell_x=0) then CheckBox1.Visible:=(cell_y>=StringGrid1.TopRow) and
(cell_y<=StringGrid1.TopRow+StringGrid1.VisibleRowCount);
if (cell_y=0) then CheckBox1.Visible:=(cell_x>=StringGrid1.LeftCol) and
(cell_x<=StringGrid1.LeftCol+StringGrid1.VisibleColCount);
if (cell_x>0) and (cell_y>0) then begin
CheckBox1.Visible:=(cell_x>=StringGrid1.LeftCol) and
(cell_x<=StringGrid1.LeftCol+StringGrid1.VisibleColCount) and
(cell_y>=StringGrid1.TopRow) and
(cell_y<=StringGrid1.TopRow+StringGrid1.VisibleRowCount);
end;
end;
if (acol=cell_x) and (arow=cell_y) then begin
r:=stringgrid1.CellRect(cell_x,cell_y);
r.Left:=r.left+stringgrid1.left+2;
r.right:=r.right+stringgrid1.left+2;
r.top:=r.top+stringgrid1.top+2;
r.bottom:=r.bottom+stringgrid1.top+2;
CheckBox1.BoundsRect:=r;
end;
end;


 
hoper   (2003-01-23 02:45) [6]

Спасибо, danilka, это к stringgrid"у, как-нибудь пригодится.
А как быть с dbgrid"ом, то есть как в общих чертах должна выглядеть процедура обработки сообщений компонента?
в голову пришло ниженаписанное, но в этом явно что-то не так:

if Message.Msg = WM_Paint then
begin
WndProc(Message);
//добавление checkbox"a
//и прочие действия
end
else
WndProc(Message);

видимо, вызывается WndProc формы, а не грида
делать наследника не очень хочется, т.к. придётся делать много изменений, к тому же, интересно разобраться с windowproc
только, блин, не ругайтесь, я впервые сталкиваюсь с обработкой сообщений


 
hoper   (2003-01-24 01:12) [7]

?



Страницы: 1 вся ветка

Текущий архив: 2003.02.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
1-4990
Brain
2003-01-21 16:17
2003.02.03
Не прямоугольный сомпонент.


14-5186
Дмитрий К.К.
2003-01-14 06:14
2003.02.03
Именинники 14 января


1-4967
cranium
2003-01-18 03:03
2003.02.03
Как дочерню форму показать поверх остальных дочерних форм


1-4888
badaxe
2003-01-22 10:37
2003.02.03
Минимизация формы.


14-5204
polizei
2003-01-15 13:18
2003.02.03
Люди добрые! Помогите чем можите! Совсем мне плохо!...