Главная страница
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.017 c
7-5282
Romeo
2002-11-22 10:23
2003.02.03
Ребята кто-нибудь писал Gina.


14-5219
Burmistroff
2003-01-15 20:26
2003.02.03
Яркость монитора


1-5041
ЮРИЙ_К
2003-01-23 15:45
2003.02.03
Снимок экрана в JPG


3-4818
Сергей Крылов
2003-01-17 16:33
2003.02.03
Настройка парметров BDE


4-5351
Евгений Зеленоград
2002-12-21 21:40
2003.02.03
Копирование файла - проблема???