Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Woran kann ich merken, dass Rezise beendet ist? (https://www.delphipraxis.net/208042-woran-kann-ich-merken-dass-rezise-beendet-ist.html)

Chearly020664 31. Mai 2021 21:41

Woran kann ich merken, dass Rezise beendet ist?
 
Hallo,

habe eine Form mit einem Image. Die Form ist reziseable. Das Bild wird im Hintergrund in einer Bitmap mathem. berechnet und muss nach einem Rezise neu berechnet werden. Das Ereignis OnRezise wird aber ausgelöst mit dem Beginn der Größenänderung der Form.

Ich suche verzweifelt nach einem Ereignis, dass eintritt, wenn Rezise beendet ist, damit ich die neue Berechnung des Bildes aufrufen kann.

danke - Gruß

Redeemer 31. Mai 2021 21:46

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Du willst wissen, wann der Nutzer die Maustaste loslässt? Das wüsste ich auch gerne.

Ich hab das bisher immer mit einem TTimer von einigen hundert Millisekunden als Workaround gemacht. Skizze:

OnResize:
- Mache Timer aus. // optional, dient zum Zurücksetzen des Timers
- Mache Timer an.

OnTimer:
- Mache Timer aus.
- Tu was.

Uwe Raabe 31. Mai 2021 21:49

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Vcl/fmx?

Uwe Raabe 31. Mai 2021 21:59

AW: Woran kann ich merken, dass Rezise beendet ist?
 
OK, Delphi 7, ist klar.

Also, du kannst WMEXITSIZEMOVE im Form abfangen:

Delphi-Quellcode:

    procedure WMEXITSIZEMOVE(var Message: TMessage); message WM_EXITSIZEMOVE;

Redeemer 31. Mai 2021 22:17

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Danke. Dann muss man nur noch prüfen, ob sich die Größe geändert hat, für die man zuletzt gezeichnet hat, da das Event sonst ja auch beim Verschieben auslöst. Löst das Event auch aus, wenn das Fenster anderweitig in der Größe verändert wird (Windows+Pfeil, minimieren, maximieren, Bildschirm abgestöpselt usw.)?

Uwe Raabe 31. Mai 2021 22:26

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Aus der Doku:
Zitat:

Sent one time to a window, after it has exited the moving or sizing modal loop. The window enters the moving or sizing modal loop when the user clicks the window's title bar or sizing border, or when the window passes the WM_SYSCOMMAND message to the DefWindowProc function and the wParam parameter of the message specifies the SC_MOVE or SC_SIZE value.
Im Zweifel hilft probieren.

Chearly020664 1. Jun 2021 00:35

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Ich habe:

procedure WMEXITSIZEMOVE(var Message: TMessage);
message WM_EXITSIZEMOVE;
begin
BerechnedasBild(Sender);
end;

Zu meinen Programm-Procedures hinzugefügt und bekomme die Fehlermeldung "message --> unbekannte Anweisung"
und "BerechnedasBild --> undefinierter Bezeichner

Letzteres habe ich aber mehrmals in anderen procedures erfolgreich aufgerufen.-

Verwirrung bei mir, habe schon 13 Jahre nichts mehr mit Delphi 7 gemacht.

Grüße

venice2 1. Jun 2021 00:56

AW: Woran kann ich merken, dass Rezise beendet ist?
 
procedure TForm1.WMEXITSIZEMOVE(var Message: TMessage);
dann kannst du BerechnedasBild(Sender); verwenden

message WM_EXITSIZEMOVE; benötigst du nicht.

Delphi-Quellcode:
procedure TForm1.WMEXITSIZEMOVE(var Message: TMessage);
begin
  inherited;
  BerechnedasBild(Sender);
end;

Chearly020664 1. Jun 2021 05:29

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Code:
132 procedure TForm1.WMEXITSIZEMOVE(var Message: TMessage);

133 begin
134     inherited;
135     BerechnedasBild(Sender);
    end;
Führt jetzt beim Compilieren zu folgenden Fehlermeldungen:

(132): Undefinierter Bezeichner: 'WMEXITSIZEMOVE'
(132): ';' erwartet, aber '(' gefunden
(135): ';' erwartet, aber ')' gefunden
(135): Undefinierter Bezeichner 'BerechnedasBild'
(135): Undefinierter Bezeichner: 'Sender'

Tut mir jetzt leid, dass ich Euch mit derarttigen Trivialitäten belaste.
danke
Grüße

haentschman 1. Jun 2021 05:45

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Moin...:P

Winapi.Messages in uses vergessen? :wink:

upps... es geht ja nicht um die eigentliche Message. :wink: Hast du die procedure im private Abschnitt der Form deklariert oder nur Copy/Paste aus #8? :gruebel:

Zitat:

Ich habe:
...zeige mal die gesamte Unit.

Chearly020664 1. Jun 2021 06:49

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Code:
procedure WMEXITSIZEMOVE(var Message: TMessage); message     WM_EXITSIZEMOVE;
...
procedure TForm1.WMEXITSIZEMOVE(var Message: TMessage);
begin
    ShowMessage('Just Resized');
end;
Das läuft bei mir nach einem Resize.-

Wenn ich statt ShowMessage(); meine Berechnungs-procedure aufrufe:

Code:
procedure WMEXITSIZEMOVE(var Message: TMessage); message     WM_EXITSIZEMOVE;
...
procedure TForm1.WMEXITSIZEMOVE(var Message: TMessage);
begin
    BerechnedasBild(Sender);
end;
gibt es jetzt nur noch eine Fehlermeldung: Undefinierter Bezeichner 'Sender'

Chearly020664 1. Jun 2021 07:09

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier die ganze Unit1:

DeddyH 1. Jun 2021 07:13

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Versuch mal
Delphi-Quellcode:
procedure TForm1.WMEXITSIZEMOVE(var Message: TMessage);
begin
  inherited;
  BerechneDasBild(self);
end;

Chearly020664 1. Jun 2021 07:19

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Herzlichen dank - das funktioniert jetzt.

:oops: :roll:

venice2 1. Jun 2021 12:58

AW: Woran kann ich merken, dass Rezise beendet ist?
 
Zitat:

Versuch mal
jep. hatte es nur kopiert und nicht drauf geachtet das es Sender in der Procedure gar nicht gibt.
Solange es nun geht. :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz