Avatar billede delphidaner Nybegynder
13. april 2000 - 14:44 Der er 9 kommentarer og
1 løsning

MDI applikationer

Jeg er ved at lave en MDI-applikation, hvor jeg har en procedure, som opdaterer nogle menupunkter i en hovedmenu (enabler og disabler, alt efter om der er MDI-childs åbne i hovedvinduet).

Når jeg lukker en MDI-child skal proceduren jo køres, så menupunkterne bliver deaktiveret, hvis det er den sidste child. MEN....

Hvor(når) starter jeg proceduren?

Det kan man ikke i MDI-child'ets OnClose eller OnDestroy, fordi vinduet stadig eksisterer.

Er der en event, man kan kalde proceduren i, eller skal man gøre noget andet?
Avatar billede sjensen Nybegynder
13. april 2000 - 15:14 #1
i MDI mainform kan du bruge Application.onidle eventen til at udføre opgaver når programmet ikke laver andet.

Lav en procedure der checker antallet af aktive childs og når tallet er nul sætter den menupunkterne inaktive.

Aktiver denne procedure ved at angive navnet som navnet på omidle proceduren:

i form create:  (main form)

application.onidle := din_procedure.

Det bør virke
Avatar billede delphidaner Nybegynder
14. april 2000 - 07:46 #2
Jo, det virker helt sikkert. Men vil det ikke tære voldsomt på ressourcerne, hvis den checker hver eneste gang programmet ikke laver noget? Det er jo mange tusinde gange i sekundet, OnIdle bliver kaldt.
Avatar billede lrj Nybegynder
14. april 2000 - 16:23 #3
Kunne jo evt. også laves (ikke kønt, men nok mindre belastende) med en TTimer...

Men jeg tror slet ikke det er her løsningen er. Det er jo nok nærmere at der er en der sætter sig ned og undersøger hvordan MDI strukturen er strikket sammen. Der følger udførlige eksempler med Delphi - især den MDI teksteditor de har lavet er fed at undersøge lidt. Den kan findes i /demos.
Avatar billede pellelil Nybegynder
24. april 2000 - 09:12 #4
Når du "opretter en ny MDI" (ofte når du vælger et bestent punkt i din menu, så incrementer du en tæller. Hver MDI form's close lader du decremente sammetæller. Når denne tæller rammer nul så har du ikke flere MDI forms og du kan disable/enable dine menuer.

Gør det nemt for dig selv: Din hovedform giver du 2 nye metoder (der styre det hele). Den ene kalder du hvergang du creater en MDI-form (fra de menu punkter der opretter MDI-forms) og den anden kalder du når du disposer en MDI-form (fra MDI-formens close).
Avatar billede lrj Nybegynder
24. april 2000 - 18:02 #5
Det var nok noget smartere, pellelil :)

Tror ikke mit hovede kører med topfart for øjeblikket :=)
Avatar billede delphidaner Nybegynder
25. april 2000 - 07:41 #6
Undskyld jeg var længe om at svare, men jeg har været på ferie. Jeg har prøvet sjensens bud med at lave en OnIdle event, og jeg kan ikke mærke/måle nogen ressourcetab eller nedsættelse af hastigheden, så Pellelil's løsning fungerer også, men den er der mere arbejde ved at lave, så sjensen for pointene.
Avatar billede lrj Nybegynder
25. april 2000 - 18:36 #7
pellelil's foreslag er helt klart "pænest" - du er sikker på at det virker, og er ikke ude i at lave noget skummelt "måske"-programmering. Tag altid den sikre løsning...
Avatar billede pellelil Nybegynder
25. april 2000 - 19:59 #8
>Lrj, takker for din opbakning (og kan kun give dig ret), men det er nu ikke point'ene der "driver værket".
Avatar billede lrj Nybegynder
26. april 2000 - 10:44 #9
pellelil> Burde det heller ikke være - magen til pseudo økonomi skal man lede længe efter :)
Avatar billede pellelil Nybegynder
26. april 2000 - 10:45 #10
>Lrj, LOL
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