Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TGroupBox transparent machen (https://www.delphipraxis.net/90081-tgroupbox-transparent-machen.html)

qb-tim 11. Apr 2007 10:39


TGroupBox transparent machen
 
Hi,

ich würde gerne wissen, wie ich eine TGroupBox transparent mache, sodass ich noch die Rahmnung und Beschriftung sehe, aber die Komponenten dahinter sehe.. (quasi: BackgroundColor = Transparent)

DGL-luke 11. Apr 2007 10:49

Re: TGroupBox transparent machen
 
Warum tust du die Komponenten nicht einfach in die Groupbox?

gsmgrufti 11. Apr 2007 10:58

Re: TGroupBox transparent machen
 
Du kannst dir was aus
http://www.swissdelphicenter.ch/de/showcode.php?id=1982
basteln
Müstest du nur anpassen auf Groupbox oder nimm einfach die bereits angepasste Variante von mir:
Delphi-Quellcode:
unit transgroupbox;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ComCtrls,
  StdCtrls;
type
  TTransGroupBox = class(TGroupBox)
  private
    { Private declarations }
     procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
  protected
    { Protected declarations }
    procedure CreateParams(var Params: TCreateParams); override;
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  published
    { Published declarations }
  end;

procedure Register;

implementation

constructor TTransGroupBox.Create(AOwner: TComponent);
begin
  inherited ;
end;

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

procedure TTransGroupBox.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
  Message.Result := 1;          // Prevent background from getting erased
end;


procedure TTransGroupBox.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
var
  tlbVisible: Boolean;
begin
  tlbVisible := (Parent <> nil) and IsWindowVisible(Handle); // Check for visibility
  if tlbVisible then ShowWindow(Handle, SW_HIDE);            // Hide-Move-Show strategy...
  inherited SetBounds(ALeft, ATop, AWidth, AHeight);         // ... to prevent background...
  if tlbVisible then
  begin
   ShowWindow(Handle, SW_SHOW);            // ... from  getting copied
   Parent.repaint;
  end;
 
end;

procedure Register;
begin
  RegisterComponents('Transparenz', [TTransGroupBox]);
end;

end.

qb-tim 11. Apr 2007 11:20

Re: TGroupBox transparent machen
 
Wunderbar! Sieht vielversprechend aus :wink:

:dp:

qb-tim 11. Apr 2007 11:40

Re: TGroupBox transparent machen
 
Es funktioniert prima, aber wenn ich ein TransGroupBox im Form ändere verzerrt es die Darstellung. Kann das irgendwie "repariert" werden?

Beispiel: Ich habe 3 Edits im TransGroupBox und verkürze sie. Ergebnis: Ich sehe 6 Edits (scheinbar): 3 mit original Länge und 3 verkürzte

Noch schlimmer: Ich verschiebe die TransGroupBox. Ergebnis: Die TransGroupBox und alle Komponenten haben sich (scheinbar) dupliziert. Eins ist am original Platz, das andere wo ich es hingetan habe (machmal auch einige auf den Weg dahin!!!)

Diese Graphischen Verzerrungen sind nur im Formeditor. Das Programm läuft einwandfrei und die Formdarstellung im Editor ist normal, nachdem ich das Programm durchführen lassen habe. Aber dann fängt es alles wieder von Forne an! :wall:

HILFE! :freak:

iron 16. Nov 2007 12:01

Re: TGroupBox transparent machen
 
Auch wenn es jetzt eine ganze Weile später ist, aber man kann auch die TJvgGroupBox von den Jedis nehmen die hat eine Transparent Einstellung von Hause aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:55 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