![]() |
Form ohne Animation maximieren
Hallo zusammen,
mein Problem diesmal: Ich will ein Formular (MDI Child) ohne Animation maximieren. Ich habe schon ziemlich alles versucht, bin aber nicht zu einer Lösung gekommen. Ich hoffe, ihr wisst weiter! :thumb: Gruß, Marco |
Re: Form ohne Animation maximieren
Hi Marco,
das geht wie folgt:
Delphi-Quellcode:
Der negative Seiteneffekt ist allerdings, dass für einen kurzen Moment deine Form einfriert und es so aussieht als ob dein Prog hängt. Hoffe dir geholfen zu haben ;)
//In deiner Hauptform rufst du auf:
LockWindowUpdate(Handle); //Danach das MDI-Child erstellen // ... //Dann die Hauptform wieder zum neuzeichnen freigeben LockWindowUpdate(0); Mfg phlux :hi: |
Re: Form ohne Animation maximieren
Hallo Christian,
Zitat:
Danke trotzdem! :) Gruß, Marco |
Re: Form ohne Animation maximieren
Ulkig... Bei Delphi 4 suchte ich mal nach ne Funktion um das Maximieren zu animieren. :wall: Dann war das ja doch kein Bug sondern ein Feature. :mrgreen:
Aber sorry, weiss allerdings auch kein Rat. |
Re: Form ohne Animation maximieren
Hi Tom,
Zitat:
Danke, Marco |
Re: Form ohne Animation maximieren
die Animation kommt vom Windows, demnach solltest du es einfach im Windows abstellen. Oder du lässt den maximieren button weg und machst einen eigenen Button der die Größe des Forms ändert. Letztendlich wird schließlich bei dem Effekt nicht das Form stück für stück vergrößert sonder einfach nur der StandardWindow-Rahmen animiert vergrößert.
|
Re: Form ohne Animation maximieren
Hello Sir,
Zitat:
Zitat:
Zitat:
Gruß, Marco |
Re: Form ohne Animation maximieren
Zitat:
Abschalten, Maximieren, Anschalten :D |
Re: Form ohne Animation maximieren
Zitat:
Vielen Dank trotzdem schon einmal für die rege Beteiligung! :thumb: Um diese Uhrzeit hätte ich damit echt nicht gerechnet... :) Grüße, Marco |
Re: Form ohne Animation maximieren
bei normalen Fenstern mache ich das so:
Delphi-Quellcode:
Vielleicht hilfts!
type
TForm1 = class(TForm) private { Private-Deklarationen } public procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.WMSysCommand; begin if (Msg.CmdType = SC_MAXIMIZE) then begin hide; windowstate := wsMaximized; show; end else inherited; end; |
Re: Form ohne Animation maximieren
Hallo DBR,
Zitat:
1) Das VCL-Hide() weigert sich, MDI-Childs zu verstecken. Ist kein Problem, einfach in ShowWindow(Handle, SW_HIDE) umwandeln, dann funktiert das. :) 2) Zitat:
Ersteres kann durch Maximieren über SendMessage(Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0) umgangen werden, der zweite Punkt ist z.B. über lParam zu lösen (bei SendMessage diesen einfach z.B. auf 1 setzen und in WMSysCommand dann abfragen). 3) Aber: Zitat:
So, und an diesem letzten Punkt bin ich gescheitert... :? Vielleicht noch ein kleiner (vielleicht doch nicht ganz unwichtiger) Nachtrag: :oops: Worum es mir eigentlich geht, d.h. was ich tun will, ist folgendes: Meine Anwendung speichert beim Beenden, ob das aktive MDI-Child maximiert ist oder nicht. Beim nächsten Start der Anwendung und Öffnen eines MDI-Childs soll dieses wieder direkt im gespeicherten Zustand erscheinen (d.h. maximiert oder normal, ohne Animation). Ich hoffe auf weitere Antworten! Danke schon im Voraus! :thumb: Grüße, Marco |
Re: Form ohne Animation maximieren
Dafür hätte ich auch gerne eine Lösung, denn meine Anwendung benutzt MDI-Childs in BPLs (komplettes Anwendungsmodul in einer BPL). Wenn ich jetzt vom Hauptprogramm etwas öffne, habe ich auch diese Maximieren-Animation die zwar technisch nicht stört, jedoch nicht chic für das Auge ist.
Gruß Igotcha |
Re: Form ohne Animation maximieren
Hey, keine Ideen mehr? :(
:coder: Bitte um Hilfe :wink: Danke, Marco |
Keine Ideen?
*push* :(
|
Re: Form ohne Animation maximieren
Wenn du schon vor der eigentlichen Erstellung des Fensters weißt, ob es maximiert sein soll, dann könntest du noch versuchen, CreateParams zu überschreiben:
Delphi-Quellcode:
// im interface-Teil innerhalb der TFormN-Deklaration
// ... protected procedure CreateParams(var Params: TCreateParams); override; // ... // im implementation-Teil procedure TFormN.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); if Maximiert then Params.Style := Params.Style or WS_MAXIMIZE; end; |
Re: Form ohne Animation maximieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
Zitat:
So, ich habe jatzt ein kleines Projekt geschrieben, welches den Sachverhalt verdeutlicht. Spielt einfach mal rum, Event-Handler & Co. sind alle (?) schon reingeschrieben, ihr könnt also direkt loslegen. Falls ihr einen Lösungsweg gefunden habt, bitte posten! :-D Ich freue mich auf euer Feedback! Gruß und Dank, Marco |
Re: Form ohne Animation maximieren
Hallo Marco,
Dir scheinen die kniffligen Fragen ja nicht auszugehen und da ich heute Nacht Wartungsdienst habe bin ich nun hier gelandet. Auch wenn es überhaupt nicht so faszinierenden Codes bedarf, könntest Du nicht einfach ein Panel im MDI Formular über den ganzen Clientbereich legen und nachdem die Clientfenster createt sind mit visible auf false verschwinden lassen. Damit würde der Fensteraufbau quasi im Untergrund passieren. Panel visible Position setzen und dann application.Processmessages. Ok, hat nicht die Faszination einer eigenen Formularcomponente...aber vielleicht... Grüße // Martin |
Re: Form ohne Animation maximieren
Also ich sehe da keine Animation. Kann es an den grafischen Einstellungen deines Betriebssystems oder an der Theme liegen, dass du bei dir eine Animation hast?
|
Re: Form ohne Animation maximieren
@Luckie: Die Animation sieht man nur wenn der Schnickschnack im Betriebssystem aktiviert ist.
|
Re: Form ohne Animation maximieren
Hallo zusammen,
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Form ohne Animation maximieren
Tut mir Leid, dass ich so aufdringlich bin, aber ich komme allein einfach nicht auf die Lösung. :(
Bitte um Hilfe! Danke, Marco |
Re: Form ohne Animation maximieren
hast du es schon mit SystemParametersInfo in Zusammenhang mit SPI_SETANIMATION probiert?
In der VCL wird es teilweise genau so gemacht, und zwar wird erst abgerufen ob die Animation aktiviert ist, wenn dem so ist wird es deaktiviert, dann wird das Fenster angezeigt und danch wird der Wert zurück gesetzt (sind nur paar zeilen, aber vcl-funktionen zu posten fällt wohl in das copyright und so schwer ist es ja auch nicht) |
Re: Form ohne Animation maximieren
SirThornberry hat Recht, in der VCL machen die wirklich so etwas (der Code ist jetzt nicht unbedingt Copyrightgefährdet, also poste ich ihn einfach mal):
Delphi-Quellcode:
... oder ohne Erzeugen halt so:
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; procedure SetAnimation(Value: Boolean); var Info: TAnimationInfo; begin Info.cbSize := SizeOf(TAnimationInfo); BOOL(Info.iMinAnimate) := Value; SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0); end; procedure CreateFormNoAnimate(Class: TComponentClass; var Reference); var Animation: Boolean; Instance: TComponent; begin Animation := GetAnimation; try if Animation then SetAnimation(False); Instance := TComponent(InstanceClass.NewInstance); TComponent(Reference) := Instance; try Instance.Create(Application); except TComponent(Reference) := nil; raise; end; finally if Animation then SetAnimation(True); end; end;
Delphi-Quellcode:
procedure WindowStateNoAnimate(Form: TCustomForm; State: TWindowState);
var Animation: Boolean; begin Animation := GetAnimation; try if Animation then SetAnimation(False); Form.WindowState := State; finally if Animation then SetAnimation(True); end; end; |
Re: Form ohne Animation maximieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
warum nicht gleich so? :-D Danke Volker, dein Code funktioniert einwanfrei! Vor lauter Begeisterung habe ich gleich mein Demoprojekt umgeschrieben, sodass das MDI Child tatsächlich unanimiert angezeigt wird. Danke auch dir, SirThornberry, und all den anderen Postern. :thumb: Endlich ein Problem weniger... Grüße und herzlichen Dank, Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 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