Einzelnen Beitrag anzeigen

kalmi01
(Gast)

n/a Beiträge
 
#5

Re: MDIChild soll bei OnCreate keine "window animation&

  Alt 25. Apr 2007, 09:14
Delphi-Quellcode:
unit WinAnimation;

  interface

    uses
      Windows, Messages;

    function GetWinAnimation: Boolean;
    procedure SetWinAnimation(AValue: Boolean);

    function GetFullDragWindow: Boolean;
    procedure SetFullDragWindow(hwnd: DWORD; ShowFullWindow: Boolean);

  implementation

////////////////////////////////////////////////////////////////////////////////
// Gibt True zurück, falls Fensteranimationen aktiviert sind.
    function GetWinAnimation: Boolean;
      var
        Info: TAnimationInfo;
      begin
        Info.cbSize := SizeOf(TAnimationInfo);
        if SystemParametersInfo(SPI_GETANIMATION, SizeOf(Info), @Info, 0)
        then Result := Info.iMinAnimate <> 0
        else Result := false;
      end;

// Aktiviert/Deaktiviert Fensteranimationen.
    procedure SetWinAnimation(AValue: Boolean);
      var
        Info: TAnimationInfo;
      begin
        Info.cbSize := SizeOf(TAnimationInfo);
        Info.iMinAnimate := Integer(AValue);
        SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0);
      end;

////////////////////////////////////////////////////////////////////////////////
// True = Fenster Schieben mit Anzeige des Fensterinhaltes
// False = Fenster Schieben mit Anzeige eines Rahmens
    function GetFullDragWindow: Boolean;
      var
        ok : boolean;
      begin
        if SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @ok, 0)
        then Result := ok
        else Result := false;
      end;

// Aktiviert/Deaktiviert Fensterinhalt/Fensterrahmen
    procedure SetFullDragWindow(hwnd: DWORD; ShowFullWindow: Boolean);
      begin
        if SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, Abs(DWORD(ShowFullWindow)), 0, SPIF_UPDATEINIFILE or SPIF_SENDWININICHANGE)
        then begin
               ReleaseCapture;
               SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
             end;
      end;

{  Benötigt einen OnMouseDown-Event-Handler, wie diesen :
  ======================================================

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin

// Springe in die Function SetFullWindowDrag
// Weise dieser das Handle meiner Anwendung zu = Main.Handle
// Und teile ihr mit das ich nun meine Form verschiebe.
    SetFullDragWindow(Form1.Handle, true );

// Springe in die Function SetFullWindowDrag
// Weise dieser das Handle meiner Anwendung zu = Main.Handle
// Und teile ihr mit das ich mit dem verschieben fertig bin und das Event CaptionBarMouseDown verlasse.
    SetFullDragWindow(Form1.Handle, Fenster);

  end;
}


end.
im Prog dann mit GetWinAnimation: Boolean;
den aktuellen Status holen.
Mit SetWinAnimation(AValue: Boolean);
den gewünschten Status setzen, Deine Fenster öffnen und dann den Originalstand wieder herstellen.
Die Fensteranimation lässt sich leider nur systemweit ein/ausschalten.
  Mit Zitat antworten Zitat