Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Probleme mit RichEdit (https://www.delphipraxis.net/200655-probleme-mit-richedit.html)

Steffen0917 12. Mai 2019 21:47

Probleme mit RichEdit
 
Hallo zusammen,

ich habe Probleme beim Formatieren von Text in RichEdit.
Mit diesem Code kann ich die Textattribute verändern (Farbe, Fett, usw.):

Delphi-Quellcode:
 DBRichEdit1.SelStart:=0;
 DBRichEdit1.Font.Name:=form1.BFont.Name;
 DBRichEdit1.Font.Color:=form1.BFont.Color;
 DBRichEdit1.Font.Size:=form1.BFont.Size;
 DBRichEdit1.SelAttributes.Assign(DBRichEdit1.Font);
Mit diesem Code erkennt das RichEdit URLs und öffnet diese mit einem Click:

Delphi-Quellcode:
//create
    mask := SendMessage(DBRichEdit1.Handle, EM_GETEVENTMASK, 0, 0);
    SendMessage(DBRichEdit1.Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK);
    SendMessage(DBRichEdit1.Handle, EM_AUTOURLDETECT, Integer(True), 0);
    FOldWndProc := DBRichEdit1.Parent.WindowProc;
    DBRichEdit1.Parent.WindowProc := NewWndProc;

procedure TForm4.NewWndProc(var Message: TMessage);
var
  p: TENLink;
  strURL: string;
begin
  if (Message.Msg = WM_NOTIFY) then
  begin
    if (PNMHDR(Message.lParam).code = EN_LINK) then
    begin
      p := TENLink(Pointer(TWMNotify(Message).NMHdr)^);
      if (p.Msg = WM_LBUTTONDOWN) then
      begin
        SendMessage(DBRichEdit1.Handle, EM_EXSETSEL, 0, Longint(@(p.chrg)));
        strURL := DBRichEdit1.SelText;
        ShellExecute(Handle, 'open', PChar(strURL), nil, nil, SW_SHOWNORMAL);
      end
    end
  end;
  if Assigned(FOldWndProc) then
    FOldWndProc(Message);
end;
Beides klappt prima - für sich alleine.

Zusammen allerdings blockieren sich die beiden Funktionen. Beides funktioniert dann nicht mehr.

Was mache ich falsch?

peterbelow 13. Mai 2019 11:02

AW: Probleme mit RichEdit
 
Zitat:

Zitat von Steffen0917 (Beitrag 1432034)
Hallo zusammen,

ich habe Probleme beim Formatieren von Text in RichEdit.
Mit diesem Code kann ich die Textattribute verändern (Farbe, Fett, usw.):

Delphi-Quellcode:
 DBRichEdit1.SelStart:=0;
 DBRichEdit1.Font.Name:=form1.BFont.Name;
 DBRichEdit1.Font.Color:=form1.BFont.Color;
 DBRichEdit1.Font.Size:=form1.BFont.Size;
 DBRichEdit1.SelAttributes.Assign(DBRichEdit1.Font);
Was mache ich falsch?

Lass den dbrichedit1.Font in Frieden, das ist nur der Default-Font, und den muss man nicht verwenden. SelAttributes.Assign(Bfont) sollte direkt funktionieren.

Vermutlich tust Du irgendwas, was das Window-Handle des richedits neu erzeugt, und dadurch gehen deine Settings verloren. Um das zu vermeiden mußt Du eine Komponente von TDBRichedit ableiten und ihre CreateWnd-Methode überschreiben. Mach dort die Settings nach dem Aufruf der ererbten Methode. Du kannst dann auch direkt einen Messagehandler für CN_NOTIFY anlegen (oder überschreiben, das Control erbt schon einen von TRichedit, glaube ich) und damit das Handling der URLs direkt im Control implementieren, eventuell dafür einen eigenen Event anbieten, den das Form verwenden kann. Die VCL "reflektiert" eine WM_NOTIFY-Message als CN_NOTIFY an das Control, so dass man die Bearbeitung dort machen kann, wo sie hingehört, und nicht im parent des Controls.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 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