Копирует содержимое ячеек StringGrid в ClipBoard в формате, позволяющем

вставку, например, в Word или Excel. При CopySel=True копирует выделение,

иначе всю таблицу или указанный диапазон (CL- левый столбец и т.д.).

Code:

Grid.Row := YourRowNumber;

Grid.TopRow := YourFirstVisibleRow;

Grid.LeftCol := YourFirstVisibleColumn;

 

 

Я наконец нашел время и создал заказной компонент TWrapGrid, функционально идентичный TStringGrid, но умеющий переносить текст в ячейках. Пока это бета-версия, поэтому поэкспериментируйте с ним, и в случае наличия каких-либо замечаний или предложений не забудьте уведомить об этом меня. При использовании компонента не забывайте про RowHeights (или DefaultRowHeight), т.к. при переносе текста потребуется отобразить несколько строк.

 Для использования скопируйте код в модуль, сохраните его с именем 'Wrapgrid.PAS' и следуйте за инструкциями, расположенными в верхней части кода.

 Присылайте свой комментарии и пожелания. Вот код: 

Если вы создаете собственный обработчик компонента TStringGrid OnDrawCell, то вы можете нарисовать все, что вам заблагорассудится. Попробуйте, к примеру, это:

Автор: Rick Rogers

 У меня есть StringGrid, который выглядит очень красивым, за исключением заголовков колонок, где я хотел бы иметь их размер равным 1 ячейке, но с заголовком, размещенным в нескольких строках, например,

Индекс Фондовой Биржи

показывалось бы как

  Индекс

 Фондовой

 Биржи

было бы классно, если можно было этот заголовок размещать еще и по центру.

Рисовать сами ячейки вы можете в обработчике события OnDrawCell. Для определения ячейки (заголовок?), обрабатываемой в текущий момент, используйте параметр GridState.

 

Я выводил тест с помощью обычных методов рисования (которые хорошо "приживаются" в данном компоненте), с поддержкой вертикального выравнивания, полей и переноса слов. Вот сам код:

 

Автор: Simon

Code:

procedure SetGridFocus(SGrid: TStringGrid; r, c: integer);

var

SRect: TGridRect;

begin

with SGrid do

begin

   SetFocus; {Передаем фокус сетке}

   Row := r; {Устанавливаем Row/Col}

   Col := c;

   SRect.Top := r; {Определяем выбранную область}

   SRect.Left := c;

   SRect.Bottom := r;

   SRect.Right := c;

   Selection := SRect; {Устанавливаем выбор}

end;

end;

 

 

 

//Для вызова процедуры:

 

 

SetGridFocus(StringGrid1, 10, 2);

 

Это всегда срабатывает в случае, если никакая ячейка не выбрана или фокус имеет другой элемент управления.

 

Code:

Procedure GridRemoveColumn(StrGrid: TStringGrid; DelColumn: Integer);

Var Column: Integer;

begin

If DelColumn <= StrGrid.ColCount then

Begin

   For Column := DelColumn To StrGrid.ColCount-1 do

     StrGrid.Cols[Column-1].Assign(StrGrid.Cols[Column]);

   StrGrid.ColCount := StrGrid.ColCount-1;

End;

end;

Данный код переводит ввод на другую колонку. При достижении конца колонок, ввод перемещается на следующую строку. При достижении самого конца сетки, управление перемещается в ее самое начало - естественно, вы можете изменить это поведение, и передавать управление в этом случае другому элементу управления.

 

Пользователь может перемещать строки и колонки StringGrid при помощи мышки. Можно ли это сделать программно? В описании TCustomGrid можно увидеть методы MoveColumn и MoveRow, однако они скрыты в TStringGrid. Но нам ничего не мешает просабклассить TStringGrid и объявить эти методы как public:

Следующий пример демонстрирует перехват сообщения CM_DIALOGCHAR на уровне формы. Это даст нам возможность реагировать на диалоговые комбинации клавишь только, если нажата клавиша Alt, не давая тем самым отработать стандартному обработчику.

Code:

{ **** UBPFD *********** ****

>> Обмен строк StringGrid

 Обмен содержимого указанных строк StringGrid.

Варианты без копирования связанных с ячейками объектов и вместе с ними.

Зависимости: Grids

Автор:       Борис Новгородов (MBo), Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра., Новосибирск

Copyright:   MBo

***************************************************** }

procedure SGExchangeRows(SG: TStringGrid; Row1, Row2: Integer);

var

TempString: string;

begin

if (Row1 in [0..SG.RowCount - 1]) and (Row2 in [0..SG.RowCount - 1]) then

begin

   TempString := SG.Rows[Row1].Text;

   SG.Rows[Row1].Assign(SG.Rows[Row2]);

   SG.Rows[Row2].Text := TempString;

end;

end;

 

procedure SGExchRowsWithObj(SG: TStringGrid; Row1, Row2: Integer);

var

TempList: TStringList;

begin

with SG do

   if (Row1 in [0..RowCount - 1]) and (Row2 in [0..RowCount - 1]) then

   begin

     TempList := TStringList.Create;

     TempList.Assign(Rows[Row1]);

     Rows[Row1].Assign(Rows[Row2]);

     Rows[Row2].Assign(TempList);

     TempList.Free;

   end;

end;