Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Formular für bestimmte Zeit deaktivieren (https://www.delphipraxis.net/162043-formular-fuer-bestimmte-zeit-deaktivieren.html)

Beck93 3. Aug 2011 09:49

Formular für bestimmte Zeit deaktivieren
 
Hi,

ich bin es schon wieder.

Ich stehe jetzt vor dem Problem, dass ich nach dem Drücken eines Buttons, über einen Timer einen Ordner beobachte ob eine bestimmte Datei reinkopiert wird. Ein Zweiter Timer soll nun 20 sekunden laufen und solange Dieser läuft darf das Formular nicht geschlossen werden oder ein Button gedrückt werden. Wenn nach den 20 Sekunden die Datei noch nicht gefunden wurde soll er das Formular wieder aktivieren und eine Fehlermeldung bringen.

Soweit die Beschreibung.

Nur wie Weiß ich wann die 20 Sekunden rum sind? Der Timer soll ja nur einmal laufen?

Ich bin für jede Hilfe Dankbar

Gruß

Beck93

stahli 3. Aug 2011 10:26

AW: Formular für bestimmte Zeit deaktivieren
 
Du kannst den Timer.Interlav auf 20000 stellen oder alternativ auf 1000 und jede Sekunde einen Zähler hochzählen. Bei 20 stellst Du den Timer dann aus.

MGC 3. Aug 2011 10:31

AW: Formular für bestimmte Zeit deaktivieren
 
Ich würde es genauso wie Stahli umsetzen und zusätzlich noch das CanClose des Forms auf false setzen, damit das Formular auch wirklich nicht während der Wartezeit geschlossen werden kann.

Beck93 3. Aug 2011 12:22

AW: Formular für bestimmte Zeit deaktivieren
 
Sorry wenn ich nochmal doof nachfragen muss aber so ganz habe ich es leider noch nicht verstanden.:oops:

Also in der Zeit der Timer mit den 20 Sekunden läuft muss ich ja ständig gucken ob eine neue Datei im Ordner ist und sobald Sie da ist soll er abbrechen. Wenn Sie nach 20 Sekunden nicht da ist soll er auch abbrechen mit Fehlermeldung.
In diesem Zusammenhang habe ich leider noch nicht ganz verstanden wie ich das Timer.Interval verwenden kann.

Ich wäre euch sehr Dankbar wenn Ihr vielleicht mal ein kleines Beispiel machen könntet.

Danke trotzdem schon einmal:thumb:

Gruß

Beck93

stahli 3. Aug 2011 12:38

AW: Formular für bestimmte Zeit deaktivieren
 
Ok, dann würde ich einfach die Zeit merken, wann das Formular eingeblendet werden soll:
Delphi-Quellcode:
DT := Now + (20 * OneSecond);
In Deinem Timer prüfst Du dann die Files und wenn
Delphi-Quellcode:
(DT <> 0) and (Now > DT)
ist, blendest Du Dein Formular ein und setzt DT wieder auf 0.

(Den Timerintervall auf 20 Sekunden zu setzen, ist dann wohl nicht zweckmäßig.)

MGC 3. Aug 2011 12:49

AW: Formular für bestimmte Zeit deaktivieren
 
Hallo,

ist eigentlich ganz einfach. Deinen Timer stellst Du auf 1000 ms ein (=1 Sec.). Nun durchläuft der Timer jede Sekunde die ihm übergebenen Aufgaben.

Zu den Aufgaben gehört:
1. Prüfen FileExists, falls ja, dann Timer deaktivieren
2. Eine Zählervariable, welche die Anzahl der Durchläufe zählt mit Inc um 1 erhöhen
3. Wenn die Zählervariable = 20, dann Timer deaktivieren und Fehlermeldung ausgeben

Nicht vergessen: Deine Anwendung wieder freigeben

MGC 3. Aug 2011 12:51

AW: Formular für bestimmte Zeit deaktivieren
 
Nimm Stahlis Vorschlag, der ist eleganter. :)

Beck93 3. Aug 2011 14:43

AW: Formular für bestimmte Zeit deaktivieren
 
Erst einmal vielen Dank für eure Antworten.

Ich habe den vorschlag von MGC umgesetzt da ich über eine Ini-Datei steuern will/muss wie lange es bis zur Fehlermelduung dauert und ich mir nicht vorstellen konnte wie ich das mit Stahlis Idee machen könnte.

Ich habe es jetzt so gelöst.

Delphi-Quellcode:
procedure TFormDatenAnfordern.TimeOutTimer(Sender: TObject);
Var
  DateinameQuelle: String;
  IniName: string;
  Zaehler: integer;
  Sek: string;
begin
 IniDatei := TIniFile.Create(ExtractFilePath(Application.ExeName) + IniName);
 Sek:= IniDatei.ReadString('Sonstiges','Sekunden','');
 DateinameQuelle:= IniDatei.ReadString('Pfade','DateinameQuelle','');


  if Zaehler <= StrToInt(Sek) then begin
   if FileExists(DateinameQuelle) then begin
     Timer1.Enabled:= true;
     FormDatenAnfordern.Enabled:= true;
     TimeOut.Enabled:= false;
   end;
  end else begin
    ShowMessage('Keine Antwort erhalten! Bitte versuchen Sie es erneut.');
    FormDatenAnfordern.Enabled:= true;
  end;

 Inc(Zaehler);
 
 FreeAndNil(IniDatei);
end;
So nur leider ist die Variable Zaehler bei jedem neuen durchlauf wieder Null und ich weiß nicht wie ich das so ändern könnte?

Wäre echt cool wenn Ihr mir nochmal weiter helfen könntet.

Gruß

Beck93

DeddyH 3. Aug 2011 14:46

AW: Formular für bestimmte Zeit deaktivieren
 
Da Zaehler eine lokale Variable ist, gilt sie nur innerhalb der Methode. Deklarier sie doch als privates Feld des Formulars, dann ist sie dort global erreichbar und gültig.

Beck93 3. Aug 2011 15:10

AW: Formular für bestimmte Zeit deaktivieren
 
Super jetzt funktioniert es auch:thumb: Vielen Dank an alle

Gruß

Beck93


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