Avatar billede fun22 Nybegynder
17. januar 2004 - 12:43 Der er 6 kommentarer og
1 løsning

Access Violation

Hej

Når jeg starter mit program, får jeg en access violaiton ti følgende linie, i project source koden:

  Application.CreateForm(TForm4, Form4);

Og det fatter jeg ikke... Hvad kan der være galt?
Avatar billede fun22 Nybegynder
18. januar 2004 - 11:54 #1
ingen der kan hjælpe?
Avatar billede doc404 Novice
18. januar 2004 - 22:10 #2
Fejlen sker sandsynligvis inde i CreateForm. Hvad laver du i OnCreate i formen? Eller benytter du en komponent, der måske fejler?
Avatar billede hrc Mester
19. januar 2004 - 13:01 #3
Er du kommet videre? Prøv evt. at dumpe lidt sourcekode som vi kan grine lidt af ;-)
Avatar billede fun22 Nybegynder
19. januar 2004 - 16:55 #4
Her er min oncreate:

var
  fn : string;
  IniFile: TInifile;
  i: integer;
begin
  fn := extractFilePath(ParamStr(0))+'folders.dat';
  if FileExists(fn) then
    with TFileStream.Create(fn, fmOpenRead) do
      try
        ReadComponent(lvinbox);
        ReadComponent(lvoutbox);
      finally
        Free;
      end; // try
TBXSetTheme('Office11Adaptive');
if FlatTabControl1.ActiveTab = 0 then begin
lvInbox.Visible := true;
lvOutbox.Visible := false
end
else begin
lvInbox.Visible := false;
lvOutbox.Visible := true;
end;
  st := TStringList.Create;
  IniFile := TInifile.create(ExtractFilePath(Application.ExeName) + 'settings.ini');
  try
    IniFile.ReadSectionValues('Contacts', st);
  finally
    IniFile.Free;
  end;
  for i := 0 to st.Count - 1 do
    ListBox1.Items.Add(st.names[i]);
Avatar billede hrc Mester
19. januar 2004 - 17:58 #5
Det ligner jo noget af min kode...

Har rettet lidt i det. Der var ikke det store galt udover at du glemte at frigive st (som er et DeFacto navn for en streng, ikke en liste af strenge).

var
  fn : string;
begin
  fn := extractFilePath(ParamStr(0))+'folders.dat';
  if FileExists(fn) then
    with TFileStream.Create(fn, fmOpenRead) do
      try
        ReadComponent(lvinbox);
        ReadComponent(lvoutbox);
      finally
        Free;
      end; // try
     
  TBXSetTheme('Office11Adaptive');
 
  lvInbox.Visible := FlatTabControl1.ActiveTab = 0;
  lvOutbox.Visible := not lvInbox.Visible;
 
  with TInifile.create(ExtractFilePath(Application.ExeName) + 'settings.ini') do
    try
      // Not sure whether you need to clear ListBox1 before you read items.
      ReadSectionValues('Contacts', ListBox1.Items);
    finally
      Free;
    end; // try

Mit gæt er, at du TBXSetTheme, sådan som T'et indikerer, er en klasse, ikke et allokeret objekt. Det er sikkert fejlen ligger.
Avatar billede hrc Mester
19. januar 2004 - 18:06 #6
Retter lige den afsluttende kommentar:

Mit gæt er at linien med TBXSetTheme(), sådan som T'et indikerer, er en klasse, ikke et allokeret objekt. Du er klar over forskellen, ikke? Det er sikkert der fejlen ligger.

P.S. mht. mine rettelser. Jeg er hyppig bruger af "with" og "try"'s, men det er et følsomt område for Delphi-programmører. Jeg sparer en masse tekst og kan ikke se at koden er mindre besværlig at læse. Modstandere vil påstå, at når man "with"'er så kan man ikke være helt sikker på hvilket objekt man bruger - og de har også ret; det kan ske at compileren vælger forkert, men det er som regel pga. dårlig programmering.

Andre nørdede ting er:

  Edit1.Visible = (i = 10);

Hvis det boolske udtryk er sandt bliver Edit1 synlig. Jeg synes dette noget mere elegant end:

  if (i = 10) then
    Edit1.Visible := true
  else
    Edit1.Visible := false;

Når jeg rigtig kammer over så bliver der skrevet kode som dette...:

  inc(lgd,integer(length(st) < 7));

Hvis strengen st er mindre end 7, så læg en til variablen lgd. Det er så grimt at det næsten er C'sk. ;-)
Avatar billede fun22 Nybegynder
15. februar 2004 - 16:38 #7
jeg begynde forfra, og så forsvandt problemet... ved ikke lige hvad det var...
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