Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kein "FormMouseDown" während Arbeit in anderer Prozedur ? (https://www.delphipraxis.net/47404-kein-formmousedown-waehrend-arbeit-anderer-prozedur.html)

letsfetz 10. Jun 2005 15:28


Kein "FormMouseDown" während Arbeit in anderer Pro
 
Hi, ich bin ein EX- Basicprogrammierer und mittlerweile auf Delphi7 umgestiegen. :thumb:
Das klappt auch sehr gut ! - Mein erstes Fraktalprogramm funzt auch schon.
Sieht super aus und wenn es fertig ist will ich es hier auch zeigen...

Nun hab ich aber noch so´n paar kleinere Probleme... :gruebel:

Da ich daraus ein Bildschirmschoner proggen will (der eigentlich auch schon funktioniert),
hänge ich hier fest: :wall:

Die Berechnung des Fraktales ist im vollen Gange... - Und dann wenn man die Maus klickt oder die Tastatur betätigt, sollte das Fenster sofort schließen.

Dies tuts auch aaaaber: Erst nachdem das Fraktal fertiggerechnet hat...(und das kann dauern). :angel2:

FormMouseDown habe ich als procedure mit im Formular. Wie gesagt... Während der rechnet kommt es nicht zum Abbruch (Application.Terminate;)

Vermutlich habe ich nur einen kleinen Denkfehler gemacht...
Wer gibt mir den entscheidenden tip ?

Gruß Micha :spin2:

Bernhard Geyer 10. Jun 2005 15:29

Re: Kein "FormMouseDown" während Arbeit in anderer
 
Stichwort: Application.ProcessMessages einfügen, damit währen der lanandauernden Aktion Benutzerangeben entgegen genommen werden.
Altenative: Berechnung in Thread auslagern.

letsfetz 10. Jun 2005 15:38

Re: Kein "FormMouseDown" während Arbeit in anderer
 
Zitat:

Stichwort: Application.ProcessMessages einfügen, damit währen der lanandauernden Aktion Benutzerangeben entgegen genommen werden.
OK, hört sich gut an... Wenn ich nun noch weiss wo ich das einfügen soll ? :?:

In der rechnenden Prozedur ?
Oder weiter oben bei den Deklarationen ?

Dann bin ich auf dem Weg ! :thumb:

Bernhard Geyer 10. Jun 2005 15:39

Re: Kein "FormMouseDown" während Arbeit in anderer
 
Zitat:

Zitat von letsfetz
OK, hört sich gut an... Wenn ich nun noch weiss wo ich das einfügen soll ?

In die rechnenden Prozedur ?

Marphy 10. Jun 2005 21:44

Re: Kein "FormMouseDown" während Arbeit in anderer
 
Hallo ihr beiden, :-D
Applications.ProcessMessages (Delphi) = DoEvents (VB)

Das sollte dir weiterhelfen :wink:

Gruß, Marco

letsfetz 11. Jun 2005 05:44

Re: Kein "FormMouseDown" während Arbeit in anderer
 
Zitat:

Zitat von Marphy
Hallo ihr beiden, :-D
Applications.ProcessMessages (Delphi) = DoEvents (VB)

Das sollte dir weiterhelfen :wink:

Gruß, Marco

Danke schon mal, :hi: - ich habe "Applications.ProcessMessages" in die rechnende Schleife für
das Fraktal eingefügt. Das Programm reagiert dennoch nicht auf Mausklick oder Tastatur. :(
Es rechnet immer erst fertig (ca 3 min). Dann wird der Klick registriert und das Programm
endet.

Wenn ich nicht klicke rechnet es brav weiter (Bildschirm löschen und nächstes Fraktal). :)

Noch was: Ich habe Applications.ProcessMessages in verschiedene Positionen der (3 in sich verschachtelten) Schleife eingebaut - Ohne Erfolg. Außer das die eh schon langsame Berechnung noch langsamer wird.

Gibt es einen einfacheren Weg ? - Sonst werde ich halt mit einer IF-Abfrage irgend einen Tastendruck
erkennen müssen. :|

Noch was am Rande: :coder2: Das ist das beste und nettese Forum in welchen ich jemals rumgestöbert habe.
1000 Suchanfragen lieferten mir fast 1000 Lösungen und deswegen kann ich es nur weiterempfehlen.

Danke, Micha

Khabarakh 11. Jun 2005 07:52

Re: Kein "FormMouseDown" während Arbeit in anderer
 
Das sollte eigentlich gehen, ich mache es bei einer Endlosschleife nicht anders :gruebel: . Hier mal der Aufbau in etwa:
Delphi-Quellcode:
procedure TForm1.Activate(...);
begin
  ...
  while IsRunning do
  begin
    ...
    Application.ProcessMessages;
  end;
end;

procedure TForm1.Paintbox321Click(...);
begin
  DoSomething;
end;
Ein Schleifendurchlauf dauert im Durchschnitt 7ms, DoSomething wird ohne sichtbare Verzögerung ausgeführt.

SirThornberry 11. Jun 2005 08:23

Re: Kein "FormMouseDown" während Arbeit in anderer
 
oder wie schon erwähnt die Berechnung in einen Thread auslagern.

malo 11. Jun 2005 09:22

Re: Kein "FormMouseDown" während Arbeit in anderer
 
Zitat:

Zitat von SirThornberry
oder wie schon erwähnt die Berechnung in einen Thread auslagern.

Und ein Neuling in diesem Gebiet (jedenfalls in der Sprache Delphi) wird dazu hier ein Tutorial von Luckie finden ;)

letsfetz 11. Jun 2005 11:45

Re: Kein "FormMouseDown" während Arbeit in anderer
 
Zitat:

Zitat von malo
Zitat:

Zitat von SirThornberry
oder wie schon erwähnt die Berechnung in einen Thread auslagern.

Und ein Neuling in diesem Gebiet (jedenfalls in der Sprache Delphi) wird dazu hier ein Tutorial von Luckie finden ;)

So ! - Ich glaube mein Problem wurde erkannt ! :thumb:

Ich kenne mich in der Tat noch nicht mit Threads aus...
Somit werde ich das Tutorial wie oben erwähnt durchackern.
Es könnte die Lösung sein. Dazu brauch ich etwas Zeit. :xmas:

*grins und schmunzel* -> Ich kann mir schon denken warum sich die Schleife nicht abbrechen lässt:

Windows ist sooo intelligent, daß es erkennt wenn ein prima Code läuft - diesen dann auch nicht mehr beenden will. Es könnte ja sein das als nächstes ein Bluescreenprogramm gestartet wird. :bounce1:
*mußnunselberlachen*

Ihr hört demnächst auf jeden Fall von mir... Und nochmals Danke für die heißen Tipps !

Gruß Micha :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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