Announcement

Collapse
No announcement yet.

Minimize-Animation verhindern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Minimize-Animation verhindern

    Hi,
    wenn unter Windows ein Kind-Fenster minimiert wird so "fliegt" dieses in
    die linke untere Ecke und bleibt dort im minimierten Zustand liegen. Ist es
    möglich diese Animation zu verhindern? Am liebsten wäre es mir wenn es eine
    Möglichkeit gibt das Fenster ohne irgendeine Animation zu minimieren, da
    ich es danach mit ShowWindow(..., SW_HIDE) verstecke. Nur verstecken kommt
    aber nicht in Frage, da ich das Systemmenü der Form benötige und zwar im
    minimierten Zustand. Hoffe man kennt sich aus )

    Thx, Motzi

  • #2
    Das gibts doch nicht... hat keiner eine Idee wie ich das machen
    könnte?? Kommt schon Leute.. ich weiß dass ihr das drauf habt!!!<BR>
    Nur so zur Information weshalb ich das brauch: Ich mach gerade ein
    Taskbar im Stil der Taskbar von Opera (falls jemand Opera nicht kennen
    sollte, sollte er das schleunigst nachholen! ;o) ). Bei den anderen
    Freeware-Taskbars die ich bis jetzt gesehen hab, haben die Komps immer
    die Ereignisse der Formulare verwendet und damit die Benutzung dieser
    durch den Entwickler verhindert. Da ich das nicht will setze ich via
    SubClassing eine neue WndProc fest. Jetzt muss ich mir aber selbst die
    Messages raussuchen die ich brauch um das Erscheinungsbild meiner
    TaskButtons anzupassen. Wenn wer Ideen hat sind diese immer erwünscht!

    Thx, Motz

    Comment


    • #3
      Hi

      Der Win32 Ordner ist nun schwerer zu finden, sorry.
      Hier der Borland Source:

      <pre>

      function GetAnimation: 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;<br>

      procedure SetAnimation(Value: Boolean);
      var
      Info: TAnimationInfo;
      begin
      Info.cbSize := SizeOf(TAnimationInfo);
      BOOL(Info.iMinAnimate) := Value;
      SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0);
      end;<br>

      procedure ShowWinNoAnimate(Handle: HWnd; CmdShow: Integer);
      var
      Animation: Boolean;
      begin
      Animation := GetAnimation;
      if Animation then SetAnimation(False);
      ShowWindow(Handle, CmdShow);
      if Animation then SetAnimation(True);
      end;

      </pre>

      aus Unit Forms.pas

      Gruß Hage

      Comment


      • #4
        Erst mal Danke für deine Antwort!! (hab doch gewusst dass sich wer
        finden wird! ;o) )<BR>
        Also, wenn ich das richtig verstanden hab wird SystemParametersInfo
        die Animation systemweit abgeschaltet. Gibts es vielleicht auch eine
        Möglichkeit die Animation nur für ein spezielles Fenster zu
        verhindern? Und zwar für die Dauer die das Fenster existiert? Wenn
        nicht, dann werd ich mich wohl oder übel mit meiner jetzigen Methode
        zufrieden geben.<BR>
        Im Moment setz ich mit SetWindowPlacement die Position der minimierten
        Form fest. Dadurch "fliegt" das Fenster dann dorthin wo es hin soll:
        <font size=2 face="Courier New"><font color="#000000"><b>var
        </b>&nbsp;&nbsp;WP:&nbsp;WindowPlacement;<BR>
        &nbsp;&nbsp;scrPoint:&nbsp;TPoint;<BR>
        <b>begin<BR>
        </b>&nbsp;&nbsp;WP.length&nbsp;:=&nbsp;SizeOf(WP);<B R>
        &nbsp;&nbsp;GetWindowPlacement(FForm.Handle,&nbsp; @WP);<BR>
        &nbsp;&nbsp;scrPoint&nbsp;:=&nbsp;FButton.ClientTo Screen(Point(0,&nbsp;0));<BR>
        &nbsp;&nbsp;<b>if</b>&nbsp;FForm.FormStyle&nbsp;=&nbsp;fsMDIChild&nbs p;<b>then<BR>
        </b>&nbsp;&nbsp;&nbsp;&nbsp;scrPoint&nbsp;:=&nbsp;FF orm.ScreenToClient(scrPoint);<BR>
        &nbsp;&nbsp;<b>if</b>&nbsp;IsWindowVisible(FForm.Handle)&nbsp;<b>then <BR>
        </b>&nbsp;&nbsp;&nbsp;&nbsp;WP.ShowCmd&nbsp;:=&nbsp; SW_SHOWNA<BR>
        &nbsp;&nbsp;<b>else<BR>
        </b>&nbsp;&nbsp;&nbsp;&nbsp;WP.ShowCmd&nbsp;:=&nbsp; SW_HIDE;<BR>
        &nbsp;&nbsp;<b>if</b>&nbsp;(WP.ptMinPosition.x&nbsp;&lt;&gt;&nbsp;scr Point.x)&nbsp;<b>or</b>&nbsp;(WP.ptMinPosition.y&nbsp;&lt;&gt;&nbsp;scr Point.y)&nbsp;<b>then<BR>
        </b>&nbsp;&nbsp;<b>begin<BR>
        </b>&nbsp;&nbsp;&nbsp;&nbsp;WP.flags&nbsp;:=&nbsp;WP F_SETMINPOSITION;<BR>
        &nbsp;&nbsp;&nbsp;&nbsp;WP.ptMinPosition&nbsp;:=&n bsp;scrPoint;<BR>
        &nbsp;&nbsp;&nbsp;&nbsp;SetWindowPlacement(FForm.H andle,&nbsp;@WP);<BR>
        &nbsp;&nbsp;<b>end</b>;<BR>
        <b>end</b>;<BR>
        </font></font>
        Ich weiß allerdings nicht ob diese Methode nicht irgendwelche
        unerwünschten Nebeneffekte hat.

        Motz

        Comment


        • #5
          Hi

          Jo:

          <pre>

          type
          TMyForm = class(TForm)
          protected
          procedure WMSysCommand(var Msg: TWMSysCommand); message wm_SysCommand;
          end;<br>

          procedure TMyForm.WMSysCommand(var Msg: TWMSysCommand);
          begin
          case Msg.CmdType and $FFF0 of
          sc_Minimize: ShowWindow(Handle, sw_Minimize);
          sc_Maximize: ShowWindow(Handle, sw_Maximize);
          sc_Restore: ShowWindow(Handle, sw_Restore);
          else
          inherited;
          end;
          end;

          </pre>

          Gruß Hage

          Comment


          • #6
            Das funktioniert aber auch alles ohne die eigene Message-Behandlung..
            ich setz nur die Position der Form wenn sich die Position des Buttons
            ändert. Also wenn zB die Form auf der sich die Taskbar befindet oder
            die Taskbar selbst verschoben wird etc... wenn du willst kann ich dir die
            Komp mal schicken damit du sie dir anschauen kannst wenn du mal Zeit
            und Lust dazu hast. Jeder andere der sie haben will soll sich ruhig
            bei mir melden. Ich bin froh wenn ich ein paar Tester hab! :-)

            Motz

            Comment


            • #7
              Hm.. Das funktioniert aber auch alles ohne die eigene
              Message-Behandlung.. ich setz nur die Position der Form wenn sich die
              Position des Buttons ändert. Also wenn zB die Form auf der sich die
              Taskbar befindet oder die Taskbar selbst verschoben wird etc... wenn
              du willst kann ich dir die Komp mal schicken damit du sie dir
              anschauen kannst wenn du mal Zeit und Lust dazu hast. Jeder andere der
              sie haben will soll sich ruhig bei mir melden. Ich bin sowieso froh
              wenn ich ein paar Tester hab! :-)

              Motz

              Comment

              Working...
              X