AGB  ·  Datenschutz  ·  Impressum  







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

AlphaBlend auf normale Controls

Ein Thema von G-Baumstamm · begonnen am 12. Feb 2011 · letzter Beitrag vom 24. Jun 2011
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: AlphaBlend auf normale Controls

  Alt 12. Feb 2011, 11:27
Du kannst sehr wohl Panels Transparent faden.
Vorrausgesetzt es ist eine von dir eigens erstellte Komponente in NONVCL
Ich habs gemacht und funktioniert sehr gut..

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: AlphaBlend auf normale Controls

  Alt 12. Feb 2011, 11:39
@EWeiss

hey, lässt Du mal einen Fetzen Code rüberwachsen?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: AlphaBlend auf normale Controls

  Alt 12. Feb 2011, 11:47
@EWeiss

hey, lässt Du mal einen Fetzen Code rüberwachsen?
Etwas kompliziert..
Kann dir aber bei bedarf meinen Code zusenden bzw.. müßtest du von meinem Server runterladen.
Bild sieht nicht so gut aus das Forum hier konvertiert den Kram nach .JPG

Zitat:
@ EWeiss: Was kann ich denn in eigenen Panels einstellen, das ich nicht durch Ableitung einem bereits vorhandenen Panel ergänzen kann?
hast du doch schon selbst beantwortet..
Zitat:
Aber wie kann ich nen Panel auf die Form zeichnen, ohne nen Parent anzugeben??
Hier was Code..

Delphi-Quellcode:
    
EffectPanel := TSkinPanel.Create(hMain, SK_FOLDER +
  'Panel.png', '', 643, 48, 158, 366, ID_EFFECTPANEL, 0);
  SetAnchorMode(EffectPanel.Handle, ANCHOR_RIGHT);
  SetZorder(EffectPanel.Handle, HWND_TOP);
  PanelEffectHandle := EffectPanel.Handle;
Delphi-Quellcode:
constructor TSkinPanel.Create(hOwner: HWND; FullpathImageName: string;
  skLabel: PAnsiChar; x, y, xW, yH, ButID, StateMax: integer);

var
  wc: TWndClassEx;
  zClass: PAnsiChar;

begin

  with SkinEngine do
  begin
    zClass := SKPANEL;
    wc.cbSize := SIZEOF(wc);
    IsInitialized := GetClassInfoEx(skInstance, zClass, wc);
    if IsInitialized = False then
    begin
      wc.cbSize := SIZEOF(wc);
      wc.style := CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS or CS_PARENTDC;
      wc.lpfnWndProc := @PanelProc;
      wc.cbClsExtra := 0;
      wc.cbWndExtra := EXTEND_EXTRA * 4;
      wc.hInstance := skInstance;
      wc.hIcon := 0;
      wc.hCursor := 0;
      wc.hbrBackground := 0;
      wc.lpszMenuName := nil;
      wc.lpszClassName := zClass;
      wc.hIconSm := wc.hIcon;
      if RegisterClassEx(wc) <> 0 then
        IsInitialized := True;
    end;

    if IsInitialized = True then
    begin
      // Erstelle das GDIPLUS image von Datei
      Img := AddResource(PAnsiChar(FullpathImageName));
      if Img <> 0 then
      begin
        // Hole die Thumb GDIPLUS image größe
        GetImageSize(Img, imgW, imgH);
        Style := WS_CHILD or WS_VISIBLE or WS_TABSTOP;

        FHPanel := CreateWindowEx(WS_EX_TRANSPARENT, SKPANEL, '',
          Style, x, y, xW, yH, hOwner, ButID, skInstance, nil);
        if FHPanel <> 0 then
        begin
         if StateMax < 1 then
            StateMax := 1;
          // Speichere das Image Handle in die Property
          SetImageProperty(FHPanel, PROP_STYLE, BS_GROUPBOX);
          SetImageProperty(FHPanel, PROP_IMAGE_BACK, Img);
          SetImageProperty(FHPanel, PROP_STATEMAX, StateMax);
        end else
          // Image löschen wenn Fehler
          DeleteResource(Img);
      end;
    end;
  end;
end;
gruss

