05. marts 2008 - 12:00Der er
8 kommentarer og 2 løsninger
Rækkefølge af events
Jeg har et program som jeg kan kalde med nogle parametre på og hvis det sker, så udfører programmet nogle ting og afslutter. Det er sådan set fint nok, men programmet når aldrig at få tegnet sin eneste formular op før det afslutter igen. Hvilken event bør jeg så bruge for at være sikker på at formularen er tegnet op før der sker andet.
OnCreate kaldes kun én gang, når formen oprettes. Det komplementære event hedder OnDestroy. Jeg bruger tit disse to, til hhv. at oprette og fjerne objekter.
OnShow kaldes når formens visible sættes true (sjældent mere en én gang). Heri kan man sætte fokus på komponenter (dette vil fejle i OnCreate).
OnActivate sker hver gang formen, efter fokus er mistet, får det igen. Eksempelvis hvis man <alt-tab> væk fra programmet og <alt-tab> tilbage igen. Jeg bruger næsten aldrig OnActivate da der sjældent er brug for at opdatere et eller andet når brugeren vender tilbage.
Formens OnActivate bliver kun kaldt een gang hvis man kun har den ene form i sit program. Application.OnActivate bliver kaldt hver gang der vendes tilbage til programmet.
Hvis det er noget jeg kun har behov for at udføre een gang plejer jeg at skrive dette i OnActivate som det første: ...OnActivate:=nil;
Hvis man sætter formens Visible til false og tilbage igen er rækkefølgen denne:
OnShow Application.OnActivate OnPaint
Åbner og lukker man en subform sker der kun:
OnPaint.
Skift til anden applikation og tilbage igen resulterer i dette mønster:
Application.OnActivate OnPaint
Faktisk bliver TForm.OnShow kaldt hyppigere end TForm.OnActivate. Der blev jeg klogere. Heldigvis har det ikke haft betydning for mine programmer (de virker ikke i forvejen), da OnCreate og OnDestroy sker som forventet.
Nu ville jeg jo gerne dele lidt point ud for de gode indlæg, men uvist af hvilken grund er der blevet afsat 0 point til dette spørgsmål. Kan i ikke prøve at lægge et svar så jeg kan se om jeg kan komme til at ændre det - der er vist noget med at det kun kan ændres når der er svaret på spørgsmålet.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.