[Delphi] Formulier automatisch sluiten.

Pagina: 1
Acties:

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 10:43
Met behulp van een programma moeten een aantal bestanden worden gecontroleerd. Dit programma wordt elke nacht in een batch gedraaid en moet na een x-aantal seconden worden afgesloten. Het programma bestaat uit slechts 1 formulier. Om het programma te sluiten heb ik de volgende code gebruikt.

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
var
   intAantalseconden: integer;
begin
   intAantalseconden := 5;
   while (intAantalseconden >= 1) do
   begin
      intAantalseconden := intAantalseconden -1;
      lblResterendetijd.Caption := 'Dit programma wordt binnen ' + IntToStr(intAantalseconden) + ' seconden afgesloten.';
      progressbar1.StepBy(5);
      Sleep(1000);
   end;
   frmEditBlackboardfiles.Close;
end;


Ik weet alleen niet bij welk event ik deze code het beste kan plaatsen. Ik heb deze code geplaatst bij de volgende events van het formulier:
- OnPaint
- OnShow
- OnCreate

Wanneer ik deze code echter in de bovengenoemde events stop, wordt het formulier nooit zichtbaar. Het formulier blijft 20 seconden op de achtergrond draaien (nl. 20 keer een commando Sleep()) en sluit daarna automatisch. Ik wil dat het formulier echter de volle tijd voor de gebruiker zichtbaar is en daarna wordt gesloten. Hoe kan ik dit het beste oplossen?

BTW. Ik draai het programmaatje op een P4 1,8 Ghz. Dit heeft dus weinig tot niets met de systeemeisen van de computer te maken.

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Gebruik een TTimer.

edit:
Zo'n korte reply, en dan nog mis typen...

[ Voor 63% gewijzigd door Varienaja op 26-05-2003 12:01 ]

Siditamentis astuentis pactum.


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

idd... zet een timer op een interval van 10, zet enabled in de handler direct op false en voer vervolgens jouw code uit.

Overigens zou ik liever zien dat je een timer gebruikt met een interval van 1 seconde om te tellen, omdat jij nu alles laat Sleepen, waardoor ook het werken in andere software (bijna) onmogelijk wordt. Ook al wordt dit 's nachts gedraaid: eigenlijk zou je jezelf aan moeten leren om het altijd netjes te doen ;)

My personal website


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 10:43
Bedankt voor de snelle reacties. Omdat ik me al een tijdje bezig houdt met ASP en ASP.NET is de kennis van Delphi tegenwoordig ver onder de maat. :)

De oplossing ligt inderdaad bij het gebruik van de TTimer. Door het declareren vane en globale variabele intAantalseconden kan ik de sleep-functie uit de code verwijderen. Iedere keer dat ik in de TTimer-procedure kom verhoog ik intAantalseconden met 1. Wanneer intAantalseconden een bepaalde waarde heeft, kan ik het formulier automatisch sluiten.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Overigens zou ik liever zien dat je een timer gebruikt met een interval van 1 seconde om te tellen, omdat jij nu alles laat Sleepen, waardoor ook het werken in andere software (bijna) onmogelijk wordt.
Waar slaat dit op? :?

Professionele website nodig?


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Cur, jij weet toch ook dat, als in je code een sleep staat, dat je dan voor de periode van die Sleep helemaal niks kunt doen (in de software die slaapt)? En het is natuurlijk sjieker als je de gebruiker in de gelegenheid stelt om ook in de tussentijd dat jij aan het tellen bent gewoon normaal door te werken, en dat alle screenrefreshes enzo netjes doorgaan...

Als je een App laat slapen, en je minimaliseert het volgende scherm dat je hebt, blijft voor de duur van de sleep de vorm van het formulier gevuld met het andere scherm, maar dan alleen weer op plaatsen waar de schermen overlapten. Ugly stuff!

Vandaar dat ik het altijd een stuk netter vindt om Sleep zo min mogelijk te gebruiken, en dus alleen als het niet anders kan. In deze situatie vond ik een timer (stukken) netter.

[ Voor 1% gewijzigd door OZ-Gump op 26-05-2003 13:15 . Reden: kromme zin recht gebogen ]

My personal website


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

U zei eerst:
waardoor ook het werken in andere software (bijna) onmogelijk wordt.
U zei daarna:
dat je dan voor de periode van die Sleep helemaal niks kunt doen (in de software die slaapt)?
Laat de haakjes in de tweede zin weg en ik ben happy met dat de eerste zin onzin is ;)

Professionele website nodig?


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

OZ-Gump: hij had het ten eerste over het kunnen gebruiken van andere applicaties. Hij doelde er dus op dat Sleep nagenoeg geen CPU-tijd in beslag neemt (een TTimer overigen ook niet).

Daarbij is het best mogelijk, als je dat echt zou willen, om Sleep te gebruiken zonder dat tijdens de sleep je applicatie 'hangt'. Je moet gewoon zorgen dat ie niet binnen de VCL thread aangeroepen wordt.

日本!🎌


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

ok ok ok ..... you got me.
De opmerking in de eerste post was inderdaad iets te grof, maar maakt overdrijven de zaak uiteindelijk niet stukken duidelijker? ;) Natuurlijk kun je best gewoon in andere software verder werken als je een sleep gebruikt in jouw software...

Dus: JULLIE HADDEN GELIJK!

Maareh... ikke toch ook een beetje :D

My personal website


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

offtopic:
1-0 voor de grote mensen ;)

Professionele website nodig?

Pagina: 1