![]() |
Was passiert bei AlphaBlend unter Windows 95?
Hallo Freunde!
Wie die Hilfefunktion der Borland-IDE mir mitteilte, ist die Transparenzfunktion via AlphaBlend erst ab Windows 2000 und höher möglich. Was würde aber nun genau passieren, wenn ich trotzdem versuche, die Transparenz einzustellen und dies unter Win 95 ausführe? Hier im Forum stand, dass derartige Fälle nicht von vornherein von der vorgegebenen Bibliothek berücksichtigt werden und es somit zu einer Fehlermeldung kommen sollte. Meine Frage ist nun, ob die Fehlermeldung kommt, dann keine Transparenz vorhanden ist, das Programm aber weiter läuft, oder ob es dadurch sich gleich selbst abschießt? Kann ich vielleicht mit Try-catch solche unschönen Ereignisse verhindern? Beste Grüße |
Re: Was passiert bei AlphaBlend unter Windows 95?
wenn du die Sourcen einsehen kannst (>Prof. Edition) dann kannst du ja sehen was passiert ;) Wenn es sauber programmiert wurde wird es testen ob Funktion verfügbar ist und sie erst dann aufrufen. Also sollte es unter Windows 95 laufen, aber ohne Transparenz.
|
Re: Was passiert bei AlphaBlend unter Windows 95?
hier mal ein auszug aus der datei forms.pas. sieht mir nicht so aus, als ob das kontrolliert wird. es wurde hier im forum irgendwo auch schonmal erwähnt, dass es das nicht tut, ich find den beitrag leider nicht mehr.
hast du (oder irgendjemand anderes) noch einen alten rechner mit einem os < windows 2000 drauf? könnte man das vielleicht einfach mal testen?
Delphi-Quellcode:
procedure TCustomForm.SetAlphaBlend(const Value: Boolean);
begin if FAlphaBlend <> Value then begin FAlphaBlend := Value; SetLayeredAttribs; end; end; procedure TCustomForm.SetAlphaBlendValue(const Value: Byte); begin if FAlphaBlendValue <> Value then begin FAlphaBlendValue := Value; SetLayeredAttribs; end; end; procedure TCustomForm.InitAlphaBlending(var Params: TCreateParams); begin if not (csDesigning in ComponentState) and (assigned(SetLayeredWindowAttributes)) then if FAlphaBlend or FTransparentColor then Params.ExStyle := Params.ExStyle or WS_EX_LAYERED; end; procedure TCustomForm.SetLayeredAttribs; const cUseAlpha: array [Boolean] of Integer = (0, LWA_ALPHA); cUseColorKey: array [Boolean] of Integer = (0, LWA_COLORKEY); var AStyle: Integer; begin if not (csDesigning in ComponentState) and (Assigned(SetLayeredWindowAttributes)) and HandleAllocated then begin AStyle := GetWindowLong(Handle, GWL_EXSTYLE); if FAlphaBlend or FTransparentColor then begin if (AStyle and WS_EX_LAYERED) = 0 then SetWindowLong(Handle, GWL_EXSTYLE, AStyle or WS_EX_LAYERED); SetLayeredWindowAttributes(Handle, FTransparentColorValue, FAlphaBlendValue, cUseAlpha[FAlphaBlend] or cUseColorKey[FTransparentColor]); end else begin SetWindowLong(Handle, GWL_EXSTYLE, AStyle and not WS_EX_LAYERED); RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN); end; end; end; |
Re: Was passiert bei AlphaBlend unter Windows 95?
Warum prüfst du nicht einfach selbst vor dem Aktivieren :gruebel: ?
|
Re: Was passiert bei AlphaBlend unter Windows 95?
Fuer Alphablending werden die LayeredWindows benoetigt. Die dafuer vorgesehenen Funktionen wuerden erst ab Win2k in die Win32-API-Dlls hinzugefuegt. Eine Funktion dafuer ist SetLayeredWindowAttributes.
Und folgender Code sollte beantworten, ob gecheckt wird, ob die Funktion geladen werden konnte:
Delphi-Quellcode:
Es wird also geprueft, ob die Funktion korrekt geladen wurde. Somit duerfte das aendern der Alphablend-/Transparenzwerte des Formulars unter Windows < Win2k keinen Effekt haben, aber auch keinen Fehler werfen.
if not [...](Assigned(SetLayeredWindowAttributes))
greetz Mike |
Re: Was passiert bei AlphaBlend unter Windows 95?
dann stimmte das also nicht, was hier irgendwo mal geschrieben wurde? also brauche ich mir keine sorgen machen?
ok, dann vielen dank an euch! :) |
Re: Was passiert bei AlphaBlend unter Windows 95?
Ähm, Zwischenfrage warum steht das unter der Rubrik C++ ? :gruebel:
|
Re: Was passiert bei AlphaBlend unter Windows 95?
Vielleicht weil er mit C++ Programmiert? :gruebel:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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 by Thomas Breitkreuz