Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.164 Beiträge
 
Delphi 12 Athens
 
#2

Re: GetLayeredWindowAttributes funktioniert nicht noch Resiz

  Alt 21. Okt 2009, 09:07
Zitat von virus82:
Ach ja ich nutze Delphi2009, auf Windows XP Professional SP3.
Selbes System (32 Bit) ... keine Probleme (egal ob eigenes Fenster oder Notepad minimiert wurde)



Außerdem: GetLastError sollte man sich gleich holen und nicht erst irgendwas anderes ziwschendurch machen, welches den Wert verändern könnte.


Also selbst wenn SetLayeredWindowAttributes fehlschlägt und dann aber GetLayeredWindowAttributes erfolgreich ist und auch noch den Fehler-Code zurück/neu setzt, dann würdest du da nie einen Fehler von SetLayeredWindowAttributes erhalten.

Delphi-Quellcode:
procedure TestAlphaBlend;
var
  hHandle: THandle;
  ExStyle: DWORD;
  bResSet: Boolean;
  bResGet: Boolean;
  AlphaValue: Byte;
  TranspColor: COLORREF;
  Flags: DWORD;
  Error: Cardinal;
  s: String;
begin
  s := 'nix';
  AlphaValue := 0;
  Flags := 0;
  hHandle := FindWindowEx(0, 0, 'Notepad', nil); //Fensterhandle von einem Notepad
  if ((hHandle <> INVALID_HANDLE_VALUE) and //gültiges Handle
      (IsWindowVisible(hHandle))) then //Fenster sichtbar
    begin
      s := '';
      ExStyle := GetWindowLong(hHandle, GWL_EXSTYLE); //Extended Style holen
      if ((ExStyle and WS_EX_LAYERED) = 0) then //wenn kein Layered Fenster
        SetWindowLong(hHandle, GWL_EXSTYLE, ExStyle or WS_EX_LAYERED); //dann Layered setzen

      bResSet := SetLayeredWindowAttributes(hHandle, 0, 200, LWA_ALPHA); //AlphaBlend mit Wert 200 setzen
      if bResSet then
        s := s + 'SetLayeredWindowAttributes erfolgreich' + #10#13
      else
        begin
          Error := GetLastError; //Fehler holen
          s := s + 'SetLayeredWindowAttributes nicht erfolgreich' + #10#13; //kommt nie vor
          if (Error = 0) then
            s := s + 'GetLastError = 0' + #10#13
          else
            s := s + 'GetLastError = ' + IntToStr(Error) + #10#13;
        end;

      bResGet := GetLayeredWindowAttributes(hHandle, TranspColor, AlphaValue, Flags); //AlphaBlend ermitteln

      if bResGet then
        begin
          s := s + 'GetLayeredWindowAttributes erfolgreich' + #10#13;
          if ((Flags and LWA_ALPHA) > 0) then //ob AlphaBlend gesetzt ist
            s := s + 'AlphaBlend = True' + #10#13
          else
            s := s + 'AlphaBlend = False' + #10#13
        end
      else
        begin
          Error := GetLastError; //Fehler holen
          s := s + 'GetLayeredWindowAttributes nicht erfolgreich' + #10#13;
          if (Error = 0) then
            s := s + 'GetLastError = 0' + #10#13
          else
            s := s + 'GetLastError = ' + IntToStr(Error) + #10#13;
        end;

      s := s + 'AlphaBlendValue = ' + IntToStr(AlphaValue) + #10#13; //einfach immer ausgeben
    end;

  ShowMessage(s);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat