Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   nachrichtenschleife aufrecht erhalten (https://www.delphipraxis.net/100331-nachrichtenschleife-aufrecht-erhalten.html)

lbccaleb 26. Sep 2007 13:05


nachrichtenschleife aufrecht erhalten
 
hy there,

ich habe ein nonvcl programm in dem eine suchfunktion etwas länger dauert nun wollte ich das er in der zeit die nachrichtenschleife aufrecht erhält!!

ich hab es mit

Delphi-Quellcode:
procedure ProcessMessages;
// hält die Nachrichtenschleife in Gang
var
  Msg: TMsg;
begin
  if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
end;
probiert nur leider beendet er dort mein programm nicht wirklich mehr mit, nimmt zwar noch eingaben entgegen, aber wird nicht wirklich geschlossen. nur das fenster verschwindet optisch..

gibt es da eine besser möglich keit die schleife aufrecht zu erhalten???


danke schon mal im vorraus

Luckie 26. Sep 2007 13:11

Re: nachrichtenschleife aufrecht erhalten
 
Versuch das:
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Procedure : ProcessMessages
// Comment  : Replacement for ProcessMessages of TApplication
procedure ProcessMessages(hWnd: DWORD);
var
  Msg              : TMsg;
begin
  while PeekMessage(Msg, hWnd, 0, 0, PM_REMOVE) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
end;

shmia 26. Sep 2007 13:12

Re: nachrichtenschleife aufrecht erhalten
 
Delphi-Quellcode:
function ProcessMessages:boolean;
// hält die Nachrichtenschleife in Gang
var
  Msg: TMsg;
begin
  if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
  begin
    result := Msg.Message <> WM_QUIT;
    if Result then
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
  end;
end;
In deinem Programmcode muss nun der Return-wert ausgewertet werden:
Delphi-Quellcode:
for I := 0 to 99999 do
begin
  // irgendwas tun ...
  if not ProcessMessages then Exit;
end;

lbccaleb 26. Sep 2007 13:22

Re: nachrichtenschleife aufrecht erhalten
 
mhh als handle das handle vom hauptfenster???

ich habs mit hinstance als handle versucht aber das ging nicht, fährt das programm fest und nimmt keine eingaben mehr an kann auch nicht auf normalem weg beendet werden!!

shmia 26. Sep 2007 15:57

Re: nachrichtenschleife aufrecht erhalten
 
Zitat:

Zitat von lbccaleb
mhh als handle das handle vom hauptfenster???

Auf welchen Beitrag bezieht sich diese Frage ?
Hast du meinen Betrag gelesen ? Hast du gesehen, dass ich eine Sonderbehandlung für die Message WM_QUIT eingebaut habe?! In der VCL wird das ganz ähnlich gemacht.

lbccaleb 26. Sep 2007 17:12

Re: nachrichtenschleife aufrecht erhalten
 
ja hab ich, hab ich auch getest deine version aber irgend wie immer noch nicht das, was ich mir erhofft hab.. und ich hab kein plan wiese....

ich hab es jetzt erst mal so gelöst das ich luckie´s version nehme und dann in wm_destroy noch zusätzlich nen halt; kommando eingefügt hab, das ist zwar nicht das gelbe vom ei aber es geht erstmal :pale: und der post von mir auf den von luckie bezogen, ja..


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