Форум: "Основная";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c