AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Fensteranimation deaktivieren bei TStyleManager.TrySetStyle(sStyleName)
Thema durchsuchen
Ansicht
Themen-Optionen

Fensteranimation deaktivieren bei TStyleManager.TrySetStyle(sStyleName)

Ein Thema von Codehunter · begonnen am 12. Apr 2018 · letzter Beitrag vom 12. Apr 2018
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.758 Beiträge
 
Delphi 12 Athens
 
#1

AW: Fensteranimation deaktivieren bei TStyleManager.TrySetStyle(sStyleName)

  Alt 12. Apr 2018, 08:27
Ich glaube, bei Windows 7 funktioniert das noch:

Delphi-Quellcode:
uses
  DwmApi;
...
  DwmEnableComposition(DWM_EC_DISABLECOMPOSITION);
  TStyleManager.TrySetStyle(sStyleName);
  DwmEnableComposition(DWM_EC_ENABLECOMPOSITION);
...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#2

AW: Fensteranimation deaktivieren bei TStyleManager.TrySetStyle(sStyleName)

  Alt 12. Apr 2018, 08:34
@Uwe: Genau das habe ich auch schon probiert. Das zwingt aber, wie oben geschrieben, das gesamte Windows einschl. Taskleiste in den Aero-Basic-Modus (Bei Windows 7). Genau das wollte ich ja nicht. Bei Windows 10 sehen die Animationen ein bisschen anders aus, die Fenster scheinen in sich zusammen zu fallen und werden anschließend wieder "aufgeblasen". Gibts denn keine Möglichkeit, selektiv nur die Fensteranimation zu deaktivieren, nicht das ganze Desktop-Theming?

EDIT/Nachtrag: Wie ich grade zufällig bemerkt habe, gibt es keine Animation, wenn ich Application.Mainform.BorderStyle:= bsNone einstelle. Allerdings sieht das dann ein bisschen seltsam aus, so "oben ohne"
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (12. Apr 2018 um 08:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#3

AW: Fensteranimation deaktivieren bei TStyleManager.TrySetStyle(sStyleName)

  Alt 12. Apr 2018, 09:06
So, das hier scheint (zumindest unter Windows 10) zu funktionieren:
Delphi-Quellcode:
procedure TfrmMain.SetStyle(const AStyleName: string);
begin
  LockWindowUpdate(Handle);
  BorderStyle:= bsNone;
  TStyleManager.TrySetStyle(AStyleName, FALSE);
  Application.ProcessMessages;
  LockWindowUpdate(Handle);
  BorderStyle:= bsSizeable;
  LockWindowUpdate(0);
end;
Zugegeben, es ist ziemlich freaky. Das doppelte LockWindowUpdate scheint notwendig zu sein, weil sich beim TrySetStyle das WindowHandle ändert. Es flickert zwar noch ein bisschen, aber die Animation ist weg und der Style-Wechsel geht wesentlich schneller. Die Probleme mit den Drittkomponenten scheinen im Moment auch beseitigt.

Für Verbesserungen bin ich aber gerne zu haben
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Fensteranimation deaktivieren bei TStyleManager.TrySetStyle(sStyleName)

  Alt 12. Apr 2018, 09:54
Ich verstehe noch nicht so ganz von was für einer Animation Du redest, eventuell kann Dir das dabei helfen
Delphi-Quellcode:
procedure TForm1.SetAnimation(Value: Boolean);
var
  Info: TAnimationInfo;
begin
  Info.cbSize := SizeOf(TAnimationInfo);
  BOOL(Info.iMinAnimate) := Value;
  SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0);
end;
Zu steuern über den Boolean. Das betrifft die Window Animation.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#5

AW: Fensteranimation deaktivieren bei TStyleManager.TrySetStyle(sStyleName)

  Alt 12. Apr 2018, 10:51
Ich verstehe noch nicht so ganz von was für einer Animation Du redest, eventuell kann Dir das dabei helfen
Schau dir mal das Projekt FMC an, da habe ich das selbe Problem. Rechts oben über das Einstellungsmenü. Wenn der Style gewechselt wird, erfolgt eine doppelte Fade-Animation (bei Windows 10) bzw. eine doppelte Schrumpf- und Aufblas-Animation (bei Windows 7).

Dein Code bewirkt übrigens, leider, gar nichts:
Delphi-Quellcode:
procedure TfrmMain.SetStyle(const AStyleName: string);

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

begin
  SetAnimation(FALSE);
  TStyleManager.TrySetStyle(AStyleName, FALSE);
  SetAnimation(TRUE);
end;
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Fensteranimation deaktivieren bei TStyleManager.TrySetStyle(sStyleName)

  Alt 12. Apr 2018, 11:12
Der de-/aktiviert Animationseffekte beim minimieren maximieren, hat mit Theme an sich so nichts zu tun, mir fiel nur keine andere Window Animation ein. Ich lad mal FMC, falls Source beiliegt versuch ich mich ein bissl da reinzuwurschteln.

PS: Nutzt Du vielleicht manuell irgendwo diesen Befehl: AnimateWindow(Form1.Handle, 3000, AW_BLEND); o.ä. ?
Der bewirkt bei Windows das was Du beschreibst.
Gruß vom KodeZwerg

Geändert von KodeZwerg (12. Apr 2018 um 11:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#7

AW: Fensteranimation deaktivieren bei TStyleManager.TrySetStyle(sStyleName)

  Alt 12. Apr 2018, 11:22
Source ist bei FMC nicht bei, kann ich auch nicht, weil z.T. rechtlich geschützt. Aber so weit weg bist du nicht mit der Fensteranimation beim Maximieren/Minimieren. Mach einfach ein beliebiges Fenster auf (Explorer, Word, whatever). Beim Öffnen wird es unter W10 sanft eingeblendet und beim Schließen sanft ausgeblendet. Das ist ja auch ganz nett und schön so. Nur stört genau das beim Stylewechsel, weil dabei per RecreateWnd das Fenster neu erstellt wird.

Ich hab dir mal eine ganz simple Demoanwendung beigepackt, die beim Buttonclick ein RecreateWnd auslöst. Dabei hast du dann genau den selben Fade-Out-In-Effekt (bei Windows 10), den ich deaktivieren möchte. Nicht global und schon gar nicht dauerhaft sondern nur fallbezogen während das Style gewechselt wird. Wenn du in dem Form dann Borderstyle von bsSizeable auf bsNone, bsToolWindow oder bsSizeToolWin stellst und dann auf den Button klickst, siehst du außer einem kurzen Verschwinden keine Animation. Es scheint also etwas mit den Border-Parametern zu tun zu haben.
Angehängte Dateien
Dateityp: zip RecreateDemo.zip (1,2 KB, 2x aufgerufen)
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (12. Apr 2018 um 11:26 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz