Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Позиционирование каретки в TStringGrid

Delphi , ОС и Железо , Мышка и Курсор

Позиционирование каретки в TStringGrid

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  The following code allows you to position the caret 
  in a cell (InplaceEditor) of a StringGrid. 
  We need a Cracker class to access the InplaceEditor. 

  Mit folgendem Code kann man den Cursor in einer Zelle 
  (InplaceEditor) eines StringGrids positionieren. 
  Hierfur brauchen wir eine "Cracker" Klasse, weil der 
  InplaceEditor "protected" ist. 
}

 type
   TGridCracker = class(TStringGrid);

    {...}

 implementation

 {...}

 procedure SetCaretPosition(Grid: TStringGrid; col, row, x_pos: Integer);
 begin
   Grid.Col := Col;
   Grid.Row := Row;
   with TGridCracker(Grid) do
     InplaceEditor.SelStart := x_pos;
 end;

 // Get the Caret position from the focussed cell 
// Ermittelt die Caret-Position der aktuellen Zelle 
function GetCaretPosition(Grid: TStringGrid): Integer;
 begin
   with TGridCracker(Grid) do
     Result := InplaceEditor.SelStart;
 end;

 // Example / Beispiel: 

// Set the focus on col 1, row 3 and position the caret at position 5 
// Fokusiert die Zelle(1,3) und setzt den Cursor auf Position 5 

procedure TForm1.Button1Click(Sender: TObject);
 begin
   StringGrid1.SetFocus;
   SetCaretPosition(StringGrid1, 1, 3, 5);
 end;

Программный код, который позволяет позиционировать курсор (карету) в конкретной ячейке таблицы TStringGrid. Курсор используется для редактирования ячеек в таблице.

Основные компоненты:

  1. TGridCracker: Кастомная класс, которая наследуется от TStringGrid. Этот класс позволяет доступ к InplaceEditor, который защищен по умолчанию.
  2. SetCaretPosition: Процедура, которая устанавливает позицию курсора в конкретной ячейке таблицы. Она принимает три параметра: grid, номер столбца, номер строки и координата x (0-основанная).
  3. GetCaretPosition: Функция, которая возвращает текущую позицию курсора в фокусированной ячейке.

Пример: Обработчик события клика кнопки демонстрирует, как использовать эти процедуры для установки фокуса на конкретной ячейке и позиционирования курсора в конкретном месте.

Разбивка кода:

type
  TGridCracker = class(TStringGrid);

implementation

procedure SetCaretPosition(Grid: TStringGrid; col, row, x_pos: Integer);
begin
  Grid.Col := Col;
  Grid.Row := Row;
  with TGridCracker(Grid) do
    InplaceEditor.SelStart := x_pos;
end;

function GetCaretPosition(Grid: TStringGrid): Integer;
begin
  with TGridCracker(Grid) do
    Result := InplaceEditor.SelStart;
end;

// Пример:
procedure TForm1.Button1Click(Sender: TObject);
begin
  StringGrid1.SetFocus;
  SetCaretPosition(StringGrid1, 1, 3, 5);
end;

В примере, когда кнопка кликается, она устанавливает фокус на ячейке (1,3) и позиционирует курсор в положении 5. Курсор может быть перемещен с помощью клавиатуры или других стандартных операций редактирования.

Обратите внимание, что этот код предполагает, что у вас есть компонент TStringGrid, имя которого StringGrid1 в вашем формате. Вам нужно заменить это на имя вашего контрола таблицы, если оно отличается.

Позиционирование каретки в TStringGrid позволяет с помощью класса TGridCracker доступа к InplaceEditor и управлять его положением, определив столбец, строку и позицию курсора.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Мышка и Курсор ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-17 20:42:56/0.005469799041748/1