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
Seite 2 von 3     12 3      
Benutzerbild von Bummi
Bummi

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

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
 
#12

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
 
#13

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
 
#14

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
EWeiss
(Gast)

n/a Beiträge
 
#15

AW: AlphaBlend auf normale Controls

  Alt 12. Feb 2011, 18:10
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...
Ich kann 10 Panels übereinanderlegen und sehe immer noch das zuerst abgelegte durch das letzte.
Ansonsten ist die Frage doch was ist ein Panel?

Im Grunde nichts anderes als ein Container für Kinder die dort abgelegt werden können.
Wobei hier GroupBoxen sinnvoller wären.

Das kann ein Frame ein Shape und in Delphi halt Panel genannt sein.

Eigentlich kann man genausogut einen Button dafür mißbrauchen.
Letztendlich nur ein aufpeppen zur übersichtlichkeit der Anwendung. (Ohne Sinn und Zweck)

gruss

Geändert von EWeiss (12. Feb 2011 um 18:26 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
 
#16

AW: AlphaBlend auf normale Controls

  Alt 12. Feb 2011, 22:32
Gibt es eine Möglichkeit an den Code deiner Komponente zu kommen? Würde mich ziemlich dafür interessieren!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

AW: AlphaBlend auf normale Controls

  Alt 13. Feb 2011, 10:43
Gibt es eine Möglichkeit an den Code deiner Komponente zu kommen? Würde mich ziemlich dafür interessieren!
Ich habe keine "Komponente im Herkömmlichen Sinne" das sind lediglich NONVCL erstellte Komponente ohne registrierung.
Naja und das Projekt ist 19MB groß um also ein Funktionstüchtiges Sample zu erstellen dafü fehlt mir die Zeit.

Habe das Projekt (Soundmachine) Bummi mal geschickt .. glaube ich.
Und ob es das ist was du suchst weiss ich auch nicht.

gruss
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#18

AW: AlphaBlend auf normale Controls

  Alt 13. Feb 2011, 11:04
Ein Control ausblenden ist doch gar nicht so schwer, man muss nur wissen, wie es dahinter aussieht. Ich habe das vor Ewigkeiten mal so gelöst, das ich es kurz ausblende, einen Screenshot mache, wieder einblende. Das merkt man gar nicht.

Der Rest ist kinderleicht.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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
 
#19

AW: AlphaBlend auf normale Controls

  Alt 14. Feb 2011, 17:03
alzaimar: was passiert aber, wenn ich evtl. viele Ebenen mit vielen Controls haben will, die teilweise transparent sind? Das kann unter Umständen, in welchen Konstellationen auch immer, zu unschönen Nebeneffekten führen, die ich aus Prinzip schon mal vermeiden will. Daher würde mich eben besagte Lösung interessieren

Ich habe keine "Komponente im Herkömmlichen Sinne" das sind lediglich NONVCL erstellte Komponente ohne registrierung.
Naja und das Projekt ist 19MB groß um also ein Funktionstüchtiges Sample zu erstellen dafü fehlt mir die Zeit.
Was die größe mit einem funktionistüchtigen Beispiel zu tun hat, verstehe ich beim besten Willen nicht

Und ob es das ist was du suchst weiss ich auch nicht.
Wenn ich es hätte, dann könnte ich die sagen, ob es das ist, was ich suche.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
G-Baumstamm

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

AW: AlphaBlend auf normale Controls

  Alt 15. Feb 2011, 16:47
Mhm okay ... meine ursprüngliche Idee das AlphaBlend-Prinzip welches die Form kann einfach auf andere Controls anzuwenden war wohl wieder etwas zu naiv ...

Da mir die Kenntnisse fehlen um mir hierfür was vernünftiges zu schreiben (was anscheinend recht schwierig is, wenn ich unsere Fachleute hier richtig verstanden hab ^^), habe ich mal wieder einen Workaround entwickelt, der wenigstens das Verhalten für meine Zwecke halbwegs vernünftig simuliert:

Ich erstelle ggf einfach eine neue Form in Farbe des Hintergrundes, lege diese auf den Panels ab und blende diese Form mit AlphaBlend schrittweise aus bevor ich sie wieder zerstöre. So entsteht optisch der Eindruck, als würden die Panels langsam erscheinen (also Fade-In), was für meine Zwecke an sich reicht.

Das Ganze geschieht beim Wechseln des Tabs einer PageControl, d.h. im OnChange wird die Form sofort erstellt.

Hier gibts aber wieder ein kleines Problem: Es funktioniert alles so wie ich es haben will, allerdings wird ein Teil dessen was sich auf dem Tab befindet erst NACH Abschluss meines Blendvorgangs eingetragen (Text der Edits und ListBoxen, alle ComboBoxen & Buttons, Border & Caption der Panels), im Gegensatz zum gesamten Rest (zB Farbe der Panels, Rest der Edits, alle Labels,Shapes etc). Ich hoffe ihr versteht was ich meine

Scheint mir so, als würde das dafür zuständige Ereignis irgendwie erst später aufgerufen ... Hab allerings keine Ahnung warum dann ein Teil vernünftig erscheint und ein anderer Teil nicht ... Woran kann das liegen und wie umgehe ich das?

LG
Daniel NR
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 15:28 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