Entwickler-Ecke
Sonstiges (Delphi) - ONRezize benutzen...
Rag3 - Fr 24.06.05 10:28
Titel: ONRezize benutzen...
Hi,
ich würde gerne mit einer Prozedur mein Bild (TImage) vergrößern und die Darstellung neu berechnen Lassen. Wenn ich aber mit OnResize arbeite, so wie ich es kenne, aktualisiert der jeden Augenblick das Bild, was auf langsameren Rechnern zu erheblichen Problemen führen würde. Daher würde ich die neuberechnung des Bildes gerne erst ausführen, wenn die Größenänderung beendet ist. Wie mache ich sowas?
mfg
Rag3
Narses - Fr 24.06.05 10:46
Moin!
Vorschlag: Du packst noch einen Timer mit auf das Formular. Wenn das OnResize eintritt, dann merkst du dir die neuen Ausdehnungen und startest den Timer (mit, keine Ahnung, 1000ms oder so). Wenn vor Ablauf des Timers noch ein OnResize kommt, stoppst du den Timer, merkst dir wieder die neuen Daten und startest den Timer. Wenn man nicht mehr an der Größe rumspielt, dann läuft der Timer nach dem Ändern irgend wann ab und das OnTimer-Ereigniss tritt ein: hier machst du dann erst die Resize-Aktionen. :wink:
cu
Narses
Lossy eX - Fr 24.06.05 11:16
Du kannst auch dir bescheid sagen lassen, wenn der Benutzer das Fenster nicht mehr in der Größe verändern möchte.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| TForm1 = class(TForm) protected procedure WMExitsizemove(var Message: TMessage); message WM_EXITSIZEMOVE; public end;
implementation
procedure TForm1.WMExitsizemove(var Message: TMessage); begin end; |
Narses - Fr 24.06.05 11:28
Moin!
Lossy eX hat folgendes geschrieben: |
| Du kannst auch dir bescheid sagen lassen, wenn der Benutzer das Fenster nicht mehr in der Größe verändern möchte. |
Klar, dass ist natürlich die elegantere Variante, wenn du konkret auf das Ende des Sizings reagieren willst, mein Vorschlag kann aber (bei geeignetem Timer-Interval) auch zwischendurch schonmal was neu zeichnen; ist also quasi ein Filter für die Häufigkeit der Events. :wink:
cu
Narses
@Lossy eX: Die Idee ist aber gut! :wink:
Rag3 - Fr 24.06.05 14:47
also die lösungen gefallen mir prinzipiell beide gut, ich kann ja per einstellung festlegen lassen, ob erst am ende oder mitten drinnen aktualisiert werden soll. So kann jeder nach seiner Hardware entscheiden.
Nur verstehe ich nicht ganz, wie ich den surcecode oben einbinden kann, bitte erklär mir das nochmal. Ich werde das ganze dann morgen abend mal probiern und mein ergebnis posten!
mfg
Lossy eX - Fr 24.06.05 14:58
Na ja. Den Code musst du halt in dein Formular schreiben. Ein leeres Formular sieht so aus.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| TForm1 = class(TForm) private public end; |
Und du machst dann folgendes raus.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| TForm1 = class(TForm) private protected procedure WMExitsizemove(var Message: TMessage); message WM_EXITSIZEMOVE; public end; |
Im Implementation teil musst du diese Methode dann natürlich noch implementieren. Dazu schreibst du folgendes.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| implementation
procedure TForm1.WMExitsizemove(var Message: TMessage); begin end; |
Besser kann ich es jetzt echt nicht erklären. Falls immer noch Bedarf besteht solltest du dir auf jeden Fall auch mal ein Tutorial über Objekt orientierte Programmierung anschauen.
Rag3 - Fr 24.06.05 17:54
thx, hab hinbekommen, hätte nur nicht gedacht, dass das so einfach geht. Objetorientierte Programmierung beherrsche ich eigentlich einigermaßen. Hab es immerhin hinbekommen ein Programm zur Darstellung von Mathematischen Funktionen jeder Art inkl. Parser in Delphi zu schreiben. Den werde ich übrigens demnächst mal hier im forum posten, wenn bedarf besteht...
danke für die hilfe!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!