Det forstår jeg nu ikke. Jeg har ikke nogen problemer med at lukke med den viste kode. Eneste detalje er at jeg i FormCloseQuery sætter CanClose := ForcedDown Den metode har jeg brugte uden problemer i både 2009 og XE versionen af Delphi - jeg har dog ikke testet det i min nuværende XE3 (det burde jeg måske gøre)
I koden til TCustomForm.close udfører den application.terminate hvis mainform, så den ville jeg foretrække, hvis det er hele programmet der skal lukkes
1) Præcision: Hvis jeg kalder en DLL fil og i DLL filen's onshow laver en "CLOSE;" så vil DLL filen IKKE lukke ned.
2) Application.Terminate kan jeg ikke bruge da den lukker hele applicationen ned og jeg kun ønsker at formen skal lukkes
3) Release; virker ikke - formen lukker godt nok men der opstår en eller anden fejl - jeg kan ikke få adgang til hovedformen hvorfra DLL filen blev kaldt
4) SendMessage(formHandle,WM_Close); kan jeg ikke få til at virke - der sker ingenting
Hej, under normale omstændigheder burde release eller close kunne bruges. Forstår godt det ikke virker her, men vil alligevel lige afslutte min egen kommentar med, at i koden til release afsendes en meddelelse, og dermed meget tæt på martinlinds bud, hvilken jeg nok også ville foretrække (i situationer hvor WM_CLOSE virker...)
Jeg har ikke flere bud på dette, andet end at generelt set er det nok bedre hvis formen slet ikke bliver oprettet, og så at flytte koden helt ud af onshow. Det kan gøres på flere måder, eksempelvis ved at oprette en funktion til at oprette formen med, eller lave en nedarvet klasse.
procedure createMyForm(...); begin if not shouldCreate then exit; //create form here. end;
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.