Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Richedit: Alte Hyperlinks verschwinden (https://www.delphipraxis.net/120173-richedit-alte-hyperlinks-verschwinden.html)

Neutral General 6. Sep 2008 17:41


Richedit: Alte Hyperlinks verschwinden
 
Hi,

Habe nen Class-Helper für TRichedit geschrieben mit einer Methode:

Delphi-Quellcode:
procedure TRicheditLink.SelectionToLink;
var CF: TCharFormat;
begin
  FillChar(CF2,SizeOf(CF2),0);      
  CF.cbSize:=SizeOf(CF2);
  CF.dwMask:= CFM_LINK;
  CF.dwEffects := CFE_LINK;
 
  SendMessage(Handle,EM_SETCHARFORMAT,SCF_SELECTION,LParam(@CF));
end;
Soweit, sogut. Allerdings verschwindet Link x-1 beim erstellen von Link x. :gruebel:

Beispiel ('Test' soll "gelinkt" werden)

Delphi-Quellcode:
Add('Test');
// SelectionToLink (mit dem zuletzt hinzugefügten)
Ergebnis
Test


Delphi-Quellcode:
Add('Test');
// SelectionToLink (mit dem zuletzt hinzugefügten)
Add('Test');
// SelectionToLink (mit dem zuletzt hinzugefügten)
Ergebnis

Test
Test


Gibts dazu ne Erklärung + Lösung?

Flocke 7. Sep 2008 09:56

Re: Richedit: Alte Hyperlinks verschwinden
 
Ich schau jetzt gerade nicht in die VCL-Sourcen, aber es könnte daher kommen, dass CFE_LINK nicht in RTF dargestellt werden kann, also ein temporäres Format ist. Funktioniert es vielleicht, wenn du die Zeilen mit
Delphi-Quellcode:
SendMessage(Handle, EM_REPLACESEL, 0?, PChar(Zeile + #13#10));
anstatt mit "Add" hinzufügst?

Neutral General 7. Sep 2008 11:22

Re: Richedit: Alte Hyperlinks verschwinden
 
Hi,

Ich füge eine Reihe bisher zu hinzu:

Delphi-Quellcode:
Lines.Add('');
SelStart := Length(Text);
SelText := NewLine;

// NewLine parsen und ggf. Links setzen.
Ist das nicht ungefähr das, was die Msg auch machen würde?

PS: Hab was neues rausgefunden o.O

Also bei mir sollen Stellen der Art #Zahl "gelinkt" werden.

Angenommen ich schreiben:

Zitat:

Test #23 #45 bla #67
=>

Zitat:

Test #23 #45 bla #67
Dann schreibe ich darunter:

Zitat:

Test
Ergebnis:

Zitat:

Test #23 #45 bla #67
Test
Mhhh. Und diese anderen beiden bleiben auch für immer erhalten. Es wird nur bei einer neuen Reihe der jeweils letzte Link gelöscht. egal ob in der neuen Reihe ein Link vorkommt oder nicht. Wenn man mehrere schreibt wird nur der letzte gelöscht, die anderen bleiben für immer. :wiejetzt:

Neutral General 8. Sep 2008 16:57

Re: Richedit: Alte Hyperlinks verschwinden
 
Hilfe :shock: :?

Flocke 8. Sep 2008 17:59

Re: Richedit: Alte Hyperlinks verschwinden
 
Fällt mir so auf Anhieb nix weiter ein. Hier noch ein paar Dinge, die du versuchen könntest:

Wird der Link auch entfernt, wenn danach noch Text kommt? Wenn nein, einfach ein Leerzeichen dranhängen.

"Length(Text)" ist übrigens ziemlich ineffizient, nimm statt dessen lieber GetTextLen.

Wie setzt du denn die Links? Genauer gesagt: wie findest du aus der Position im "NewLine" die Positionen für SelStart und SelLength im RichEdit raus?

Könntest du statt "Lines.Add('')" auch einfach ein sLineBreak vor "NewLine" hängen? Also
Delphi-Quellcode:
SelStart := GetTextLen;
SelText := #13#10 + NewLine;

Neutral General 8. Sep 2008 18:52

Re: Richedit: Alte Hyperlinks verschwinden
 
Zitat:

Zitat von Flocke
Wird der Link auch entfernt, wenn danach noch Text kommt? Wenn nein, einfach ein Leerzeichen dranhängen.

Wenn ich ein Leerzeichen dranhänge gehts jetzt. Ist zwar imo nicht die schönste Lösung aber besser als gar keine Lösung ;-)

Danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz