Einzelnen Beitrag anzeigen

virus82

Registriert seit: 29. Jun 2007
Ort: Leipzig
34 Beiträge
 
Delphi 2009 Professional
 
#3

Re: GetLayeredWindowAttributes funktioniert nicht noch Resiz

  Alt 26. Okt 2009, 21:26
ok das mit getlasterror stimmt. Ist auch hier im Beispiel nur so, hole ich sonst gleich nach GetLayeredWindowAttributes.

Nur noch mal zur Erinnerung, mit SetLayeredWindowAttributes gibt es keine Probleme und Fehler, nur mit GetLayeredWindowAttributes.

1. Notepad starten
2. Notepad StLayeredWindowAttributes -> funzt
3. Notepad GetLayeredWindowAttributes -> funzt
4. Notepad minimieren und wieder herstellen oder maximieren
4. Notepad GetLayeredWindowAttributes -> funzt nicht und GetLastError ist ebenfalls 0

Und da weiß ich nicht weshalb. Bin irgendwie ratlos.

Geändertes Beispiel

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

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

      //funktioniert
      bResGet := GetLayeredWindowAttributes(hHandle, TranspColor, AlphaValue, Flags); //AlphaBlend ermitteln
      Error := GetLastError;
      if (bResGet and (Error = 0)) 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
        s := s + 'GetLayeredWindowAttributes nicht erfolgreich' + #10#13;
      s := s + 'GetLayeredWindowAttributes GetLastError = ' + IntToStr(Error) + #10#13; //gemerkten Fehler

      ShowWindow(hHandle, SW_MINIMIZE); //Minimieren
      ShowWindow(hHandle, SW_RESTORE); //Wiederherstellen

      //funktioniert nicht mehr
      bResGet := GetLayeredWindowAttributes(hHandle, TranspColor, AlphaValue, Flags); //AlphaBlend ermitteln
      Error := GetLastError;
      if (bResGet and (Error = 0)) 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
        s := s + 'GetLayeredWindowAttributes nicht erfolgreich' + #10#13;
      s := s + 'GetLayeredWindowAttributes GetLastError = ' + IntToStr(Error) + #10#13; //gemerkten Fehler

    end;

  ShowMessage(s);
end;
Marco
  Mit Zitat antworten Zitat