Avatar billede hugopedersen Nybegynder
24. januar 2012 - 10:01 Der er 4 kommentarer og
1 løsning

Sikre mig at form er færdigoprettet

Jeg har et problem i et program der sandsynligvis skyldes at min main form ikke er helt klar før koden fortsætter.
Det der sker er at jeg når brugeren skal logge på altid sikrer mig at alle forms er lukket.
I den funktion spørger jeg på Application.MainForm.Name fordi den skal selvfølgelig ikke lukkes.
Og første gang jeg gør det fejler den med en AV

Jeg har sat en timer på der giver et par sekunders forsinkelse før logon. Men det gør inegn forskel.

Når programmet ellers er kørende, så kommer der ikke flere AV i den kode.

Den komplette funktion:
procedure FormsClose;
var
  i: integer;
  Form: TForm;
  FormName: string;
begin
  Application.ProcessMessages;
  try
    for i := Screen.FormCount - 1 downto 0 do
      begin
        Form := Screen.Forms[i];
        if (Form <> Application.MainForm) then
          begin
            FormName := Screen.Forms[i].Name;
            if  (FormName <> Application.MainForm.Name) and
                (FormName <> 'frmDBConn') and
                (FormName <> 'frmStyling') and
                (FormName <> 'frmLogon') and
                (FormName <> 'frmSplash') and
              then Screen.Forms[i].Close;
          end;
      end;
  except
      on E:exception do
      Logfile.Error('U_Utilities.FormsClose: ' + FormName + ' - ' + #13#10 + E.Message);
  end;
end;
Avatar billede Abemand123 Nybegynder
24. januar 2012 - 11:56 #1
bruger udelukket pga spam

Dette indlæg er blevet modereret af en CoAdmin

Avatar billede js_delphi Nybegynder
24. januar 2012 - 17:52 #2
>>Det der sker er at jeg når brugeren skal logge på altid sikrer >>mig at alle forms er lukket.

Hvornaar skal brugeren "logge sig paa"?
Er det i OnCreate for mainformen, hvor du creater en login-form eller hvordan?

Er det i denne linie at fejlen opstaar:
FormName := Screen.Forms[i].Name

eller i denne:
if  (FormName <> Application.MainForm.Name) and
Avatar billede hugopedersen Nybegynder
25. januar 2012 - 13:49 #3
Logon sker først efter udløb af en timer som jeg starter i FormShow som det allersidste punkt.

Jeg kan ikke sige helt præcist hvor fejlen opstår, men det må kunne findes ud af på en måde hvis jeg sætter nogle breakpoints.
Avatar billede hugopedersen Nybegynder
25. januar 2012 - 14:04 #4
Kan konstatere at det er linien if  (FormName <> Application.MainForm.Name) der skaber fejlen.

Det må vel være for at applications objectet ikke er helt klar når jeg spørger på det første gang.

De efterfølgende gange er det jo ikke noget problem.
Avatar billede hugopedersen Nybegynder
23. februar 2012 - 05:55 #5
Indtil videre har jeg været nødt til at ændre (FormName <> Application.MainForm.Name) til (FormName <> 'frmMain') og så håbe på at jeg altid husker at kalde applikationers main form for frmMain.
Så virker funktionen uden AV og det må jeg så arbejde videre med en gang når der bliver bedre tid - hvis det sker.
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