Avatar billede jackass- Nybegynder
13. september 2007 - 10:14 Der er 9 kommentarer og
1 løsning

Show/hide ekstra form

Hej,

Jeg har en applikation som udelukkende vises med TTrayIcon som har en TPopupMenu hvor man bl.a. kan vælge "Indstillinger" i menuen som åbner formSettings. Mainformen er:

Application.ShowMainForm := False;

formSettings åbnes med:

procedure TForm1.popIndstillingerClick(Sender: TObject);
begin
  if not Assigned( FormSettings ) then FormSettings := TFormSettings.Create(nil);
  FormSettings.Show;
end;

Og når den lukkes:

procedure TFormSettings.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= caFree;
end;


Det går alt sammen fint første gang jeg åbner og lukker formen, men 2. gang jeg åbner formen får jeg en exception access violation fejl.

Er der nogen der kan hjælpe med en løsning? Alternativt kan jeg smide et helt call stack output fra madExcept hvis det er nødvendigt. Men jeg antager, at det er noget med det caFree og Create(nil) halløj.

På forhånd tak

/jack
Avatar billede martinlind Nybegynder
13. september 2007 - 10:24 #1
Det er sikkert fordi din FormSettings var ikke er "ordenligt nil" for det gør .Free nemlig ikke :( og så kan "Assigned( FormSettings )" ikke finde ud af det.

men hvorfor spørger du om den er assigned, du laver jo en free hvergang du lukker, så du kan jo bare antage at den skal creates hvergang
Avatar billede jackass- Nybegynder
13. september 2007 - 10:28 #2
Heh.. det ved jeg ikke.. Det var der et eller andet (måske ikke alligevel) klogt hovede der sagde jeg skulle :D

Jeg prøver lige uden at kontrollere om den er assigned..
Avatar billede jackass- Nybegynder
13. september 2007 - 10:32 #3
Super.. det virker vist. Har et issue mere, men må jo hellere lige oprette et nyt spørgsmål til det
Avatar billede jackass- Nybegynder
13. september 2007 - 10:32 #4
Smider du et svar på denne, så du kan få dine points? :)
Avatar billede hrc Mester
13. september 2007 - 12:03 #5
Jeg plejer at bruge denne konstruktion:

var
  FormSettings : TFormSettings; // Den globale instansvariabel Delphi selv laver

procedure TFormSettings.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TFormSettings.FormDestroy(Sender: TObject);
begin
  FormSettings := nil; // Fjerner referencen lige inden den dør
end;
Avatar billede jackass- Nybegynder
13. september 2007 - 13:20 #6
Super, det virker :) Smid svar
Avatar billede hrc Mester
13. september 2007 - 15:08 #7
Osse' mig?
Avatar billede jackass- Nybegynder
13. september 2007 - 18:04 #8
I kan jo dele hvis martinlind også lige svarer :)
Avatar billede martinlind Nybegynder
13. september 2007 - 21:39 #9
Jep :)
Avatar billede martinlind Nybegynder
13. september 2007 - 21:40 #10
med hrc's løsning, skulle din første kode med assigned-check virke :) ( og være pænere )
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