Mega Code Archive

 
Categories / Delphi / Forms
 

Call AnimateWindow the safe way

Title: Call AnimateWindow the safe way Question: AnimateWindow is a API which can enhance your GUI by adding special animations to your forms. However, the API is not valid in all operating systems. It is only valid in Windows 98 / 2000 and This code shows you how to use AnimateWindow when (and only when) it is supported. Without crashing and burning when it is not supported. Answer: procedure AnimateSafe(hWnd: HWND; dwTime: DWord; dwFlags: DWord); type d = function(a: THandle; b, c: DWord): Boolean; stdcall; var e, f: integer; g: d; begin try e := LoadLibrary('user32.dll'); if e = 0 then exit else begin g := GetProcAddress(e, 'AnimateWindow'); if @g = nil then exit else begin g(hWnd, dwTime, dwFlags); end; end; finally FreeLibrary(e); end; end; //Use AnimateSafe like: procedure TForm1.FormCreate(Sender: TObject); begin AnimateSafe(Handle, 300, AW_BLEND or AW_ACTIVATE); Self.Invalidate; end; (* dwFlags can be: AW_SLIDE Uses slide animation. By default, roll animation is used. This flag is ignored when used with AW_CENTER. AW_ACTIVATE Activates the window. Do not use this value with AW_HIDE. AW_BLEND Uses a fade effect. This flag can be used only if hwnd is a top-level window. AW_HIDE Hides the window. By default, the window is shown. AW_CENTER Makes the window appear to collapse inward if AW_HIDE is used or expand outward if the AW_HIDE is not used. AW_HOR_POSITIVE Animates the window from left to right. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND. AW_HOR_NEGATIVE Animates the window from right to left. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND. AW_VER_POSITIVE Animates the window from top to bottom. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND. AW_VER_NEGATIVE Animates the window from bottom to top. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND. *)