![]() |
AW: AlphaBlend auf normale Controls
Ich habe gerade nicht die Zeit es zu testen, aber gehe ich Recht in der Annahme dass das ganz funktioniert wie mein Kram
![]() 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; |
AW: AlphaBlend auf normale Controls
Zitat:
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:
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;) |
AW: AlphaBlend auf normale Controls
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.
|
AW: AlphaBlend auf normale Controls
Zitat:
Ansonsten schließe ich mich voll und ganz Shark an... |
AW: AlphaBlend auf normale Controls
Zitat:
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 |
AW: AlphaBlend auf normale Controls
Gibt es eine Möglichkeit an den Code deiner Komponente zu kommen? Würde mich ziemlich dafür interessieren!
|
AW: AlphaBlend auf normale Controls
Zitat:
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 |
AW: AlphaBlend auf normale Controls
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. |
AW: AlphaBlend auf normale Controls
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
Zitat:
Zitat:
|
AW: AlphaBlend auf normale Controls
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 ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 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