Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi MultiThreading bringt Form nach vorn (https://www.delphipraxis.net/83855-multithreading-bringt-form-nach-vorn.html)

jaikai 7. Jan 2007 14:36


MultiThreading bringt Form nach vorn
 
Moin,

ich hab mal wieder ein "unlösbares Problem"...

Ein Timer startet alle 60 sec einen Thread (Multithread), der im Hintergrund verschiedene Dinge erledigt, allesamt unwichtig und Kleinkram, aber lebensnotwendig. An den Thread ist bei Mißglücken noch eine showmodal-form, gekoppelt, dies zur Not erzwingt beachtet zu werden - aber - sie kommt nur unter speziellen Bedingungen nach vorn und bleibt normalerweise im Stall.

Wenn ich jetzt nicht im Programm selbst bin, sondern beispielsweise einen Brief in Word schreibe, dann schiebt sich nach den 60 sec die Form in den Vordergrund und unterbricht das Briefeschreiben.

Kann ich dem Thread (Windows oder der Form) mitteilen, daß sie hinten bleibt und die Arbeit des Vordergrund-Anwendung nicht unterbricht, obwohl sie leise und still vor sich hinbrasselt? Der Timer darf nicht disabled werden...

Danke

SirThornberry 7. Jan 2007 14:39

Re: MultiThreading bringt Form nach vorn
 
öffnest du innerhalb des Threads ein TForm? :cyclops:

jaikai 7. Jan 2007 15:12

Nee
 
Nein - der Thread öffnet nur eine Form, sofern die Rückgabewerte leer sind. Sind sie im Normalfall auch nicht, es sei denn er kappt die Leitung...

Das Hauptprogramm selbst hat -zig Formen.

jaikai 7. Jan 2007 15:25

Korrektur - hab doch ne Form
 
Halt Sorry - Natürlich gibt's ne Form.

Wie sollte die Routine sonst meckern können, wenn die Werte nicht stimmen...

Delphi-Quellcode:
// Der Thread:

procedure TKeyinside.Execute;
begin
  Synchronize(Showform);                   // Thread Code abarbeiten
end;

procedure TKeyinside.Showform;
{ Nur hier darf das MultiThreading 'Form.create' hinein }
begin
  if LaeuftSchon <> 'besetzt' then begin
     if not Assigned(Form_CheckIt) then begin
        Form_CheckIt:= TForm_CheckIt.Create(Form_CheckIt);  
        with Form_CheckItdo begin
          // ...
          end;

        if Form_CheckIt.Rueckgabewert <> DemWasErSeinSollte then
           Form_CheckIt.ShowModal;
        Form_CheckIt.Destroy;
        Form_CheckIt:= nil;
        LaeuftSchon := '';
        end;
     end;
end;

Wobei ich eine modale Form benötige, sofern der Rückgabewert falsch ist. 'TopMostWindows', 'HWND_TOPMOST' geht in diesem Falle nicht! Die aktuelle Bearbeitung muss unzterbrochen werden, bis alles wieder im Lot ist...


Gruss


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