Чтобы описать эту проблему, лучше всего протестировать мое приложение со следующим сценарием использования:
Применение: http://ubuntuone.com/p/nF/
- Открыть приложение;
- Нажмите на кнопку с надписью «>»;
- Снова нажмите на ту же кнопку;
- Нажмите на ту же кнопку еще раз.
Как видите, при первом расширении URL-адрес корректно обнаружен, а в дальнейшем - нет.
Надеемся получить исправление для этой проблемы с вашей помощью:)
В настоящее время я отправляю WM каждый раз, когда диалог расширяется, но он все равно не работает ...
Развернуть / свернуть фрагмент кода кода:
if (PreviewOpn.Caption = '<') and (Width >= 499) then // if form is expanded
begin
PreviewOpn.Caption := '>';
if CheckWin32Version(6,0) then begin
Constraints.MinWidth := 252; ClientWidth := Round(252 - ((Width - ClientWidth) / 2));
end else begin
Constraints.MinWidth := 248; ClientWidth := Round(248 - ((Width - ClientWidth) / 2));
end;
PopupActionBar1.Items[1].Enabled := False; PopupActionBar1.Items[1].Checked := False;
if (PreviewOpn.Caption = '<') and (Width >= 248) then PreviewOpn.Caption := '>';
end else // else if form is collapsed
begin
SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, EM_GETEVENTMASK or ENM_LINK); //|
SendMessage(RichEdit1.Handle, EM_AUTOURLDETECT, Integer(True), 0);
PreviewOpn.Caption := '<';
if CheckWin32Version(6,0) then begin
Constraints.MinWidth := 252; ClientWidth := Round(510 - ((Width - ClientWidth) / 2));
end else begin
Constraints.MinWidth := 248; ClientWidth := Round(499 - ((Width - ClientWidth) / 2));
end;
PopupActionBar1.Items[1].Enabled := True; PopupActionBar1.Items[1].Checked := True;
if (PreviewOpn.Caption = '>') and (Width >= 499) then PreviewOpn.Caption := '<';
if (FileExists(Edit1.Text)) or (FileExists(Edit2.Text)) or (FileExists(ParamStr(1)))
then RAWInputBtnClick(TabSet1);
end;
vClick(VKPInputBtn); // calls PopuMenu items enabling triggers
for n := 0 to RichEdit1.Lines.Count - 1 do if RichEdit1.Width < Canvas.TextWidth(RichEdit1.Lines[n]) then // enable automatic scroolbar settup
RichEdit1.ScrollBars := ssBoth;
Событие создания внутренних форм:
SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, EM_GETEVENTMASK or ENM_LINK); //|
SendMessage(RichEdit1.Handle, EM_AUTOURLDETECT, Integer(True), 0); //|
RichEdit1.Lines[5] := RichEdit1.Lines[5] + ' '; //| resend message for line to fix update issue
Как гласит документация http://msdn.microsoft.com/en-us/library/bb787991%28VS.85%29.aspx, URL-адрес обнаруживается путем изменения текста, что означает, что единственный способ повторно вызвать обнаружение - это отправить какое-то сообщение с добавлением / удалением символов, НО:
URL обнаруживается сразу после нажатия клавиши на клавиатуре и только в строке INSIDE.
Возможное исправление было бы довольно неприятно, и поэтому я даже не думаю разрабатывать код sinpp для этого :)
Идея: пропустите все доступные символы и, например, добавьте Char (# 10), а затем удалите Char (# 10).
Недостаток: представьте, что происходит с большим текстом RTF внутри элемента управления RichEdit ...