TRichEdit transparent bzw. mit Hintergrund
Hi!
Ich habe schon viel herumgesucht, nur nichts hilfreiches gefunden. Ich möchte das TRichEdit auch nicht auf ein Bild kopieren und dort den Hintergrund einblenden, weil ich gerne das markieren etc. behalten würde. Ich habe probiert die Message WM_ERASEBKGND abzufangen und dort den Hintergrund zu zeichnen, dann sieht man nur die aktuelle Zeile, und die auch mit schwarzem Hintergrund. Auch die Message WM_PAINT hat mir nicht weitergeholfen Habt ihr noch eine Idee oder auch eine andere Komponente? Ich brauche das RichEdit eigentlich nur zum Anzeigen, markieren sollte aber trotzdem möglich sein. Eine Möglichkeit wäre noch TWebBrowser bzw. TMozillaBrowser (ich glaube so heißt die FireFox-Kompo) zu verwenden, aber das würde das Programm wieder unnötig aufblasen... LG, ich |
Re: TRichEdit transparent bzw. mit Hintergrund
Es sollte mit einer RichEdit-Komponente funktionieren, die Version 3 oder höher unterstützt (z.B. das TJvRichEdit von den Jedis). Davon musst du eine eigene Klasse ableiten und dort in der Methode CreateParams das Bit WS_EX_TRANSPARENT hinzufügen:
Delphi-Quellcode:
Danach sollte das RichEdit einen transparenten Hintergrund haben.
TJvRichEdit_Transparent.CreateParams(var Params: TCreateParams);
begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT; end; |
Re: TRichEdit transparent bzw. mit Hintergrund
Danke mal, aber irgendwie wills bei mir nicht. Es zeigt das RichEdit zwar an, aber nicht transparent. Frage dazu - müsste das dann nicht auch mit setWindowLong und GWL_EXSTYLE gehen?
LG, ich |
Re: TRichEdit transparent bzw. mit Hintergrund
Liste der Anhänge anzeigen (Anzahl: 1)
Zu deiner Frage: es kann sein, muss aber nicht. Meine Vermutung ist, dass das RichEdit-Control die Bits nur in WM_CREATE auswertet und danach nicht mehr.
Zur Transparenz: bei mir funktionierts - allerdings mit einer komplett eigenen Komponente und nicht TJvRichEdit. Ggf. musst du noch WM_ERASEBKGND abfangen und einfach 1 zurückliefern:
Delphi-Quellcode:
Das angehängte Bild zeigt einen völlig sinnlosen Text in einem transparent RichEdit-Control. Kleines Problem sind nur die Scrollbars, die stellenweise nicht neu gezeichnet werden.
procedure TJvRichEdit_Transparent.WMEraseBkgnd(var Msg: TWMEraseBkgnd);
begin Msg.Result := 1; end; |
Re: TRichEdit transparent bzw. mit Hintergrund
Hi,
oder nimm das JvRichEdit. Da kannst du ein Hintergrundbild festlegen. Florian |
Re: TRichEdit transparent bzw. mit Hintergrund
Ist mir irgendwie nicht aufgefallen - mit welcher Eigenschaft? Oder als Objekt? - Geht es dann auch "fixed"?
LG, ich |
Re: TRichEdit transparent bzw. mit Hintergrund
Zitat:
Florian |
Re: TRichEdit transparent bzw. mit Hintergrund
Gibts aber nicht - zumindestens nicht bei mir...
LG, ich |
Re: TRichEdit transparent bzw. mit Hintergrund
Seltsam ... ich bin mir sicher, dass ich eine solche Eigenschaft mal bei einer RichEdit ähnlichen Komponente in den Jedis gesehen habe. Hast du die neuste Version?
|
Re: TRichEdit transparent bzw. mit Hintergrund
Ich habe Version 3.10...
LG, ich PS: Entschuldige, wenn ich in nächster Zeit nicht antworte, ich habe nicht unbedingt dann Zeit. |
Re: TRichEdit transparent bzw. mit Hintergrund
***Push***
Ich habe jetzt die Komponente TJvPanel gesehen, die man ja transparent machen kann, aber irgendwie funktioniert das, so wie es das TJvPanel macht, mit den anderen Komponenten nicht... Ich habe auch schon probiert, das TRichEdit auf ein Form zu geben und dann via TransparentColorValue transparent zu machen - das hat grundsätzlich funktioniert, nur sobald ich dem Form als Parent mein HauptForm gegeben habe war die Transparenz wieder weg, warum eigentlich? LG, ich |
Re: TRichEdit transparent bzw. mit Hintergrund
Also ich habe gerade meinen ersten Hinweis noch einmal ausprobiert mit:
Delphi-Quellcode:
und das funktioniert bei mir einwandfrei - auf jeden Fall so, dass man eine Bitmap dahinter legen kann, die durch den Text hindurchscheint (siehe Screenshot im Posting weiter oben).
unit TransparentRichEdit;
interface uses SysUtils, Windows, Messages, Classes, Controls, JvRichEdit; type TTransparentRichEdit = class(TJvRichEdit) private procedure WMEraseBkGnd(var Message: TWMEraseBkGnd); message WM_ERASEBKGND; protected procedure CreateParams(var Params: TCreateParams); override; end; implementation { TTransparentRichEdit } procedure TTransparentRichEdit.CreateParams(var Params: TCreateParams); begin inherited; Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT; end; procedure TTransparentRichEdit.WMEraseBkGnd(var Message: TWMEraseBkGnd); begin Message.Result := 1; end; end. |
Re: TRichEdit transparent bzw. mit Hintergrund
VIELEN, VIELEN DANK! :thumb:
Jetzt funktionierts! Bitte entschuldige vielmals, ich habe deinen oberen Post irgendwie nur halb gelesen, ich habe es da nur mit WM_ERASEBKGND ausprobiert und nicht beides zusammen; ich weiß irgendwie nicht warum, wundert mich jetzt voll. Und das Beispiel-Bild - der "Beweis", dass es so gehen muss - ist mir irgendwie auch nicht aufgefallen, obwohl ich normalerweise auf Bilder immer scharf bin. :zwinker: LG, ich :dp: |
Re: TRichEdit transparent bzw. mit Hintergrund
öööhhhmmm... könnt ihr das Gnaze auch noch mal für Blöde erklrären :)
ich versuche gerade ein bild hintergrundbild in meine richedit zu packen... aber irgendwie will es niht ... |
Re: TRichEdit transparent bzw. mit Hintergrund
Als Basis brauchst du die JVCL oder eine andere RichEdit-Komponente die die neuere Version der RichEdit-DLLs nutzt - mit der Standardkomponente geht's nicht.
Speichere das hier:
Delphi-Quellcode:
in der Datei "TransparentRichEdit.pas" und installiere es als Komponente.
unit TransparentRichEdit;
interface uses SysUtils, Windows, Messages, Classes, Controls, JvRichEdit; type TTransparentRichEdit = class(TJvRichEdit) private procedure WMEraseBkGnd(var Message: TWMEraseBkGnd); message WM_ERASEBKGND; protected procedure CreateParams(var Params: TCreateParams); override; end; procedure Register; implementation { TTransparentRichEdit } procedure TTransparentRichEdit.CreateParams(var Params: TCreateParams); begin inherited; Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT; end; procedure TTransparentRichEdit.WMEraseBkGnd(var Message: TWMEraseBkGnd); begin Message.Result := 1; end; procedure Register; begin RegisterComponents('Win32', [TTransparentRichEdit]); end; end. Die hat dann einen transparenten Hintergrund, d.h. du kannst ein TImage dahinter legen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 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