Formulieren maken, gebruiken en sluiten in Delphi

In Delphi heeft elk project ten minste één venster - het hoofdvenster van het programma. Alle vensters van een Delphi-toepassing zijn gebaseerd op het TForm-object.

Het formulier

Formulierobjecten zijn de basisbouwstenen van een Delphi-toepassing, de daadwerkelijke vensters waarmee een gebruiker samenwerkt wanneer deze de toepassing uitvoert. Formulieren hebben hun eigen eigenschappen, gebeurtenissen en methoden waarmee u hun uiterlijk en gedrag kunt bepalen. Een formulier is eigenlijk een Delphi-component, maar in tegenstelling tot andere componenten verschijnt een formulier niet in het componentenpalet.

Normaal gesproken maken we een formulierobject door een nieuwe toepassing te starten (Bestand | Nieuwe toepassing). Dit nieuw gemaakte formulier is standaard het hoofdformulier van de toepassing - het eerste formulier dat tijdens runtime wordt gemaakt.

Opmerking: Selecteer Bestand | Nieuw formulier om een ​​extra formulier aan het Delphi-project toe te voegen.

Geboorte

OnCreate
De OnCreate-gebeurtenis wordt geactiveerd wanneer een TForm voor het eerst wordt gemaakt, dat wil zeggen slechts één keer. De verklaring die verantwoordelijk is voor het maken van het formulier staat in de bron van het project (als het formulier is ingesteld om automatisch door het project te worden gemaakt). Wanneer een formulier wordt gemaakt en de eigenschap Visible waar is, vinden de volgende gebeurtenissen plaats in de aangegeven volgorde: OnCreate, OnShow, OnActivate, OnPaint.

U moet de OnCreate-gebeurtenishandler gebruiken om bijvoorbeeld initialisatiekarweien te doen, zoals het toewijzen van stringlijsten.

Alle objecten gemaakt in de OnCreate-gebeurtenis moeten worden vrijgegeven door de OnDestroy-gebeurtenis.

 OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint… 

OnShow
Deze gebeurtenis geeft aan dat het formulier wordt weergegeven. OnShow wordt aangeroepen net voordat een formulier zichtbaar wordt. Naast hoofdvormen vindt deze gebeurtenis plaats wanneer we de eigenschap Visible van formulieren instellen op True of de methode Show of ShowModal aanroepen.

OnActivate
Deze gebeurtenis wordt genoemd wanneer het programma het formulier activeert, dat wil zeggen wanneer het formulier de invoerfocus krijgt. Gebruik deze gebeurtenis om te wijzigen welke controle daadwerkelijk de focus krijgt als deze niet de gewenste is.

OnPaint, OnResize
Gebeurtenissen zoals OnPaint en OnResize worden altijd genoemd nadat het formulier oorspronkelijk is gemaakt, maar worden ook herhaaldelijk genoemd. OnPaint treedt op voordat besturingselementen op het formulier worden geverfd (gebruik het voor speciaal schilderen op het formulier).

Leven

De geboorte van een vorm is niet zo interessant als zijn leven en dood kan zijn. Wanneer uw formulier is gemaakt en alle besturingselementen wachten op afhandeling van gebeurtenissen, blijft het programma actief totdat iemand het formulier probeert te sluiten!

Dood

Een gebeurtenisgestuurde toepassing stopt met werken wanneer alle formulieren zijn gesloten en er geen code wordt uitgevoerd. Als er nog een verborgen formulier bestaat wanneer het laatste zichtbare formulier wordt gesloten, lijkt uw toepassing te zijn beëindigd (omdat er geen formulieren zichtbaar zijn), maar blijft deze actief totdat alle verborgen formulieren zijn gesloten. Denk maar aan een situatie waarin de hoofdvorm vroeg wordt verborgen en alle andere vormen worden gesloten.

… OnCloseQuery -> OnClose -> OnDeactivate -> OnHide -> OnDestroy 

OnCloseQuery
Wanneer we proberen het formulier te sluiten met de methode Sluiten of op een andere manier (Alt + F4), wordt de gebeurtenis OnCloseQuery aangeroepen. Zo is de gebeurtenishandler voor deze gebeurtenis de plek om het sluiten van een formulier te onderscheppen en te voorkomen. We gebruiken de OnCloseQuery om de gebruikers te vragen of ze zeker weten dat ze het formulier echt willen sluiten.

 procedure TForm1.FormCloseQuery (Sender: TObject; var CanClose: Boolean);

beginnen

   als MessageDlg ('Dit venster echt sluiten?', MtConfirmation, [mbOk, mbCancel], 0) = mrCancel vervolgens CanClose: = False;

einde; 

Een OnCloseQuery-gebeurtenishandler bevat een CanClose-variabele die bepaalt of een formulier mag worden gesloten. De gebeurtenishandler OnCloseQuery kan de waarde van CloseQuery op False instellen (via de parameter CanClose), waardoor de methode Close wordt afgebroken.

OnClose
Als OnCloseQuery aangeeft dat het formulier moet worden gesloten, wordt de OnClose-gebeurtenis aangeroepen.

Het OnClose-evenement geeft ons een laatste kans om te voorkomen dat het formulier wordt gesloten. De OnClose-gebeurtenishandler heeft een Action-parameter, met de volgende vier mogelijke waarden:

  • Canone. Het formulier mag niet worden gesloten. Net alsof we de CanClose op False hebben ingesteld in de OnCloseQuery.
  • cahide. In plaats van het formulier te sluiten, verbergt u het.
  • caFree. Het formulier is gesloten, dus het toegewezen geheugen wordt vrijgegeven door Delphi.
  • caMinimize. De vorm is geminimaliseerd in plaats van gesloten. Dit is de standaardactie voor MDI-onderliggende formulieren. Wanneer een gebruiker Windows afsluit, wordt de gebeurtenis OnCloseQuery geactiveerd, niet de OnClose. Als u wilt voorkomen dat Windows wordt afgesloten, plaatst u uw code in de OnCloseQuery-gebeurtenishandler, natuurlijk CanClose = False doet dit niet.

OnDestroy
Nadat de OnClose-methode is verwerkt en het formulier moet worden gesloten, wordt de OnDestroy-gebeurtenis aangeroepen. Gebruik deze gebeurtenis voor bewerkingen die tegengesteld zijn aan die in de OnCreate-gebeurtenis. OnDestroy wordt gebruikt om aan de vorm gerelateerde objecten te dealloceren en het bijbehorende geheugen vrij te maken.

Wanneer het hoofdformulier voor een project wordt gesloten, wordt de toepassing beëindigd.