Geändert von EWeiss ( 9. Jul 2019 um 08:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: AlphaBlend auf normale Controls

  Alt 12. Feb 2011, 13:01
Was passiert bei dem Code, wenn ich unter dem transparenten Panel einen Button platziere? Ich habe bisher noch nirgends gesehen, dass ein Panel wirklich transparent dargestellt werden kann -- wenn das funktionieren würde wäre das echt genial für eine Komponente von mir...
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: AlphaBlend auf normale Controls

  Alt 12. Feb 2011, 14:03
Ich habe gerade nicht die Zeit es zu testen, aber gehe ich Recht in der Annahme dass das ganz funktioniert wie mein Kram http://www.bummisoft.de/download/transtest.zip
Die Komponenten reichen die Malroutine durch an das Hauptfenster und das sieht ähnlich aus wie dieser Code?
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
var
   DestPoint, srcPoint:TPoint;
   winSize:TSize;
   DC : HDC;
   blendfunc : BLENDFUNCTION;

    Owner : HWnd;
    curWinStyle:Integer;
     p:TGPPen;

     g:TGPGraphics;
     exStyle:Dword;
begin
   if not Assigned(Fbackimage) then Exit;

   prep;
   DC := GetDC(0);

   try
   winSize.cx := width;
   winSize.cy := Height;
   srcPoint.x := 0;
   srcPoint.y := 0;

   DestPoint := BoundsRect.TopLeft;

   exStyle := GetWindowLongA(handle, GWL_EXSTYLE);
   if (exStyle and WS_EX_LAYERED = 0) then
    SetWindowLong(handle, GWL_EXSTYLE, exStyle or WS_EX_LAYERED);



   With blendFunc do
   begin
     AlphaFormat := 1; //=AC_SRC_ALPHA;
     BlendFlags := 0;
     BlendOp := AC_SRC_OVER;
     SourceConstantAlpha := 255 - FAlphaValue; // here you can set Alpha
   end;

   UpdateLayeredWindow(Handle, DC, @DestPoint, @winSize, Fbackimage.Canvas.Handle, @srcPoint,FSheetColor, @blendFunc, 2);//=ULW_ALPHA

   finally
   ReleaseDC(0, DC);
   end;

end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: AlphaBlend auf normale Controls

  Alt 12. Feb 2011, 14:36
Was passiert bei dem Code, wenn ich unter dem transparenten Panel einen Button platziere? Ich habe bisher noch nirgends gesehen, dass ein Panel wirklich transparent dargestellt werden kann -- wenn das funktionieren würde wäre das echt genial für eine Komponente von mir...
Was soll da passieren?
Es bleibt Transparent da ändert sich nix.
Auf meinem Bild kannst sehen das die Button NONVCL ebenfalls Transparent sind im Rechten Panel.
Dies sind Standard Button die über das integrieren eines Manifest (und der Initialisierung von InitCommonControl) überzeichnet wurden.
Ohne Initialisierung bleiben sie Grau also Standard Button.

Zitat:
aber gehe ich Recht in der Annahme dass das ganz funktioniert wie mein Kram
Also dein Panel ist nicht Transparent so wie ich das sehe.
Ist aber auch möglich das hier zu realisieren.
Schick mal deinen Code und ich schau was sich machen läßt.. Ja ist kein Opensource ich weis

Geändert von EWeiss (12. Feb 2011 um 14:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#7

AW: AlphaBlend auf normale Controls

  Alt 12. Feb 2011, 15:18
Ich meinte, wenn das Panel eben einen Button überlagert. Ich habe noch keine Panels gesehen, die richtige Transparenz, auch über mehrere Ebenen (ein Panel über einem anderen etc.), darstellen konnten. Kannst du mir evtl. mal den Quelltext zukommen lassen? Würde mir das gerne näher anschauen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: AlphaBlend auf normale Controls

  Alt 12. Feb 2011, 16:24
Zitat:
Also dein Panel ist nicht Transparent so wie ich das sehe.
weil das PNG hier nicht transparent ist...

Ansonsten schließe ich mich voll und ganz Shark an...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
G-Baumstamm

Registriert seit: 9. Jan 2010
63 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: AlphaBlend auf normale Controls

  Alt 12. Feb 2011, 11:46
Erstmal danke für die zahlreichen Antworten!

@ WM_Close: Das ganze sieht genau nach dem aus, was ich brauche. So Sachen wie AnimateWindow(Panel.Handle,200,AW_Center or AW_Hide); funktionieren auch super, es gibt aber ein Problem: AW_Blend kann nur auf top level windows angewendet werden, also auf Windows ohne Parent. Aber wie kann ich nen Panel auf die Form zeichnen, ohne nen Parent anzugeben?? mhmmm ...

@ EWeiss: Was kann ich denn in eigenen Panels einstellen, das ich nicht durch Ableitung eines bereits vorhandenen Panels ergänzen kann?

@ Bummi: /sign, bin ich auch dafür!
Daniel NR
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz