13. april 2000 - 14:44Der 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?
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.
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.
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).
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.
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...
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.