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

Вниз

Выделение строки StringGrid рамкой   Найти похожие ветки 

 
Леприкон ©   (2003-07-25 10:15) [0]

По чьей то странной прихоти необходимо выделять активную строку
StringGrid рамкой.
Сейчас делаю так:

procedure SetPanelPosition(Pan:TPanel;SG:TStringGRid;PosRow:integer);
var FullRgn,Rgn:THandle;
begin
with SG do
begin
if CellRect(0,Row).Top>CellRect(0,0).Top then
begin
Pan.Width:=CellRect(LeftCol+VisibleColCount,PosRow).Right-CellRect(0,PosRow).Left;
Pan.Height:=RowHeights[PosRow]+4;
FullRgn:=CreateRectRgn(0,0,Pan.Width,Pan.Height);
Rgn:=CreateRectRgn(CellRect(0,PosRow).Right-CellRect(0,PosRow).Left,2,Pan.Width-2,Pan.Height-2);
CombineRgn(FullRgn,FullRgn,Rgn,rgn_Diff);
SetWindowRgn(Pan.Handle,FullRgn,true);

DeleteObject(FullRgn);
DeleteObject(Rgn);

Pan.Left:=CellRect(0,PosRow).Left+1;
Pan.Top:=CellRect(0,Posrow).Top-1;
Pan.Visible:=true;
end
else
Pan.Visible:=false;
end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
SetPanelPosition(Panel1,StringGrid1,StringGrid1.Row);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
SetPanelPosition(Panel1,StringGrid1,StringGrid1.Row);
end;

//Align StringGrid1-> alClient
//FixedCols StringRid1->1
//Parent Panel1-> StringGRid1

Есть небольшие гюки: при смене размера формы в горизонтальном
напрвлении появляется ненужный скролл, то же самое при переходе
формы из развёрнутого на весь экран состояния в нормальное.

Может есть другие способы?


 
k2 ©   (2003-07-25 10:41) [1]


procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var r:TRect;
begin
if (gdfocused in State) then StringGrid1.Canvas.DrawFocusRect(Rect);
StringGrid1.Canvas.Brush.Color:=clBlue;
r.top:=StringGrid1.CellRect(0,StringGrid1.Selection.Top).top-1;
r.bottom:=StringGrid1.CellRect(0,StringGrid1.Selection.Top).Bottom+1;
r.left:=StringGrid1.CellRect(0,StringGrid1.Selection.Top).left-1;
r.Right:=StringGrid1.CellRect(0,StringGrid1.Selection.Top).left+StringGrid1.CellRect(StringGrid1.ColCount-1,StringGrid1.Selection.Top).Right+1;
StringGrid1.Canvas.FrameRect(r);
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
StringGrid1.Invalidate;
end;



 
k2 ©   (2003-07-25 10:54) [2]

...
if ARow=StringGrid1.Selection.Top then
begin
StringGrid1.Canvas.Brush.Color:=clBlue;
...

поспешишь людей насмешишь :) :shuffle:


 
Леприкон ©   (2003-07-25 11:03) [3]

to k2
Спасибо. :))



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

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

Наверх




Память: 0.47 MB
Время: 0.016 c
7-20830
Insider
2003-05-25 08:37
2003.08.07
Свой пункт в меню в таскбаре.


14-20749
Ahmad K
2003-07-15 23:18
2003.08.07
Можноли


3-20402
Term
2003-07-16 11:42
2003.08.07
Key Violation. Что вызывает эту ошибку,


9-20367
Esc
2003-02-07 13:57
2003.08.07
Динамические массивы или списки?


1-20570
freeek
2003-07-24 10:28
2003.08.07
Extended to str