Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TRichEdit transparent bzw. mit Hintergrund (https://www.delphipraxis.net/72967-trichedit-transparent-bzw-mit-hintergrund.html)

Delphi-Freak 10. Jul 2006 11:44


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

Flocke 10. Jul 2006 23:11

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:
TJvRichEdit_Transparent.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
end;
Danach sollte das RichEdit einen transparenten Hintergrund haben.

Delphi-Freak 11. Jul 2006 11:07

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

Flocke 11. Jul 2006 19:13

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:
procedure TJvRichEdit_Transparent.WMEraseBkgnd(var Msg: TWMEraseBkgnd);
begin
  Msg.Result := 1;
end;
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.

Zacherl 11. Jul 2006 19:16

Re: TRichEdit transparent bzw. mit Hintergrund
 
Hi,
oder nimm das JvRichEdit. Da kannst du ein Hintergrundbild festlegen.

Florian

Delphi-Freak 11. Jul 2006 20:18

Re: TRichEdit transparent bzw. mit Hintergrund
 
Ist mir irgendwie nicht aufgefallen - mit welcher Eigenschaft? Oder als Objekt? - Geht es dann auch "fixed"?

LG, ich

Zacherl 11. Jul 2006 20:29

Re: TRichEdit transparent bzw. mit Hintergrund
 
Zitat:

Zitat von Delphi-Freak
Ist mir irgendwie nicht aufgefallen - mit welcher Eigenschaft? Oder als Objekt? - Geht es dann auch "fixed"?

Die JvRichEdit Komponente? Die Eigenschaft heißt glaube ich "BackgroundImage" Ob "fixed" geht, weiß ich nicht. Meine aber es wäre sogar immer "fixed". Versuchs einfach mal ...

Florian

Delphi-Freak 11. Jul 2006 20:31

Re: TRichEdit transparent bzw. mit Hintergrund
 
Gibts aber nicht - zumindestens nicht bei mir...

LG, ich

Zacherl 11. Jul 2006 20:46

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?

Delphi-Freak 11. Jul 2006 20:51

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.

Delphi-Freak 20. Jul 2006 12:53

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

Flocke 20. Jul 2006 14:51

Re: TRichEdit transparent bzw. mit Hintergrund
 
Also ich habe gerade meinen ersten Hinweis noch einmal ausprobiert mit:
Delphi-Quellcode:
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.
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).

Delphi-Freak 20. Jul 2006 15:08

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:

Real_Thunder 31. Jul 2006 03:22

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 ...

Flocke 31. Jul 2006 07:18

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:
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.
in der Datei "TransparentRichEdit.pas" und installiere es als Komponente.

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