Avatar billede hugopedersen Nybegynder
05. marts 2008 - 12:00 Der 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.
Avatar billede martinlind Nybegynder
05. marts 2008 - 12:06 #1
Du kan evt. sætte en timer på din forms onshow event, og så lægge koden i ontimer eventen, så kan du sætte timeren til 5 millsec.

formen onshow event bruger du til at sætte timeren on og slutter af med en repaint;
så burde du få din form tegnet. :)
Avatar billede hugopedersen Nybegynder
05. marts 2008 - 13:17 #2
OK - det lyder som en mulig løsning. Jeg prøver lige.

Gad vide hvorfor Eksperten har sagt at jeg har afsat 0 point?  Det har jeg da i hvert fald ikke mener jeg.
Avatar billede kroning Nybegynder
05. marts 2008 - 13:25 #3
Jeg bruger ofte OnActivate
Avatar billede hrc Mester
05. marts 2008 - 14:56 #4
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.
Avatar billede kroning Nybegynder
05. marts 2008 - 16:28 #5
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;
Avatar billede hrc Mester
06. marts 2008 - 08:04 #6
kroning: Det passer, æv. Jeg måtte lige teste det (både i D7 og D2007.

Rækkefølgen når en form åbnes er altså denne:

OnCreate
OnShow
OnActivate
Application.OnActivate
OnPaint

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.
Avatar billede hugopedersen Nybegynder
07. marts 2008 - 07:30 #7
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.
Avatar billede hugopedersen Nybegynder
07. marts 2008 - 07:30 #8
Næh det kunne man bare gøre.............
Avatar billede hrc Mester
07. marts 2008 - 08:25 #9
Jeg lægger også lige et svar selvom der er tvivl, om jeg har været til hjælp ...
Avatar billede kroning Nybegynder
07. marts 2008 - 14:20 #10
Fisk
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester