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