Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi RichEdit Hintergrundfarbe ändern klappt nicht?? (https://www.delphipraxis.net/160332-richedit-hintergrundfarbe-aendern-klappt-nicht.html)

user64629 8. Mai 2011 20:52

RichEdit Hintergrundfarbe ändern klappt nicht??
 
Hallo Forum,
diesmal mit einem (wahrscheinlich) gaaanz dummen Fehler... Irgendwie kann ich bei mir die Hintergrundfarbe bei einem RichEdit nicht ändern...
Hier mal der Quelltext:

Delphi-Quellcode:
uses ...RichEdit;

var Hintergrundfarbe: TColor;
    Formatierung: TCharFormat2;

procedure TEditor.GelbExecute(Sender: TObject);
begin
 Hintergrundfarbe := clYellow;
 TexthervorhebungsfarbeExecute(Gelb);
end;

procedure TEditor.HellgrünExecute(Sender: TObject);
begin
 Hintergrundfarbe := clLime;
 TexthervorhebungsfarbeExecute(Hellgrün);
end;

...

procedure TEditor.TexthervorhebungsfarbeExecute(Sender: TObject);
begin
 Formatierung.cbSize := SizeOf(Formatierung);
 Formatierung.dwMask := Formatierung.dwMask or CFM_BACKCOLOR;
 Formatierung.crBackColor := Hintergrundfarbe;
 SendMessage(Text.Handle, EM_SETCHARFORMAT, SCF_SELECTION, LongInt(@Formatierung));
end;
Ich hab auch http://swissdelphicenter.ch/de/showcode.php?id=1438 durchsucht und eins zu eins übernommen, es scheint einfach nicht zu klappen...???

DeddyH 9. Mai 2011 07:16

AW: RichEdit Hintergrundfarbe ändern klappt nicht??
 
In einem kurzen Test hat das hier zumindest bei mir funktioniert:
Delphi-Quellcode:
var
  Formatierung: TCharFormat2;
begin
  Formatierung.cbSize := SizeOf(Formatierung);
  SendMessage(RichEdit1.Handle, EM_GETCHARFORMAT, SCF_SELECTION,
    LongInt(@Formatierung));
  Formatierung.dwMask := Formatierung.dwMask or CFM_BACKCOLOR;
  Formatierung.dwEffects := Formatierung.dwEffects and not CFE_AUTOBACKCOLOR;
  Formatierung.crBackColor := clRed;
  SendMessage(RichEdit1.Handle, EM_SETCHARFORMAT, SCF_SELECTION,
    LongInt(@Formatierung));
end;

user64629 9. Mai 2011 12:46

AW: RichEdit Hintergrundfarbe ändern klappt nicht??
 
Okay ich weiß zwar nicht wieso es voher geklappt hat, aber mit dem Zusatz von

Delphi-Quellcode:
 Formatierung.dwEffects := Formatierung.dwEffects and not CFE_AUTOBACKCOLOR;
klappt es jetzt...
Danke :thumb:

DeddyH 9. Mai 2011 12:52

AW: RichEdit Hintergrundfarbe ändern klappt nicht??
 
Das steht im MSDN zur CHARFORMAT2-Struktur:
Zitat:

CFE_AUTOBACKCOLOR
The background color is the return value of GetSysColor(COLOR_WINDOW). If this flag is set, crBackColor member is ignored.

user64629 9. Mai 2011 13:05

AW: RichEdit Hintergrundfarbe ändern klappt nicht??
 
Ja hab ich nicht dran gedacht, weil es komischerweise vorher ohne funktioniert hat...

DeddyH 9. Mai 2011 13:10

AW: RichEdit Hintergrundfarbe ändern klappt nicht??
 
Dann war das Flag wohl vorher nicht gesetzt. Ich denke aber, dass man mit der Vorgehensweise
- aktuelle Formatierung ermitteln
- manipulieren
- zurückschreiben
am besten fährt, wie man hier sieht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.

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