Извините, если форматирование ниже немного отключено.
Попытка получить подчеркнутый текст из элемента управления Richedit, чтобы определить, является ли гиперссылка при нажатии.
Этот код работал в Delphi 2007и ниже.Я знаю, что есть структура TCharFormat2, и кодировка символов, возможно, изменилась.
Хотя мне не повезло изменить их.
Любая помощь очень ценится.Спасибо.
----------------------------------------
function GetUnderlinedText( ARichEdit: TRichEdit; CharIdx: Integer ): String;
var
i: Integer;
CharFormat: TCharFormat;
SelStart: Integer;
begin
CharFormat.cbSize := SizeOf( TCharFormat );
CharFormat.dwMask := CFM_UNDERLINE;
ARichEdit.SelStart := CharIdx;
SendMessage( ARichEdit.Handle, EM_GETCHARFORMAT, 1, Integer( @CharFormat ) );
//------- If not underlined return empty str. ------------
if (CharFormat.dwEffects and CFE_UNDERLINE)=0 then
begin
Result := '';
Exit;
end;
//--------- Find Beginning of Underlined Text ------------
i := CharIdx;
while (i>0) do
begin
ARichEdit.SelStart := i;
//------------ Check for New Line Char -----------------
if( ARichEdit.Text[i]=#10 ) then
Break;
SendMessage( ARichEdit.Handle, EM_GETCHARFORMAT, 1, Integer( @CharFormat ) );
//----------- Test if Character was Underlined ---------
if (CharFormat.dwEffects and CFE_UNDERLINE)=0 then
begin
Break;
end;
Dec( i );
end;
//------------ Find Length of Underlined Text ------------
SelStart := i;
i:=1;
while (SelStart+i &< Length( ARichEdit.Text ) ) do //subtract the & from line
begin
ARichEdit.SelStart := SelStart + i;
//------------ Check for New Line Char -----------------
if( ARichEdit.Text[SelStart+i]=#10 ) then
Break;
SendMessage( ARichEdit.Handle, EM_GETCHARFORMAT, 1, Integer( @CharFormat ) );
//----------- Test if Character was Underlined ---------
if (CharFormat.dwEffects and CFE_UNDERLINE)=0 then
begin
Break;
end;
Inc( i );
end;
ARichEdit.SelStart := SelStart;
ARichEdit.SelLength := i;
Result := Trim(ARichEdit.SelText);
ShowMessage( Result ); //Seems to be showing only part of the underlined text
end;