AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme mit RichEdit

Ein Thema von Steffen0917 · begonnen am 12. Mai 2019 · letzter Beitrag vom 13. Mai 2019
Antwort Antwort
Steffen0917

Registriert seit: 20. Jun 2005
64 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Probleme mit RichEdit

  Alt 12. Mai 2019, 22:47
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?
Steffen
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
669 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Probleme mit RichEdit

  Alt 13. Mai 2019, 12:02
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.
Peter Below
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 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