FAQ VCL
Компоненты\StringGrid

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как выделить строку в TStringGrid?

procedure SelectRow( StringGrid: TStringGrid; RowNumber: integer );
var
  NewSel: TGridRect;
begin
   with StringGrid do
   begin
      if ( RowNumber > FixedRows-1 ) and ( RowNumber < RowCount ) then
      begin
         NewSel.Left := FixedCols;
         NewSel.Top := RowNumber;
         NewSel.Right := ColCount - 1;
         NewSel.Bottom := RowNumber;
         Selection := NewSel;
      end;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   SelectRow( StringGrid1, 1 );
end;


Как выделить колонку в TStringGrid?

procedure SelectCol( StringGrid: TStringGrid; ColNumber: integer );
var
  NewSel: TGridRect;
begin
   with StringGrid do
   begin
      if ( ColNumber > FixedCols-1 ) and ( ColNumber < ColCount ) then
      begin
         NewSel.Left := ColNumber;
         NewSel.Top := FixedRows;
         NewSel.Right := ColNumber;
         NewSel.Bottom := RowCount - 1;
         Selection := NewSel;
      end;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   SelectCol( StringGrid1, 1 );
end;


Как использовать Enter как Tab в TStringGrid?

// Табуляция по строкам
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
   if Key = #13 then
      with Sender as TStringGrid do
         if Col < ColCount-1 then
            Col := Col + 1
         else
         if Row < RowCount-1 then
         begin
            Row := Row + 1;
            Col := 1;
         end
         else
         begin
            Row := 1;
            Col := 1;
         end;
end;

// Табуляция по колонкам
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
   if Key = #13 then
      with Sender as TStringGrid do
         if Row < RowCount-1 then
            Row := Row + 1
         else
         if Col < ColCount-1 then
         begin
            Col := Col + 1;
            Row := 1;
         end
         else
         begin
            Col := 1;
            Row := 1;
         end;
end;


Как определить, отображаются ли полосы прокрутки в TStringGrid?

procedure TForm1.Button1Click(Sender: TObject);
begin
   if ( GetWindowlong( StringGrid1.Handle, GWL_STYLE ) and WS_VSCROLL ) <> 0 then
      ShowMessage( 'Вертикальный ScrollBar виден' );

   if ( GetWindowlong( StringGrid1.Handle, GWL_STYLE ) and WS_HSCROLL ) <> 0 then
      ShowMessage( 'Горизонтальный ScrollBar виден' );
end;


Как сменить цвет выделения в TStringGrid?

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
   if gdSelected in State then
      with TStringGrid(Sender), Canvas do
      begin
         Brush.Color := clLime;
         FillRect(Rect);
         TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol,ARow]);
      end;
end;


Как снять выделение в TStringGrid?

procedure GridClean( StringGrid: TStringGrid );
var
  hGridRect: TGridRect;
begin
   hGridRect.Top := -1;
   hGridRect.Left := -1;
   hGridRect.Right := -1;
   hGridRect.Bottom := -1;
   StringGrid.Selection := hGridRect;
end;

procedure TForm1.StringGrid1Exit(Sender: TObject);
begin
   GridClean( Sender as TStringGrid );
end;


Как изменить цвет выделенных ячеек, когда TStringGrid неактивен?

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
   if Sender = ActiveControl then
      Exit;
   if not ( gdSelected in State ) then
      Exit;
   with Sender as TStringGrid do
   begin
      Canvas.Brush.Color := clYellow;
      Canvas.Font.Color := Font.Color;
      Canvas.TextRect( Rect, Rect.Left + 2, Rect.Top + 2, Cells[ACol,ARow] );
   end;
end;


Как очистить ячейки в TStringGrid?

// Способ первый
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: Integer;
begin
   with StringGrid1 do
      for i := 0 to ColCount-1 do
         for j := 0 to RowCount-1 do
            Cells[i,j] := '';
end;

// Способ второй
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
   for i := 0 to StringGrid1.RowCount-1 do
      StringGrid1.Rows[i].Clear;
end;

// Способ третий
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
   for i := 0 to StringGrid1.ColCount-1 do
      StringGrid1.Cols[i].Clear;
end;


Как очистить строку в TStringGrid?

// Очищаем вторую строку
procedure TForm1.Button1Click(Sender: TObject);
begin
   StringGrid1.Rows[1].Clear;
end;


Как очистить столбец в TStringGrid?

// Очищаем второй столбец
procedure TForm1.Button1Click(Sender: TObject);
begin
   StringGrid1.Cols[1].Clear;
end;

При использовании материала - ссылка на сайт обязательна