AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TPanel transparent ?

Offene Frage von "Marvel"
Ein Thema von smart · begonnen am 29. Jan 2005 · letzter Beitrag vom 5. Mai 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#1

TPanel transparent ?

  Alt 29. Jan 2005, 17:53
Kann man ein TPanel transparent machen? In der [df][dp]PANEL und TRANSPARENT habe ich leider nichts finden können.
Heike Kretschmann
  Mit Zitat antworten Zitat
Elite
(Gast)

n/a Beiträge
 
#2

Re: TPanel transparent ?

  Alt 29. Jan 2005, 18:01
Das versuche ich seit 3 Monaten. Mit einem normalen TPanel geht es nicht.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: TPanel transparent ?

  Alt 29. Jan 2005, 18:06
Jain, richtig transparent bekommst du es nicht hinn. Annähernd transparent geht es so:
hier die komplette unit (weiß nimmer wo ich das her hab)
Delphi-Quellcode:
{                                                                    }
{   Copyright © 1998 by Mik Tran                                     }
{                                                                    }
{ ****************************************************************** }

unit utranspanel;

interface

uses WinTypes, WinProcs, Messages, SysUtils, Classes, Controls,
     Forms, Graphics, StdCtrls;

type
  TTranPanel = class(TCustomcontrol)
    private
    Fborder : Boolean;
    Procedure Setborder(value : boolean);
    protected
        procedure Paint; override;
    public
        procedure CreateParams(var Params: TCreateParams); override;
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
    published
        Property Border:Boolean read Fborder write Setborder;
        Property Visible;
        property Enabled;
        Property Align;
        property OnClick;
        property OnMouseDown;
        property OnMouseMove;
        property OnMouseUp;
end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('DerReiterWosReinSoll', [TTranPanel]);
end;

procedure TTranPanel.CreateParams(var Params: TCreateParams);
begin
     { call the create of the params }
     inherited CreateParams(Params);
     Params.ExStyle := Params.ExStyle + WS_EX_Transparent;
     ControlStyle := ControlStyle - [csOpaque] + [csAcceptsControls]
end;

constructor TTranPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Width := 185;
  Height := 41;
end;

destructor TTranPanel.Destroy;
begin
     inherited Destroy;
end;

procedure TTranPanel.Paint;
begin
  If Fborder or (csDesigning in ComponentState) then
   begin
     Canvas.brush.color := clbtnshadow;
     Canvas .framerect(clientrect);
   end;
end;

Procedure TTranpanel.Setborder(value : boolean);
begin
if value <> Fborder then
 begin
  Fborder := value;
  invalidate;
 end;
end;

end.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Elite
(Gast)

n/a Beiträge
 
#4

Re: TPanel transparent ?

  Alt 29. Jan 2005, 18:14
Mit der Unit hab ich mich auch schon intensiv beschäftigt. Sobald du das Panel verschiebst, bekommst du ein Problem...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: TPanel transparent ?

  Alt 29. Jan 2005, 18:17
ich weiß, deswegen hab ich ja auch geschrieben das es nur eine annähernde transparenz gibt
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Shamora

Registriert seit: 2. Jun 2005
2 Beiträge
 
#6

Re: TPanel transparent ?

  Alt 2. Jun 2005, 16:40
Hallo!
Hoffe, es hilft Euch. Funktioniert einwandfrei.

Delphi-Quellcode:
unit TransparentPanel;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, ExtCtrls;

type
  TTransparentPanel = class(TCustomPanel)
  private
    { Private declarations }
    procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
  protected
    { Protected declarations }
    Procedure Paint; override;
    Procedure CreateParams(var Params : TCreateParams); override;
  public
    { Public declarations }
    constructor Create(AComponent: TComponent);override;
  published
    { Published declarations }
    Property BevelInner;
    Property BevelOuter;
    Property Align;
    Property Caption;
    property OnClick;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Shamora', [TTransparentPanel]);
end;

constructor TTransparentPanel.Create(AComponent: TComponent);
begin
  inherited;
  ControlStyle := ControlStyle - [csOpaque];
end;

Procedure TTransparentPanel.Paint;
var
  Rect: TRect;
  TopColor, BottomColor: TColor;
const
  Alignments: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);

  procedure AdjustColors(Bevel: TPanelBevel);
  begin
    TopColor := clBtnHighlight;
    if Bevel = bvLowered then TopColor := clBtnShadow;
    BottomColor := clBtnShadow;
    if Bevel = bvLowered then BottomColor := clBtnHighlight;
  end;

begin
  Rect := GetClientRect;
  if BevelOuter < bvNone then
  begin
    AdjustColors(BevelOuter);
    Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth);
  end;
  Frame3D(Canvas, Rect, Color, Color, BorderWidth);
  if BevelInner < bvNone then
  begin
    AdjustColors(BevelInner);
    Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth);
  end;
end;

