Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Transparenter Frame?! (https://www.delphipraxis.net/130350-transparenter-frame.html)

Flodding 6. Mär 2009 22:16


Transparenter Frame?!
 
Guten Abend :)

Wiedermal bin ich seit Stunden in gange und versuche diesesmal einen Frame durchsichtig zu machen... also den hintergrunde verschwinden zu lassen, aber die komponenten die drauf sind sollen sichtbar sein... sprich: ein Frame mit durchsichtigem hintergrund :P

ich hab viel gesucht nach fertigen komponenten bei torry und auch bei delphi32 und vclcomponents und vieeeele foren durchstöbert...

ich habe eine einzige quelle gefunden die mir plausibel erscheint... nur versteh ich nicht recht was ich machen soll... deshelb frag ich euch einfach mal in der hoffnung einer kann helfen :)

hier die quelle:

Zitat:

OK, after few days I'll amswer to that myself. It took me so long to figure it out.
I found it accidentaly - while browsing various examples of transparent windows. At that moment I had a working example of frame with wx.TRANSPARENT_WINDOW style set and had to redraw it often. In any other way there still was frame background. But...
If You'll set an extra style for the window using ctypes, all background drawing job goes to windows. So, I simply set WS_EX_LAYERED style. Window isn't set to be transparent at all. But bingo - there is no background and I can paint anything I want(semi-transparent background rectangles, opaque images and text etc..). And, what's most important - I don't need to redraw the frame. I shoot it and don't care about it anymore. Sad, but this works only under windows. But it's my goal for the moment...
ich habe mich gefragt was ist "ctypes", wx.TRANSPARENT_WINDOW und WS_EX_LAYERED und wo muss ich verwenden!?

jaenicke 6. Mär 2009 22:20

Re: Transparenter Frame?!
 
Also WS_EX_LAYERED kannst du z.B. mit SetWindowLong setzen, wie das geht siehst du z.B. hier:
http://www.delphipraxis.net/internal...t.php?t=119359

Flodding 6. Mär 2009 22:27

Re: Transparenter Frame?!
 
komm ich nicht mit klar :(

taaktaak 6. Mär 2009 22:36

Re: Transparenter Frame?!
 
Why not?
Delphi-Quellcode:
Beispielaufruf, um das Fenster mit dem Handle 67034 mit einer AlphaBlendValue von 150 transparent zu schalten:

procedure TForm1.Button2Click(Sender: TObject);
begin
  MakeWindowTransparent(67034, 150);
end;
Dein Frame hat auch ein Handle, z.B. Frame1.Handle - das musst du anstelle von 67034 übergeben, dann sollte es funktionieren.

jaenicke 6. Mär 2009 22:41

Re: Transparenter Frame?!
 
Nein, tut es nicht, ich habe es gerade ausprobiert. ;-)
Was wx.TRANSPARENT_WINDOW ist müsste ich mal schauen, denn abgesehen von WS_EX_LAYERED soll das ja auch notwendig sein.

Flodding 6. Mär 2009 22:44

Re: Transparenter Frame?!
 
wenn ich den frame mit alphablend durchsichtig mache dann werden auch die kompos die drauf sind durchsichtig :P

diese funktion ist um fremden fenstern alphablends zu verpassen

taaktaak 6. Mär 2009 22:47

Re: Transparenter Frame?!
 
What a pity!
Hab's natürlich nicht ausprobiert, sorry folks!

Flodding 6. Mär 2009 23:20

Re: Transparenter Frame?!
 
Okay hab noch ne runde gesucht... konnts einfach nicht sein lassen... bin auf eine quelle gestoßen und habs letztendlich mit viel probieren geschafft :D

Natürlich für die nachwelt, denn ich habe echt oft Fragen danach gefunden :P

Also hier der Code für nen "Semi-Transparent-Frame"

Delphi-Quellcode:
unit unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TFrame1 = class(TFrame)
    Button1: TButton;
    procedure CreateParams(var Params: TCreateParams);override;
    procedure PaintWindow(DC: HDC); override;
  private
    { Private declarations }
  public
    constructor Create(AOwner:TComponent);override;
    { Public declarations }
  end;

var
  Frame1: TFrame1;

implementation

{$R *.dfm}

constructor TFrame1.Create(AOwner: TComponent);
begin
  inherited;
  Brush.Style := bsClear;
end;

procedure TFrame1.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
end;

procedure TFrame1.PaintWindow(DC: HDC);
begin
// Muss stehen bleiben :D
end;

end.
:D endlich hab ich auch mal was beigesteuert was es nicht gab :cheers:

Flodding 6. Mär 2009 23:54

Re: Transparenter Frame?!
 
sorry fürs doppelpost, aber irgendwie haut das doch nicht so richtig hin...

wenn der frame geladen wird, dann ist es genauso, wie es sein soll... aber ich habe ja durchsichtige buttons auf dem "semi-frame" und wenn ich jetzt mit der maus über die buttons fahre, dann wird der bereich in dem der button ist nach dem verlassen weiss und bleibt es auch... selbst wenn ich das mit timer wieder neu machen lasse...

Delphi-Quellcode:
constructor TFrame3.Create(AOwner: TComponent);
begin
  inherited;
  Brush.Style := bsClear;
end;

procedure TFrame3.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
end;

procedure TFrame3.PaintWindow(DC: HDC);
begin
// Muss stehen bleiben :D
end;

procedure TFrame3.Timer1Timer(Sender: TObject);
var Params: TCreateParams;
begin
  inherited;
  Brush.Style := bsClear;
  Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
end;

mkinzler 7. Mär 2009 07:38

Re: Transparenter Frame?!
 
Es wird bei Veränderungen auch nicht neu gezeichnet


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.
Seite 1 von 2  1 2      

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