Autor Beitrag
TheNeon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Fr 13.06.03 15:58 
Hallo,
ich möchte meine Form "einfrieren".

Da ich in einer Funktion ziemlich viel an der Form ändere (Farben, Schriftart, - größe, Farbverlauf, Bilder etc) und das sehr lange dauert (ca. 2sec) möchte ich nicht, dass der User genau sieht wie alles so gewechselt wird, da es auch ziemlich unschön aussieht. Wie kann ich denn unterbinden, dass die Form "aktualisiert" wird ???

DANKE :wink2:
Hansi@OMG
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: Fr 13.06.03 16:21 
Versuchs mal damit, du machst eine 2. Form wo drinsteht, dass die Einstellungen übernommen werden. Und Bevor die Einstellungen übernommen werden, sagst du ihm, form1.visible:=false; und das er die 2. Form zeigen soll und mit einem Timer in Form2 kannst du die Form2 nach 2 sec. wieder schließen und die erste Form wieder anzeigen lassen.

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
TheNeon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Fr 13.06.03 16:25 
Hansi@OMG hat folgendes geschrieben:
Versuchs mal damit, du machst eine 2. Form wo drinsteht, dass die Einstellungen übernommen werden. Und Bevor die Einstellungen übernommen werden, sagst du ihm, form1.visible:=false; und das er die 2. Form zeigen soll und mit einem Timer in Form2 kannst du die Form2 nach 2 sec. wieder schließen und die erste Form wieder anzeigen lassen.


ich hätte aber gerne, dass meine MainForm sichtbar bleibt :(

:wink2:
BungeeBug
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 901



BeitragVerfasst: Fr 13.06.03 16:36 
Hi,
sezt doch einfach alle Komponenten Visible := fasle ein :) dann is die Form zwar leer aber man sieht nix :P

MfG BungeeBug
TheNeon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Fr 13.06.03 16:53 
BungeeBug hat folgendes geschrieben:
Hi,
sezt doch einfach alle Komponenten Visible := fasle ein :) dann is die Form zwar leer aber man sieht nix :P

MfG BungeeBug


lol ................ "Da_Knuddelbaer" lacht sich neben mir einen ab :D

hmm ........ zum einen würde das das Verarbeiten nochmals hemmen, und zum anderen habe ich soviele visuelle Kompos ...... die willst du nicht wirklich entvisualisieren :wink: 8)

:wave:
yukon-troll
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 60



BeitragVerfasst: Fr 13.06.03 17:42 
Hallo,

mach doch einfach einen Screenshot von deinem Anwendungsfenster
und setze ihn für die Zeit der Verarbeitung darüber (z.B. mit einer ImageKomponente
auf einem Panel oder einer 2. Form).
So brauchst du nichts an der Sichtbarkeit der Komponenten zu ändern.

MfG yukon-troll
TheNeon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Fr 13.06.03 18:07 
yukon-troll hat folgendes geschrieben:
Hallo,

mach doch einfach einen Screenshot von deinem Anwendungsfenster
und setze ihn für die Zeit der Verarbeitung darüber (z.B. mit einer ImageKomponente
auf einem Panel oder einer 2. Form).
So brauchst du nichts an der Sichtbarkeit der Komponenten zu ändern.

MfG yukon-troll


meinst du nicht, dass es etwas komisch aussieht, wenn ich einen Screenshot reinsetze, dessen Programmeinstellungen total von den richtigen abweichen?!? :shock: :roll:

:?
yukon-troll
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 60



BeitragVerfasst: Fr 13.06.03 18:24 
ich meinte hierbei natürlich einen aktuellen Screenshot und keinen vorher festgelegten,
d.h. erst beim Ausführen deiner Funktion:

Screenshot erstellen -> darüberlegen -> alle Änderungen an Form vornehmen
-> darübergelegten entfernen

(du wolltest doch das der User das Wechseln der Einstellungen nicht sieht ?)

MfG yukon-troll
TheNeon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Fr 13.06.03 18:36 
hmm .... ja ok, so dürfte es gehen, allerdings finde ich das etwas umständlich und wohl etwas Speicher- bzw. CPU-belastend.

oder??

:wink2:
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Fr 13.06.03 18:43 
Probier's doch mal mit WM_SETREDRAW.
yukon-troll
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 60



BeitragVerfasst: Fr 13.06.03 18:49 
die CPU-Belastung dürfte hierbei vernachlässigbar sein,
und der Speicher wird ja nur für den Moment der Anzeige belegt,
wenn du die beteiligten Komponenten erst bei Bedarf zur Laufzeit
erzeugst und gleich wieder freigibst.

Du musst halt immer zwischen Aufwand und Nutzen abwägen.
Du könntest natürlich auch die entsprechenden Windowsbotschaften zum
Neuzeichnen der Komponenten oder der Form abfangen
und erst am Ende der Verarbeitung durch ein
Invalidate ein Neuzeichnen erzwingen, aber bei vielen Komponenten ?
Wie gesagt Aufwand<->Nutzen.

MfG yukon-troll
yukon-troll
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 60



BeitragVerfasst: Fr 13.06.03 19:01 
@toms

ich glaube dein Vorschlag ist die bessere Lösung,
WM_SETREDRAW war mir noch nicht bekannt !

Danke

MfG yukon-troll
TheNeon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Fr 13.06.03 19:45 
yukon-troll hat folgendes geschrieben:
@toms

ich glaube dein Vorschlag ist die bessere Lösung,
WM_SETREDRAW war mir noch nicht bekannt !

Danke

MfG yukon-troll


........ mir auch nicht :(

wie wendet man das denn an ?!?!?????? :? :(

:wink2:
yukon-troll
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 60



BeitragVerfasst: Sa 14.06.03 09:00 
sollte so funktionieren (nicht getestet):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
// schaltet das Zeichnen  ab
SendMessage(Form.Handle, WM_SETREDRAW, LPARAM(false), 0);
{...dein code hier...}
// schaltet das Zeichnen an
SendMessage(Form.Handle, WM_SETREDRAW, LPARAM(true), 0);
// zeichnet neu
Form.Invalidate; // oder auch: Form.Repaint;


MfG yukon-troll