Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.013 c
14-20777
chs2r
2003-07-21 15:30
2003.08.07
Как уменьшить размер программы?


1-20545
nevalex
2003-07-23 13:32
2003.08.07
Параметр с несколькими файлами в названии которых есть пробелы


14-20732
Pat
2003-07-18 18:32
2003.08.07
Достучаться до string


14-20671
Igor__
2003-07-22 16:27
2003.08.07
Винчестер


1-20522
Sesh
2003-07-26 08:39
2003.08.07
Как с Delphi заменять определенные слова текста в Word




   Наверх