Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programm pausieren aber dennoch ansprechbar lassen (https://www.delphipraxis.net/119450-programm-pausieren-aber-dennoch-ansprechbar-lassen.html)

cRayZo 26. Aug 2008 21:06


Programm pausieren aber dennoch ansprechbar lassen
 
ich möchte eine Prozedur x min nach einem buttonclickneustarten. Es ist die onvisible prozedur meines Programmes. Im Moment habe ich das so gelöst:
Delphi-Quellcode:
Test.Visible:=False;
sleep(strtoint(Einstellungen.Edit1.Text)*60000);
Hauptseite.Visible:=False;
Test.Visible:=True;
Mein Ehrgeiz:
es soll möglich sein, während der Zeit, wo das Programm minimiert ist, weiter mit diesem programm zu arbeiten (zB. über tray Icon wieder öffnen etc)
Ich weiß dass das mit Threads realisierbar ist, aber ich habe keine Ahnung von Threads, und wenn ich das google, bekomm ich nur seiten mit 3 seiten Quellcode.
Ich denke, das geht leichter oder?
kann mir jemand die grundlegenden Züge von Threads erklären? wäre super!!

Nils_13 26. Aug 2008 21:16

Re: Programm pausieren aber dennoch ansprechbar lassen
 
Hi,

dieses Tutorial von Lossy eX ist sehr gut und hilft dir sicherlich.

gsh 26. Aug 2008 22:09

Re: Programm pausieren aber dennoch ansprechbar lassen
 
Nimm doch einfach einen Timer (ist im Prinzip ein einfacher Thread der nach einer Zeit eine Aktion auslöst)

cRayZo 26. Aug 2008 22:50

Re: Programm pausieren aber dennoch ansprechbar lassen
 
Zitat:

Zitat von gsh
Nimm doch einfach einen Timer (ist im Prinzip ein einfacher Thread der nach einer Zeit eine Aktion auslöst)

:wall: :wall: :wall: :wall:
:-D
NATÜRLICH :D

mann bin ich blöd..
wieso leicht, wenns auch kompliziert geht ne?

Luckie 26. Aug 2008 23:38

Re: Programm pausieren aber dennoch ansprechbar lassen
 
Zitat:

Zitat von gsh
Nimm doch einfach einen Timer (ist im Prinzip ein einfacher Thread der nach einer Zeit eine Aktion auslöst)

Das war nicht nur knapp da neben. Ein Timer wartet auf eine WM-TIMER Nachricht die von Windows an das Fenster des Timers gesendt wird. Ein Timer läuft auch im Threadkontext des zughörigen Fensters. Wenn dieser Thread mit einer Aufgabe ausgelastet ist und somit keine WM_TIMER Nachrichten abholen kann, steht auch der Timer. Ein zusätzlicher Thread hat einen eigenen Kontext mit einem eigenem Stack und eigener CPU-Zeit.
Deswegen ist ein Timer nicht mit einem Thread zu vergleichen.

gsh 26. Aug 2008 23:47

Re: Programm pausieren aber dennoch ansprechbar lassen
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von gsh
Nimm doch einfach einen Timer (ist im Prinzip ein einfacher Thread der nach einer Zeit eine Aktion auslöst)

Das war nicht nur knapp da neben. Ein Timer wartet auf eine WM-TIMER Nachricht die von Windows an das Fenster des Timers gesendt wird. Ein Timer läuft auch im Threadkontext des zughörigen Fensters. Wenn dieser Thread mit einer Aufgabe ausgelastet ist und somit keine WM_TIMER Nachrichten abholen kann, steht auch der Timer. Ein zusätzlicher Thread hat einen eigenen Kontext mit einem eigenem Stack und eigener CPU-Zeit.
Deswegen ist ein Timer nicht mit einem Thread zu vergleichen.

oh wieder was dazu gelernt ... hab das nur irgendwo gelesen ... naja aber als Lösung den Timer zu verwenden stimmt ja :mrgreen:

cRayZo 28. Aug 2008 16:27

Re: Programm pausieren aber dennoch ansprechbar lassen
 
okay also läuft, ist ja auch eigentlich kein Problem, aber nochmal eine Grundsätzliche Frage, hier am beispiel des Timers.

Ich habe verscuht mit try except einen Fehler abzufangen, aber das klappt nicht.
Der Fehler kann in der zweiten Zeile eigentlich gar nciht auftreten, weil die nur abläuft, wenn die erste ohne Fehler ist:
Delphi-Quellcode:
procedure TEinstellungen.Button1Click(Sender: TObject);
var
testi:real;
blubb:integer;
begin
blubb:=0;
        try testi:=strtofloat(Edit1.Text);
        except
                begin showmessage('der Wert muss eine Zahl sein!'#13'z.B. "13" oder "12,34"'); blubb:=1
                end
        end;

if blubb=0
then
        begin showmessage('erfolgreich'); Test.Timer1.Interval:=round(testi*60000); Einstellungen.Visible:=False;
        end;
end;
woran liegt das?

LuCSteR 28. Aug 2008 16:46

Re: Programm pausieren aber dennoch ansprechbar lassen
 
Poste diesen Code doch bitte mal formatiert. Da bekommt man ja Kopfschmerzen beim hingucken :)

cRayZo 28. Aug 2008 16:48

Re: Programm pausieren aber dennoch ansprechbar lassen
 
wenn es so besser ist?^^
ich komm auch ohne gut klar, ist ja nur ein mini-code :P


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