Results 1 to 6 of 6

Thread: Volgorde events

  1. #1

    Volgorde events

    Hey hallo,

    Ik heb een applicatie met een main en een aantal childs.
    Nadat ik een child heb aangemaakt wil ik een aantal variabelen vullen voordat de onshow wordt geactiveerd. Maar dat lukt me niet. Onderstaande code gebruik ik om het form te creëren en vervolgens de variabelen te vullen. Echter direct na de create volgt het onshow event. Hierdoor zijn de variabelen nog niet gevuld. Wat kan ik hier aan doen?

    Code:
      rsChild := TPDMedewerkerInfoForm.Create(self);  CronusAdvToolBar.AddMDIChildMenu(rsChild);
      rsChild.OnClose := ChildFormClose;
      Inc(FChildCount);
      rsChild.MedewerkerRelnr := MWRelnr;
      rsChild.MedewerkerNaam := MWnaam;
      rsChild.MedewerkerNummer := MWnummer;
      rsChild.MedewerkerVervallen := MWvervallen;
      rsChild.MedewerkerDossier := MWDossier;
      rsChild.Show;

  2. #2
    Quote Originally Posted by Pascal G++ View Post
    Echter direct na de create volgt het onshow event.
    Dat zou niet correct zijn.

    De enige reden waarom direct na de Create() de OnShow volgt lijkt mij dat je iets doet in Create() die de Show triggered.

  3. #3
    Ik heb gelezen dat een MDI child per definitie visible is en dat het onshow event daarom altijd gelijk met het on create event wordt aangeroepen en dat hier dus geen explicite actie voor nodig is. Maar hoe zou ik dit kunnen oplossen. Op het MDI Child staan een aantal query die geopend moeten waarin parameters ingevuld worden. Deze parameters zijn pas bekend als het document wordt gecreëerd.

  4. #4
    Triggert deze geen Show: CronusAdvToolBar.AddMDIChildMenu(rsChild); Was maar een idee.

  5. #5
    Oeps, het feit dat het hier om een MDI Child was mij even ontgaan.
    Dan zou het inderdaad kunnen dat Show reeds eerder uitgevoerd wordt.

    De oplossing die je zou kunnen maken is de FormCreate te overschrijven zodat je alle parameters mee kunt geven.

    Delphi Code:
    1. type
    2.   TPDMedewerkerInfoForm = class(TForm)
    3.     FMedewerker: MedewerkerRecord;
    4.   public
    5.     constructor Create(AOwner: TComponent; const Medewerker: MedewerkerRecord); reintroduce; overload;
    6.     property Medewerker: MedewerkerRecord read FMedewerker write FMedewerker;
    7.   end;
    8.  
    9. constructor TPDMedewerkerInfoForm.Create(AOwner: TComponent; const AMedewerker: MedewerkerRecord);
    10. begin
    11.   inherited Create(AOwner);
    12.   Medewerker := AMedewerker;
    13. end;
    Waarbij je in je MedewerkerRecord al die velden zet. Is wel zo makkelijk in plaats van al die velden apart meegeven.

    Dan kun je daarna:
    Delphi Code:
    1. var
    2.   Mederwerker: MedewerkerRecord;
    3. begin
    4.   Medewerker.Relnr := MWRelnr;
    5.   Medewerker.Naam := MWnaam;
    6.   Medewerker.Nummer := MWnummer;
    7.   Medewerker.Vervallen := MWvervallen;
    8.   Medewerker.Dossier := MWDossier;
    9.   rsChild := TPDMedewerkerInfoForm.Create(Self, Medewerker);
    10.   CronusAdvToolBar.AddMDIChildMenu(rsChild);
    11.   rsChild.OnClose := ChildFormClose;
    12.   Inc(FChildCount);
    13. end;

  6. #6
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Quote Originally Posted by rvk View Post
    De oplossing die je zou kunnen maken is de FormCreate te overschrijven zodat je alle parameters mee kunt geven.
    Dit is sowieso, is mijn persoonlijke overtuiging, doorgaans de enige correcte en schone manier.

    Je wilt een eigenaar (in dit geval je mainform) niet verantwoordelijk maken voor het initialiseren
    van initiële waarden van een instance (in dit geval je child) als dat niet hoeft.

    Meestal heb ik een "Normale" constructor met de standaard parameter(s), zoals AOwner bij
    een afgeleide van TComponent, welke alle properties op de standaard beginwaarden zet, en
    een overloaded versie waarbij je de belangrijkste properties als parameter kan meegeven.

    Delphi Code:
    1. type
    2.   TPDMedewerkerInfoForm = class(TForm)
    3.   ...
    4.   public
    5.     constructor Create(AOwner: TComponent); overload;
    6.     constructor Create(AOwner: TComponent; const AMedewerker: TMedewerkerRecord); overload;
    7.   end;
    TMemoryLeak.Create(Nil);

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •