Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Programm Stop (https://www.delphipraxis.net/207019-programm-stop.html)

venice2 17. Feb 2021 18:53

AW: Programm Stop
 
Zitat:

Zitat von himitsu (Beitrag 1483215)
Warum nicht
Delphi-Quellcode:
Application.ProcessMessages;
verwenden?

Delphi-Quellcode:
procedure WinProcessMessages;
var
  ProcMsg: TMsg;
  Handled: Boolean;
begin
  while PeekMessage(ProcMsg, 0, 0, 0, PM_REMOVE) do
  begin
    { Der Teil fehlt auch alles bei dir, welchen Application.ProcessMessages sonst eigentlich machen würde.
    Handled := False;
    if Assigned(Application.OnMessage) then
      Application.OnMessage(MsgProcMsg, Handled);
    if Application.IsPreProcessMessage(ProcMsg) or Application.IsHintMsg(ProcMsg) or Handled
        or Application.IsMDIMsg(ProcMsg) or Application.IsKeyMsg(ProcMsg) or Application.IsDlgMsg(ProcMsg) then
      Continue;
    }
    if (ProcMsg.message = WM_QUIT) then
    begin
      Application.Terminate; // denn wie soll Delphi sonst das Ende mitbekommen, wenn du alle Messages hier abfängst?
      Break; // oder Exit; ... verlässt Beides diese Prozedur, da nach der Schleife eh Schluß ist
    end;
    TranslateMessage(ProcMsg);
    DispatchMessage(ProcMsg);
  end;
end;

Da fehlt gar nichts denn meine Version ist NONVCL.
Application und dein Handle gibt es bei mir nicht.
Nur zur Info!

Zitat:

Wenn du die o.g. Lösung einbaust, hängst du immer in Btn_GCode_Memo2_sendenClick fest.
Das ist quatsch denn dann dürfte WM_PAINT und alle anderen Messagen nicht mehr arbeiten.
überlege doch mal was Application.ProcessMessages; oder meine Version für NONVCL denn macht.

Aber egal es läuft ja jetzt scheinbar bei ihm und Thema erledigt.

DieDolly 17. Feb 2021 19:05

AW: Programm Stop
 
Zitat:

Das ist quatsch
Ist es nicht.

- button click
-- for-schleife in button click
--- for-schleife arbeit
-- for-schleife ende
- button click ende


Man hängt so lange im button fest/drin, bis das Ende der Schleife erreicht ist. Deshalb ein Thread.

venice2 17. Feb 2021 19:10

AW: Programm Stop
 
Zitat:

Zitat von DieDolly (Beitrag 1483231)
Zitat:

Das ist quatsch
Ist es nicht.

- button click
-- for-schleife in button click
--- for-schleife arbeit
-- for-schleife ende
- button click ende


Man hängt so lange im button fest/drin, bis das Ende der Schleife erreicht ist. Deshalb ein Thread.

Du verstehst es nicht.
So wie du es widergibst müßte die Anwendung innerhalb der schleife hängen tut sie aber nicht unter Verwendung von Application.ProcessMessages;
Deshalb brauche ich dafür nicht extra einen Thread.

himitsu 17. Feb 2021 19:31

AW: Programm Stop
 
@venice2:
Nur daß dein NonVCL aber sein VCL kaputt macht, wenn er das einfach so verwendet, da er garantiert die VCL benutzt und dann dadurch mehr Probleme bekommen kann, als es löst.

Zitat:

nicht unter Verwendung von Application.ProcessMessages;
Jupp, wenn das oder Ähnliches verwendet wird, dann hängt es nicht.



Wir haben bei uns eine Variante von Application.ProcessMessages (ähnlich deinem NonVCL-Code), die aber keine Tastatur und Mausereignisse verarbeitet (überschpringt sie und lässt sie in der MessageQueue, für später ... oder Löscht sie, falls gewünscht), damit z.B. nicht während der Schleife "nochmal" auf diesen Button geklickt werden kann.

venice2 17. Feb 2021 19:36

AW: Programm Stop
 
Zitat:

Zitat von himitsu (Beitrag 1483234)
@venice2:
Nur daß dein NonVCL aber sein VCL kaputt macht, wenn er das einfach so verwendet, da er garantiert die VCL benutzt und dann dadurch mehr Probleme bekommen kann, als es löst.

Das ist richtig.

Es sollte auch nur einen weg aufzeigen. ;)
Viele Wege führen nach Köln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 Uhr.
Seite 2 von 2     12   

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