Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-5183
Scream
2003-01-14 23:25
2003.02.03
Всем!Всем!Всем!Всем!Всем!Всем!


1-4843
avch
2003-01-24 15:18
2003.02.03
Как запустить/активизировать приложение


14-5269
EsKor
2003-01-16 10:07
2003.02.03
Наборы шрифтов в HP LJ1200


14-5261
zzet
2003-01-16 18:44
2003.02.03
Гы..


6-5109
LebAlex
2002-12-07 08:10
2003.02.03
Как заблокировать порт (socket)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский