Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Aktion nach einer bestimmter Zeit durchführen (https://www.delphipraxis.net/100824-aktion-nach-einer-bestimmter-zeit-durchfuehren.html)

taktaky 4. Okt 2007 12:03


Aktion nach einer bestimmter Zeit durchführen
 
Hallo,

mit einem Klick auf ein Button wird den ganzen Bildschirm kopiert
Ich möchte aber, dass mein Form nicht mitkopiert werden, deswegen habe ich folgendes gemacht :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Hide;// Form1 verstecken
// dann kommt der Code um den Bildschirm zu kopieren
...

Form1.Show; // Form1 wieder sichtbar machen
end;

end.
Trotzdem wird mansch mal Form1 erwischt :mrgreen:

Also ich möchte gerne Form1 ein paar Sekunden (und nicht Bruchsekunde) ausblenden

Oder gibt es eine andere Idee?

(Ich möchte zuerst nicht einen Timer verwenden :mrgreen:)

Matze 4. Okt 2007 12:04

Re: Aktion nach einer bestimmter Zeit durchführen
 
Hilft DelayDelay denn nicht?

brinkee 4. Okt 2007 12:14

Re: Aktion nach einer bestimmter Zeit durchführen
 
Lass ihn eine Sekunde warten... ;) Oder wie auch immer, dann sollte Dein Form weg sein...

Delphi-Quellcode:
Sleep(1000);
LG, Markus

Matze 4. Okt 2007 12:17

Re: Aktion nach einer bestimmter Zeit durchführen
 
Da bei Sleep() das komplette Programm einfriert, würde ich darauf tippen, dass es damit auch nicht zuverlässig funktioniert.

brinkee 4. Okt 2007 12:23

Re: Aktion nach einer bestimmter Zeit durchführen
 
Hmm, da könntest Du natürlich richtig liegen... Jedoch wäre es einen Versuch wert ;)

LG, Markus

taktaky 4. Okt 2007 12:24

Re: Aktion nach einer bestimmter Zeit durchführen
 
wie kann ich den Procedure delay über mein Button aufrufen?
Delphi-Quellcode:
{Uses WINPROCS}

procedure TForm1.Delay(ms: Longint); {ms = milliseconds}
var
  TimeOut: Longint;
begin
  TimeOut:= GetTickCount + ms;
  While GetTickCount < TimeOut do
  begin
    {... do something or do nothing}
  end;
end;

taktaky 4. Okt 2007 12:28

Re: Aktion nach einer bestimmter Zeit durchführen
 
Zitat:

Zitat von brinkee
Lass ihn eine Sekunde warten... ;) Oder wie auch immer, dann sollte Dein Form weg sein...

Delphi-Quellcode:
Sleep(1000);
LG, Markus

Was sleep() mach, das Form frieren. Und das hat nicht mit dem Problem zu tun oder?

Kann man nicht das Form für eine bestimmte Zeit ausblenden?

shmia 4. Okt 2007 12:28

Re: Aktion nach einer bestimmter Zeit durchführen
 
Zitat:

Zitat von taktaky
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Hide;// Form1 verstecken

Schon wieder dieser ganz böse Fehler!
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Hide;// Falsch !!!
  Hide;  // Richtig
  Self.Hide; // Auch richtig

brinkee 4. Okt 2007 12:33

Re: Aktion nach einer bestimmter Zeit durchführen
 
Na, probier es aus. Trial-and-Error ist ne feine Sache für Anfänger. Dein Programm kommt ja offensichtlich nicht nach, das Form verschwinden zu lassen, bevor Du einen Screenshot machst. Ob Sleep() funktioniert oder Delay() weiß ich nicht - versuch es. Jedenfalls:

Delphi-Quellcode:

procedure TForm1.Delay(ms: Longint); {ms = milliseconds}
var
  TimeOut: Longint;
begin
  TimeOut:= GetTickCount + ms;
  While GetTickCount < TimeOut do
  begin
    {... do something or do nothing}
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Self.Hide;
  Delay(1000); //oder so...
  //Was auch immer...
  Self.Show;
end;
LG, Markus

taktaky 4. Okt 2007 12:34

Re: Aktion nach einer bestimmter Zeit durchführen
 
Zitat:

Zitat von shmia
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Hide;// Falsch !!!
  Hide;  // Richtig
  Self.Hide; // Auch richtig

Aber es funktioniert bei mir mit Form1.Hide; !!!

Ich möchte das Form (das Programm) nicht ausblenden sondern für einer bestimmten Zeit ausblenden.

DeddyH 4. Okt 2007 12:36

Re: Aktion nach einer bestimmter Zeit durchführen
 
Zitat:

Zitat von taktaky
Ich möchte das Form (das Programm) nicht ausblenden sondern für einer bestimmten Zeit ausblenden.

:wiejetzt: :gruebel:

taktaky 4. Okt 2007 12:39

Re: Aktion nach einer bestimmter Zeit durchführen
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von taktaky
Ich möchte das Form (das Programm) nicht ausblenden sondern für einer bestimmten Zeit ausblenden.

:wiejetzt: :gruebel:

ich habe in Bereich uses "WINPROCS"
Trotzdem bekomme ich die Meldung "Undeclard delay" !!!

brinkee 4. Okt 2007 12:39

Re: Aktion nach einer bestimmter Zeit durchführen
 
Kollege: lies ein Tutorial. Damit es für eine bestimmte Zeit ausgeblendet ist, musst Du es ausblenden und dann wieder einblenden, nachdem Du deinen Screenshot gemacht hast. Damit dein Form dann auch wirklich weg ist, musst Du ein bisschen warten.

Delphi-Quellcode:
Form1.Hide;
Ist nicht besonders elegant. Klar, es funktioniert und deinem Compiler ist es scheiß-egal, ob da Form1. oder Self. steht - sollte man aber nicht machen...

LG, Markus

DeddyH 4. Okt 2007 12:48

Re: Aktion nach einer bestimmter Zeit durchführen
 
Wieso eigentlich "WinProcs". Hast Du neuerdings Delphi 1 am Start? Die beiden (D1-)Units WinProcs und WinTypes sind seit Delphi 2 unter Windows zusammengefasst. Außerdem weiß ich eh nicht, wieso Du glaubst, Du brauchst die in Deiner uses-Klausel.

Matze 4. Okt 2007 12:51

Re: Aktion nach einer bestimmter Zeit durchführen
 
Zitat:

Zitat von taktaky
ich habe in Bereich uses "WINPROCS"
Trotzdem bekomme ich die Meldung "Undeclard delay" !!!

Du wirst es doch wohl schaffen eine der indirekt verlinkten Delay-Funktionen 1:1 in deinen Code einzufügen. :?

dominikkv 4. Okt 2007 12:55

Re: Aktion nach einer bestimmter Zeit durchführen
 
takaky, Delay ist eine funktion aus der CodeLibrary, und wurde oben schon mal gepostet

Reinhardtinho 4. Okt 2007 13:08

Re: Aktion nach einer bestimmter Zeit durchführen
 
Reicht es nicht, wenn man ein Application.ProcessMessages einfügt? So hab ich das bisher immer gemacht oder ist das schon veraltet?

MFG
Lorenz

peschai 4. Okt 2007 13:15

Re: Aktion nach einer bestimmter Zeit durchführen
 
Hallo
wie wärs mit dem guten alten "Application.ProcessMessages;"
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Hide;// Form1 verstecken
Application.ProcessMessages;
// dann kommt der Code um den Bildschirm zu kopieren
...

Form1.Show; // Form1 wieder sichtbar machen
end;

peschai 4. Okt 2007 13:17

Re: Aktion nach einer bestimmter Zeit durchführen
 
Oh je sorry, ein dublette, habe die Antwort von meinem vorredner übersehen ...snüff... :oops:

Reinhardtinho 4. Okt 2007 13:23

Re: Aktion nach einer bestimmter Zeit durchführen
 
Zitat:

Zitat von peschai
Oh je sorry, ein dublette, habe die Antwort von meinem vorredner übersehen ...snüff... :oops:

:mrgreen: Damit weiß ich nun aber, dass es doch noch so funktioniert.

taktaky 4. Okt 2007 13:33

Re: Aktion nach einer bestimmter Zeit durchführen
 
Zitat:

Zitat von peschai
Hallo
wie wärs mit dem guten alten "Application.ProcessMessages;"
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Hide;// Form1 verstecken
Application.ProcessMessages;
// dann kommt der Code um den Bildschirm zu kopieren
...

Form1.Show; // Form1 wieder sichtbar machen
end;

Leider hilft nicht, da wir das Form1 mindestens eine oder zwei Sekunden ausblenden müssen, sonnst wird das Form1 beim Kopieren mansch mal erwischt.

Wie ich sehe, ich muss den Timer verwenden und fertig.

---

dominikkv 4. Okt 2007 13:37

Re: Aktion nach einer bestimmter Zeit durchführen
 
was spricht gegen delay?=

taktaky 4. Okt 2007 13:40

Re: Aktion nach einer bestimmter Zeit durchführen
 
Zitat:

Zitat von dominikkv
was spricht gegen delay?=

Weil ich vorher nie benutzt und ist mir einfach unklar

Matze 4. Okt 2007 13:43

Re: Aktion nach einer bestimmter Zeit durchführen
 
Füge die Funktion in dein Projekt ein (Copy&Paste) und rufe sie genauso auf wie Sleep. Ist das so schwer?!

Delphi-Quellcode:
Delay(500);
Edit: Anfängertutorials

dominikkv 4. Okt 2007 13:45

Re: Aktion nach einer bestimmter Zeit durchführen
 
oh mann...
Delphi-Quellcode:
procedure delay(msec:longint);
var
  start,stop:longint;
begin
  start := gettickcount;
  repeat
    stop := gettickcount;
    application.processmessages;
  until (stop - start ) >= msec;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Hide;         // Form1 verstecken
  Delay(2000);  // 2 sekunden warten
  DoScreenshot; // dann kommt der Code um den Bildschirm zu kopieren
  Show;         // Form1 wieder sichtbar machen
end;
alles schön vorgekaut wie taktaky das mag :!:

taktaky 4. Okt 2007 14:31

Re: Aktion nach einer bestimmter Zeit durchführen
 
Vielen Dank!
Du hast den Code für mich nicht nur vorgekaut sondern auch mit einem Glas Wasser :mrgreen:

---


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