2012-01-17 17 views
5

EM_AUTOURLDETECT mesajını kullanarak TRichEdit bileşeni için URL algılamayı uygulamaya çalışıyorum.
Aşağıdaki kodu
TRichEdit'te EM_AUTOURLDETECT ayarlandıktan sonra URL bağlantıları nasıl belirlenir?

procedure TForm1.Button1Click(Sender: TObject); 
var Mask: Word; 
begin 
    Mask := SendMessage(Handle, EM_GETEVENTMASK, 0, 0); 
    SendMessage(Handle, EM_SETEVENTMASK, 0, Mask or ENM_LINK); 
    SendMessage(Handle, EM_AUTOURLDETECT, Integer(True), 0); 
end; 

olsa çalışır ile ilgili bir sorun var ama zaten yazılı metin URL'leri tespit almak için bu ayarlardan sonra TRichedit metnini değiştirmek zorunda. Sorun budur, çünkü bu özellik TRichEdit'im ReadOnly modundadır.

Bu kodu gerçekleştirdikten sonra, TRichEdit'i önceden yazılmış bir metindeki URL'leri algılamaya zorlamak için ne yapmalıyım?
documentation'a bakıyordum ama böyle bir şeyden bahsetmiyoruz.

Eğer

cevap

4

Bir süre önce aynı sorunu vardı ve bunun için (oldukça) kirli geçici çözüm kullandım ederiz. EM_AUTOURLDETECT mesajını gönderdikten sonra mevcut seçimi alıp kaydediyorum, sonra (re) zengin düzenleme metnini ayarlayıp daha önce kaydedilen seçimi geri getireceğim.

procedure TForm1.Button1Click(Sender: TObject); 
var 
    EventMask: Word; 
    CharRange: TCharRange; 
begin 
    EventMask := SendMessage(RichEdit1.Handle, EM_GETEVENTMASK, 0, 0); 
    SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, EventMask or ENM_LINK); 
    SendMessage(RichEdit1.Handle, EM_AUTOURLDETECT, WPARAM(True), 0); 
    SendMessage(RichEdit1.Handle, EM_EXGETSEL, 0, LPARAM(@CharRange)); 
    SendMessage(RichEdit1.Handle, WM_SETTEXT, 0, LPARAM(RichEdit1.Text)); 
    SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LPARAM(@CharRange)); 
end; 
+1

Teşekkürler TLama ama daha temiz bir teknik yok mu? Bir çeşit tek bildirim mi? TRichEdit'in metnini temizlemek ve ayarlamak için oldukça "ağır" görünüyor. –

+3

Dokümantasyonda aşağıdakiler var: _ Otomatik URL algılama etkinse, zengin düzenleme denetimi, metnin bir URL dosyasının formatıyla eşleşip eşleşmediğini belirlemek için değiştirilmiş herhangi bir metni tarar, böylece metin bu formatı almak için değiştirilmelidir. Zaten bilmiyorum zengin düzenlemede mevcut olan tüm kelimeler için sistemi 'CFE_LINK' etkisini uygulamak için zorlamak için daha kolay bir yol var. – TLama

+2

başka bir geçici çözüm AFIK. Basitleştirilmiş bir kod şöyle olurdu: 'SendMessage (RichEdit1.Handle, WM_SETTEXT, 0, Longint (RichEdit1.Text));' EM_AUTOURLDETECT' – kobik

İlgili konular