TCustomRichView.GetWordAt, GetWordAtA, GetWordAtW

<< Нажмите, чтобы показать Содержание >>

TCustomRichView.GetWordAt, GetWordAtA, GetWordAtW

Возвращает слово по заданным координатам.

procedure GetWordAt(X,Y: TRVCoord;

  out RVData: TCustomRVFormattedDataout ItemNo: Integer; 

  out Word: TRVUnicodeString); overload;

function GetWordAtA(X,Y: TRVCoord): TRVAnsiString;

function GetWordAtW(X,Y: TRVCoord): TRVUnicodeString

function GetWordAt(X,Y: TRVCoord): String;

Входные параметры:

(X,Y) клиентские координаты (относительно левого верхнего угла клиентской области окна компонента).

Выходные параметры:

Word (или возвращаемое значение в упрощённых версиях метода) получает слово (если это текстовый элемент) или имя нетестового элемента. «Слово» определяется как часть строки между разделителями. Разделители указаны в свойстве Delimiters.

ItemNo получает номер элемента, находящегося по координатам (X,Y), или -1, если по данным координатам нет элемента. Это номер элемента в документе RVData (это может быть основной документ, ячейка таблицы или документ редактора ячейки).

 

unicode Примечание про Юникод:

В компоненте строки хранятся в юникодном формате. GetWordAtAGetWordAt в неюникодных версиях Delphi) конвертирует юникодный текст в ANSI-строку на основе кодировки Style.DefCodePage.

GetWordAt возвращает:

ANSI-строку, как GetWordAtA, в Delphi 2007 и старее

юникодную строку (UTF-16), как GetWordAtW, в Delphi 2009 и новее

юникодную строку (UTF-8), в Lazarus

 

Например, можно использовать эти методы в событиях OnRVMouseDown и OnRVMouseUp.

Методы могут быть вызваны только если документ форматирован.

 

Пример: показ щёлкнутых элементов (только текстовых!) в Label1.

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

uses CRVFData;

...

procedure TForm1.RichView1RVMouseUp(Sender: TCustomRichView;

  Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: TRVCoord);

var

  LItemNo: Integer;

  LRVData: TCustomRVFormattedData;

  LWord: TRVUnicodeString;

begin

  ItemNo<0 then

    exit; // указатель мыши не над элементом

  Sender.GetWordAt(X,Y, LRVData, LItemNo, LWord);

  if LItemNo<0 then

    exit;

  if LRVData.GetItemStyle(LItemNo)>=0 then // текстовый элемент?

    Label1.Caption := LWord;

end;

 

См. также события:

OnRVMouseDown;

OnRVMouseUp;

OnRVRightClick;

OnRVDblClick.

См. также свойства:

Delimiters.

См. также методы:

SelectWordAt