Autor Beitrag
Rag3
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Fr 24.06.05 10:28 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: 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.

ausblenden 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
    { Public-Deklarationen }
  end;

implementation

procedure TForm1.WMExitsizemove(var Message: TMessage);
begin
  // Mach mich groß.
end;

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 24.06.05 11:28 
Moin!

user profile iconLossy 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Fr 24.06.05 14:58 
Na ja. Den Code musst du halt in dein Formular schreiben. Ein leeres Formular sieht so aus.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


Und du machst dann folgendes raus.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  protected
    procedure WMExitsizemove(var Message: TMessage);
      message WM_EXITSIZEMOVE;

  public
    { Public-Deklarationen }
  end;


Im Implementation teil musst du diese Methode dann natürlich noch implementieren. Dazu schreibst du folgendes.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
implementation

procedure TForm1.WMExitsizemove(var Message: TMessage);
begin
  // Mach mich groß.
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.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Rag3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: 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!