Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   C++ Was passiert bei AlphaBlend unter Windows 95? (https://www.delphipraxis.net/82255-passiert-bei-alphablend-unter-windows-95-a.html)

PAX 9. Dez 2006 15:08


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

MagicAndre1981 9. Dez 2006 15:13

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.

PAX 9. Dez 2006 17:44

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;

Khabarakh 9. Dez 2006 17:53

Re: Was passiert bei AlphaBlend unter Windows 95?
 
Warum prüfst du nicht einfach selbst vor dem Aktivieren :gruebel: ?

JasonDX 9. Dez 2006 17:56

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:
if not [...](Assigned(SetLayeredWindowAttributes))
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.

greetz
Mike

PAX 9. Dez 2006 23:21

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! :)

turboPASCAL 10. Dez 2006 05:11

Re: Was passiert bei AlphaBlend unter Windows 95?
 
Ähm, Zwischenfrage warum steht das unter der Rubrik C++ ? :gruebel:

Sunlight7 10. Dez 2006 07:24

Re: Was passiert bei AlphaBlend unter Windows 95?
 
Vielleicht weil er mit C++ Programmiert? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:06 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