Главная страница
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.012 c
1-20588
AlexVM
2003-07-24 11:09
2003.08.07
Как управлять ActionManager ом в runtime


1-20596
OHP
2003-07-24 00:46
2003.08.07
Системы счисления


14-20807
Феликс
2003-07-22 15:58
2003.08.07
Вопрос про HTML.


3-20413
abc
2003-07-16 16:33
2003.08.07
почему перестала работать фильтрация на русском языке???


1-20537
Goga
2003-07-26 17:09
2003.08.07
Ошибка Abstract Error