Procedure TTransparentPanel.CreateParams(var Params : TCreateParams);
Begin
  inherited CreateParams(Params);
  With Params do
  begin
    ExStyle := ExStyle or WS_EX_TRANSPARENT;
    Style := Style and not WS_CLIPCHILDREN;
    Style := Style and not WS_CLIPSIBLINGS;
  end;
End;

procedure TTransparentPanel.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin
  Message.Result := -1;
end;

end.
Gruß,
Shamora.
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#7

Re: TPanel transparent ?

  Alt 3. Jun 2005, 07:22
Wie ruft man das Ding auf. Bei mir geht es nicht.
Heike Kretschmann
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: TPanel transparent ?

  Alt 3. Jun 2005, 07:35
da es eine Komponente ist, ist da nix mit aufrufen sonder du musst eine Instanz erstellen.
[Edit]
So ganz 100% funktioniert das bei mir auch nicht.
Ich habe einen Button auf mein Form gepackt, darüber dieses Panel und auf das Panel dann leicht versetzt einen zweiten button (so das der Button auf dem Panel einen Teil von Button 1 überdeckt).
Beim ersten Klick auf Button2 (der auf dem Panel) erscheint Button1 während der Button2 gedrückt ist über Button2.
[/Edit]

[Edit2]
Ich hab noch ein wenig probiert und das Problem herausgefunden. Sobald sich ein Control unter dem Panel neu zeischnet, zeischnet sich das Panel danach nicht neu. Wenn man also unter dem Panel einen Button hat und davon die Caption ändert dann malt sich der Button neu über die Controls die auf dem Panel legen (als würde der Button unter dem Panel über allem drüber liegen).

Und wenn man einen Alphaeffekt erzielen will funktioniert das auch nur beim ersten mal denn beim Repaint des Panels wird der Untergrund nicht zuvor gemalt. Somit würde man bei 50% Transparenz beim nächsten Repaint die bereits geblendet Fläsche nocheinmal blenden (in meinem Beispiel hab ich mit Rot geblendet und somit wird das Rot immer intensiver bis man nicht mehr sieht was unter dem Panel ist.)
[/Edit2]

[Edit3]
Ich hab mal das Beispielproject angehängt. In die Paint Methode des neuen Panels hab ich noch das Alphablend eingefügt um das ganze zu verdeutlichen
Delphi-Quellcode:
  LBitmap := TBitmap.Create;
  LBitmap.Width := 1;
  LBitmap.Height := 1;
  LBitmap.Canvas.Pixels[0,0] := clRed;
  LBlendStruct.BlendOp := AC_SRC_OVER;
  LBlendStruct.BlendFlags := 0;
  LBlendStruct.SourceConstantAlpha := 127;
  LBlendStruct.AlphaFormat := 0;
  windows.AlphaBlend(Canvas.Handle, 0, 0, Width, Height, LBitmap.Canvas.Handle, 0, 0, LBitmap.Width, LBitmap.Height, LBlendStruct);
  LBitmap.Free;
ZipDatei einfach entpacken und Projekt starten (compilieren).
[/Edit3]
Angehängte Dateien
Dateityp: zip example_137.zip (4,4 KB, 268x aufgerufen)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Shamora

Registriert seit: 2. Jun 2005
2 Beiträge
 
#9

Re: TPanel transparent ?

  Alt 3. Jun 2005, 09:06
Zitat von SirThornberry:
da es eine Komponente ist, ist da nix mit aufrufen sonder du musst eine Instanz erstellen.
Beim ersten Klick auf Button2 (der auf dem Panel) erscheint Button1 während der Button2 gedrückt ist über Button2.
Tatsächlich. Ist mir nie aufgefallen, da ich das Panel nur als ein ‚lock’- Panel benutzt und für solche 'lock' - Zwecke geschrieben habe… Muss man noch nachhacken.

Zitat von SirThornberry:
Und wenn man einen Alphaeffekt erzielen will funktioniert das auch nur beim ersten mal denn beim Repaint des Panels wird der Untergrund nicht zuvor gemalt. Somit würde man bei 50% Transparenz beim nächsten Repaint die bereits geblendet Fläsche nocheinmal blenden (in meinem Beispiel hab ich mit Rot geblendet und somit wird das Rot immer intensiver bis man nicht mehr sieht was unter dem Panel ist.)
Für einen Alphaeffekt ist das Panel auch nicht gedacht. Das Panel zeichnet sich wirklich nicht neu (WMEraseBkgnd). Die Komponente ist transparent, also logisch gesehen, hat nicht zu zeichnen. Um einen Alphaeffekt zu erzielen, muss man anders schreiben….
  Mit Zitat antworten Zitat
Marvel

Registriert seit: 12. Nov 2004
Ort: Bad Düben
64 Beiträge
 
#10

Re: TPanel transparent ?

  Alt 18. Jun 2005, 18:32
ähhm... eigentlich müsste man diese Komponente jetzt doch überall verwenden können oder?
Da muss ich sagen, dass das irgendwie nich so recht bei mir funzt...
Als erstes gibts da ja nich alles was man so für nen Panel braucht und dann macht das auf dem Formular beim normalen erstellen totalen Mist...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 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