Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Exception der Klasse EAccessViolation aufgetreten! (https://www.delphipraxis.net/96836-exception-der-klasse-eaccessviolation-aufgetreten.html)

T.E. 31. Jul 2007 15:28


Exception der Klasse EAccessViolation aufgetreten!
 
Hallo

Beim Kompilieren eines meiner Projekte, tritt (mir unerklärlicher Weise) folgende Exception auf:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt BrainTrainer.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 0046120E in Modul 'BrainTrainer.exe'. Lesen von Adresse 000002F4'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

Ich weiß auch nicht was mit der Zugriffsverletzung gemeint ist... :wall:
Weiß jemand wo der Fehler liegt und eine Lösung?

Hier ist der Quellcode des Hauptformulars:
Delphi-Quellcode:
unit StartbildschirmUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, jpeg, ExtCtrls, LMDControl, LMDBaseControl,
  LMDBaseGraphicControl, LMDBaseLabel, LMDCustomLabel, LMDCustomLabelFill,
  LMDLabelFill, LMDCustomSimpleLabel, LMDSimpleLabel;

type
  TStartbildschirm = class(TForm)
    StartTimer: TTimer;
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    LMDSimpleLabel1: TLMDSimpleLabel;
    Memo1: TMemo;
    ProgressBar1: TProgressBar;
    Timer1: TTimer;
    LMDSimpleLabel2: TLMDSimpleLabel;
    LMDSimpleLabel3: TLMDSimpleLabel;
    LMDSimpleLabel4: TLMDSimpleLabel;
    Label3: TLabel;
    Label4: TLabel;
    Memo2: TMemo;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure StartTimerTimer(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Startbildschirm: TStartbildschirm;

implementation

uses Inifiles, BrainTrainerStartUnit, Registry, InfoUnit, BestenlisteUnit, AnfaengerUnit, MittelUnit, ProfiUnit, GenieUnit,EndeUnit,
  RegSchluesselEingabeUnit, CommCtrl, OptionsUnit;

{$R *.dfm}

procedure TStartbildschirm.StartTimerTimer(Sender: TObject);
begin
  Start.show;
  Startbildschirm.Visible := false;
  if Start.Visible = true then
  begin
    Startbildschirm.StartTimer.Enabled := false ;
  end;
end;


procedure TStartbildschirm.FormShow(Sender: TObject);
begin
  if FileExists('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\RegKey.txt') then
    begin
      Memo1.Lines.LoadFromFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\RegKey.txt');
    end;
end;

procedure TStartbildschirm.FormCreate(Sender: TObject);
var regist: TRegistry;
  i: integer;
  s: string;
  datum1, datum2, datum3: TDate;
  ini : TInifile;
begin
{
if FileExists('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\FVsRegKey.rep') then
  begin
    startbildschirm.Memo1.Lines.LoadFromFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\FVsRegKey.rep');
    Startbildschirm.LMDSimpleLabel1.visible := false;
    Startbildschirm.LMDSimpleLabel2.Visible := false;
    Startbildschirm.LMDSimpleLabel3.Visible := false;
    Startbildschirm.LMDSimpleLabel4.Visible := false;
  end;
 }
  regist:=TRegistry.Create;
  try
    regist.RootKey:=HKEY_LOCAL_MACHINE; //voreingestellt ist HKEY_CURRENT_USER
    regist.OpenKey('SOFTWARE\E.T.-IT Software Corporation\BrainTrainer\2.0',true);
    regist.WriteString('Product', 'BrainTrainer');
    regist.WriteString('Version', '2.0');
    regist.WriteString('Seriennummer', 'PTIN-ZVUW-MKOH-XZ5D');
     if LMDSimpleLabel1.Visible = true then
      begin
        regist.WriteString('', 'Unregistriert');
      end else
      begin
        regist.WriteString('', 'Registriert');
      end;

  finally
    regist.Free;
end;

 if FileExists('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\language.ini') then
    try
    Ini:=TIniFile.Create('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\language.ini');
    label7.Caption:=Ini.ReadString('favoritelanguage','language','Wert');

    finally
    Ini.Free;
  end;

startbildschirm.label5.Caption := datetostr(now);
if fileexists('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\regdate.rep') then
begin
startbildschirm.memo2.Lines.LoadFromFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\regdate.rep');
startbildschirm.label4.Caption := startbildschirm.memo2.Text;
datum1:=StrToDate(label4.Caption);
  datum2:=now;
{ datum3:=label3.caption;}

  //Differenz zwischen datum1 und datum2 in Tagen
  datum3:=datum2-datum1;

label3.Caption := datetostr(datum3);
SendMessage(Startbildschirm.ProgressBar1.Handle, PBM_SETBARCOLOR, 0,cllime);
if FileExists('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Config.reg') then
  begin
    Options.visible:=false;
  end else
    Options.visible:=true;
  end;
end;

procedure TStartbildschirm.Timer1Timer(Sender: TObject);
begin
  ProgressBar1.StepIt;
end;
end.
Hier habe ich dann noch mal den Quelcode der Projektdatei:

Delphi-Quellcode:
program BrainTrainer;

uses
  Forms,
  StartbildschirmUnit in 'StartbildschirmUnit.pas' {Startbildschirm},
  BrainTrainerStartUnit in 'BrainTrainerStartUnit.pas' {Start},
  BestenlisteUnit in 'BestenlisteUnit.pas' {Bestenliste},
  InfoUnit in 'InfoUnit.pas' {Info},
  AnfaengerUnit in 'AnfaengerUnit.pas' {Anfaenger},
  MittelUnit in 'MittelUnit.pas' {Mittel},
  ProfiUnit in 'ProfiUnit.pas' {Profi},
  GenieUnit in 'GenieUnit.pas' {Genie},
  EndeUnit in 'EndeUnit.pas' {Ende},
  KontaktUnit in 'KontaktUnit.pas' {Kontakt},
  HinweisUnit in 'HinweisUnit.pas' {Hinweis},
  RegSchluesselEingabeUnit in 'RegSchluesselEingabeUnit.pas' {RegistrierungsschluesselEingeben},
  RegKeyUnit in 'RegKeyUnit.pas' {RegKey},
  PCRECHNERUnit in 'PCRECHNERUnit.pas' {PCRECHNER},
  NeuerUser in 'NeuerUser.pas' {NeuerBenutzer},
  PCRECHNERFortgeschritten in 'PCRECHNERFortgeschritten.pas' {PCRFortgeschritten},
  PCRECHNERGenie in 'PCRECHNERGenie.pas' {PCRGEnie},
  PCRECHNERProfi in 'PCRECHNERProfi.pas' {PCRProfi},
  OptionsUnit in 'OptionsUnit.pas' {Options};

{$R *.res}

begin
 Application.Initialize;
  Application.Title := 'BrainTrainer';
  Application.HelpFile := 'C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\HILFE.HLP';
  Application.CreateForm(TStartbildschirm, Startbildschirm);
 
  Application.CreateForm(TStart, Start);

  Application.CreateForm(TInfo, Info);
  Application.CreateForm(TAnfaenger, Anfaenger);
  Application.CreateForm(TMittel, Mittel);
  Application.CreateForm(TProfi, Profi);
  Application.CreateForm(TGenie, Genie);
  Application.CreateForm(TBestenliste, Bestenliste);
  Application.CreateForm(TEnde, Ende);
  Application.CreateForm(TKontakt, Kontakt);
  Application.CreateForm(THinweis, Hinweis);
  Application.CreateForm(TRegistrierungsschluesselEingeben, RegistrierungsschluesselEingeben);
  Application.CreateForm(TRegKey, RegKey);
  Application.CreateForm(TPCRECHNER, PCRECHNER);
  Application.CreateForm(TNeuerBenutzer, NeuerBenutzer);
  Application.CreateForm(TPCRFortgeschritten, PCRFortgeschritten);
  Application.CreateForm(TPCRGEnie, PCRGEnie);
  Application.CreateForm(TPCRProfi, PCRProfi);
  Application.CreateForm(TOptions, Options);
  Application.Run;
end.
Da das 19 Formulare sind hab hier halt nur die zwei wichtigsten genommen!
PS: Nach der Exception war vor "Application.CreateForm(TStart, Start);" ein Pfeil (vllt. hilft das ja jemandem ...)

Tormentor32 31. Jul 2007 15:29

Re: Exception der Klasse EAccessViolation aufgetreten!
 
Bescheid! ;-)

Ohne Quelltext wird das wohl ziemlich schwer :stupid:

sirius 31. Jul 2007 15:55

Re: Exception der Klasse EAccessViolation aufgetreten!
 
Im FormCreate sind die Komponenten des Formulars noch nicht erzeugt.

SirThornberry 31. Jul 2007 16:19

Re: Exception der Klasse EAccessViolation aufgetreten!
 
Zitat:

Zitat von sirius
Im FormCreate sind die Komponenten des Formulars noch nicht erzeugt.

Die Aussage ist falsch. Im OnCreate des Formulars sind die Komponenten sehr wohl schon erzeugt.

An den Fragesteller: In welcher Zeile bekommst du diese Zugriffsverletzung? Hast du schon mal Haltepunkte gesetzt und bist die Anweisungen einzeln durchgegangen?
Zu dem solltest du überprüfen ob OpenKey der TRegistry-Klasse erfolgreich war.

jfheins 31. Jul 2007 16:23

Re: Exception der Klasse EAccessViolation aufgetreten!
 
Zitat:

PS: Nach der Exception war vor "Application.CreateForm(TStart, Start);" ein Pfeil (vllt. hilft das ja jemandem ...)
Dann poste mal bitte den Quellcode des Formulars "Start", oder besser noch: Gehe per Einzelschritt durch den Startvorgang und poste die Zeilen, in denen der Fehler auftritt ;)

T.E. 31. Jul 2007 16:32

Re: Exception der Klasse EAccessViolation aufgetreten!
 
Zitat:

Zitat von SirThornberry
An den Fragesteller: In welcher Zeile bekommst du diese Zugriffsverletzung? Hast du schon mal Haltepunkte gesetzt und bist die Anweisungen einzeln durchgegangen?

Es ist die 5-te Zeile des Zweiten Quelltextes (nach dem begin gezälht)Ich habe die Zeile mal separiert!

T.E. 31. Jul 2007 16:36

Re: Exception der Klasse EAccessViolation aufgetreten!
 
Zitat:

Zitat von jfheins
Zitat:

PS: Nach der Exception war vor "Application.CreateForm(TStart, Start);" ein Pfeil (vllt. hilft das ja jemandem ...)
Dann poste mal bitte den Quellcode des Formulars "Start"

Delphi-Quellcode:
unit BrainTrainerStartUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls, jpeg, ExtCtrls, Buttons, LMDControl,
  LMDBaseControl, LMDBaseGraphicControl, LMDGraphicControl,
  LMDCustomGraphicLabel, LMDGraphicLabel, LMDCustomComponent, LMDTaskDlg,
  StdCtrls;

type
  TStart = class(TForm)
    Image1: TImage;
    StatusBar1: TStatusBar;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Bestenliste1: TMenuItem;
    N1: TMenuItem;
    Beenden1: TMenuItem;
    Hilfe1: TMenuItem;
    Hilfe2: TMenuItem;
    N2: TMenuItem;
    Info1: TMenuItem;
    PopupMenu1: TPopupMenu;
    NeuesSpiel1: TMenuItem;
    N3: TMenuItem;
    Bestenliste2: TMenuItem;
    N4: TMenuItem;
    Beenden2: TMenuItem;
    Anfnger1: TMenuItem;
    Mittel1: TMenuItem;
    Profi1: TMenuItem;
    Genie1: TMenuItem;
    NeuesSpiel2: TMenuItem;
    N5: TMenuItem;
    Anfnger2: TMenuItem;
    Mittel2: TMenuItem;
    Profi2: TMenuItem;
    Genie2: TMenuItem;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    Image2: TImage;
    Hilfe3: TMenuItem;
    Info2: TMenuItem;
    N6: TMenuItem;
    Bestenlisteanzeigen1: TMenuItem;
    N7: TMenuItem;
    Bestenlistespeichern1: TMenuItem;
    Bearbeiten1: TMenuItem;
    Service1: TMenuItem;
    Kontakt1: TMenuItem;
    N9: TMenuItem;
    Homepage1: TMenuItem;
    Extras1: TMenuItem;
    N10: TMenuItem;
    Registrieren1: TMenuItem;
    Registrieren2: TMenuItem;
    N11: TMenuItem;
    Registrierungsschlsseleingeben1: TMenuItem;
    N12: TMenuItem;
    Fehlermelden1: TMenuItem;
    Anfnger3: TMenuItem;
    N13: TMenuItem;
    Fortgeschritten1: TMenuItem;
    N14: TMenuItem;
    Profi3: TMenuItem;
    N15: TMenuItem;
    Genie3: TMenuItem;
    Language1: TMenuItem;
    DeutschDe1: TMenuItem;
    N16: TMenuItem;
    N17: TMenuItem;
    Timer1: TTimer;
    Image3: TImage;
    Image4: TImage;
    Label1: TLabel;
    NeuerBenutzer1: TMenuItem;
    procedure Beenden1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Beenden2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Info1Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure Anfnger2Click(Sender: TObject);
    procedure Mittel2Click(Sender: TObject);
    procedure Profi2Click(Sender: TObject);
    procedure Genie2Click(Sender: TObject);
    procedure Info2Click(Sender: TObject);
    procedure Hilfe3Click(Sender: TObject);
    procedure Bestenlisteanzeigen1Click(Sender: TObject);
    procedure Kontakt1Click(Sender: TObject);
    procedure Hilfe2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Registrieren2Click(Sender: TObject);
    procedure Registrierungsschlsseleingeben1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Fehlermelden1Click(Sender: TObject);
    procedure DeutschDe1Click(Sender: TObject);
    procedure N16Click(Sender: TObject);
    procedure NeuerBenutzer1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Start: TStart;

implementation

uses BestenlisteUnit, InfoUnit, AnfaengerUnit, MittelUnit, ProfiUnit,
  GenieUnit, ShellApi, KontaktUnit, RegSchluesselEingabeUnit,
  StartbildschirmUnit, registry, inifiles, NeuerUser;

{$R *.dfm}

procedure TStart.Beenden1Click(Sender: TObject);
begin
  Bestenliste.Memo1.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Anfänger.scl');
  Bestenliste.Memo2.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Fortgeschritten.scl');
  Bestenliste.Memo3.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Profi.scl');
  Bestenliste.Memo4.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Genie.scl');
       Application.Terminate;
end;

procedure TStart.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Bestenliste.Memo1.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Anfänger.scl');
  Bestenliste.Memo2.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Fortgeschritten.scl');
  Bestenliste.Memo3.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Profi.scl');
  Bestenliste.Memo4.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Genie.scl');
  Application.Terminate;
end;

procedure TStart.Beenden2Click(Sender: TObject);
begin
  Bestenliste.Memo1.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Anfänger.scl');
  Bestenliste.Memo2.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Fortgeschritten.scl');
  Bestenliste.Memo3.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Profi.scl');
  Bestenliste.Memo4.Lines.SaveToFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Genie.scl');
  Application.Terminate;
end;

procedure TStart.Timer1Timer(Sender: TObject);
begin
  StatusBar1.Panels[0].Text := Datetostr(now);
  StatusBar1.Panels[1].Text := Timetostr(now);
end;

procedure TStart.Info1Click(Sender: TObject);
begin
  Info.show;
end;

procedure TStart.SpeedButton1Click(Sender: TObject);
begin
  Anfaenger.show;
end;

procedure TStart.SpeedButton2Click(Sender: TObject);
begin
  Mittel.show;
end;

procedure TStart.SpeedButton3Click(Sender: TObject);
begin
  Profi.show;
end;

procedure TStart.SpeedButton4Click(Sender: TObject);
begin
  Genie.show;
end;

procedure TStart.Anfnger2Click(Sender: TObject);
begin
  Anfaenger.Show;
end;

procedure TStart.Mittel2Click(Sender: TObject);
begin
  Mittel.show;
end;

procedure TStart.Profi2Click(Sender: TObject);
begin
  Profi.Show;
end;

procedure TStart.Genie2Click(Sender: TObject);
begin
  Genie.show;
end;

procedure TStart.Info2Click(Sender: TObject);
begin
  Info.Show;
end;

procedure TStart.Hilfe3Click(Sender: TObject);
begin
  if ShellExecute(Application.Handle,
                 'open',
                 PChar('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Hilfe.hlp'),
                 Nil, Nil, SW_NORMAL) <= 32 then
    ShowMessage('Es ist ein Fehler aufgetreten');
end;

procedure TStart.Bestenlisteanzeigen1Click(Sender: TObject);
begin
  Bestenliste.show;
end;

procedure TStart.Kontakt1Click(Sender: TObject);
begin
  Kontakt.show;
end;

procedure TStart.Hilfe2Click(Sender: TObject);
begin
  if ShellExecute(Application.Handle,
                 'open',
                 PChar('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Hilfe.hlp'),
                 Nil, Nil, SW_NORMAL) <= 32 then
    ShowMessage('Es ist ein Fehler aufgetreten');
end;

procedure TStart.FormShow(Sender: TObject);
begin
  Timer1.Enabled := true;
end;

procedure TStart.Registrieren2Click(Sender: TObject);
begin
  if ShellExecute(Application.Handle,
                 'open',
                 PChar('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Registrieren.exe'),
                 Nil, Nil, SW_NORMAL) <= 32 then
    ShowMessage('Es ist ein Fehler aufgetreten');
end;

procedure TStart.Registrierungsschlsseleingeben1Click(Sender: TObject);
begin
  RegistrierungsschluesselEingeben.show;
end;

procedure TStart.FormCreate(Sender: TObject);
var Ini:TInifile;
begin
if FileExists('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Anfänger.scl') then
  begin
  {  Bestenliste.Memo1.Lines.LoadFromFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Anfänger.scl');
    bestenliste.Memo2.Lines.LoadFromFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Fortgeschritten.scl');
    bestenliste.Memo3.Lines.LoadFromFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Profi.scl');
    bestenliste.Memo4.Lines.LoadFromFile('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Genie.scl');
  }end;

if startbildschirm.label7.Caption = 'English' then
begin
try
Ini:=TIniFile.Create('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\languagefile.ini');
    Start.Datei1.Caption:=Ini.readstring('English','File','Wert');
    Start.Beenden1.Caption:=Ini.ReadString('English','close','wert');
    start.Beenden2.Caption:=Ini.ReadString('English','close','wert');
    start.bestenlisteanzeigen1.Caption:=Ini.ReadString('English','Score','Wert');
    start.Bestenliste1.Caption:=Ini.ReadString('English','Score','wert');
    start.Bestenliste2.Caption:=Ini.ReadString('English','Score','wert');
    start.Bearbeiten1.Caption:=Ini.ReadString('English','Edit','wert');
    start.NeuesSpiel2.Caption:=Ini.readstring('English','New','wert');
    start.NeuesSpiel1.Caption:=Ini.readstring('English','New','wert');
    start.Hilfe1.Caption:=Ini.ReadString('English','Help','wert');
    start.Hilfe2.Caption:=Ini.ReadString('English','Help','wert');
    start.Hilfe3.Caption:=Ini.ReadString('English','Help','wert');
    start.Info1.Caption:=Ini.ReadString('English','Info','wert');
    start.Anfnger1.Caption:=Ini.readstring('English','beginner','wert');
    start.Anfnger2.Caption:=Ini.readstring('English','beginner','wert');
    start.Anfnger3.Caption:=Ini.readstring('English','beginner','wert');
    start.Fortgeschritten1.Caption:=Ini.ReadString('english','advanced','wert');
    start.Genie1.Caption:=Ini.ReadString('English','genius','wert');
    start.Genie2.Caption:=Ini.ReadString('English','genius','wert');
    start.Genie3.Caption:=Ini.ReadString('English','genius','wert');
    start.Profi1.Caption:=Ini.ReadString('english','pro','wert');
    start.Profi2.Caption:=Ini.ReadString('english','pro','wert');
    start.Profi3.Caption:=Ini.ReadString('english','pro','wert');
    start.Service1.Caption:=Ini.ReadString('English','service','wert');
    start.Mittel1.Caption:=Ini.ReadString('english','advanced','wert');
    start.Mittel2.Caption:=Ini.readstring('english','advanced','wert');
    start.Extras1.Caption:=Ini.ReadString('english','extras','wert');
    start.Registrieren1.Caption:=Ini.ReadString('english','register','wert');
    start.Registrieren2.Caption:=Ini.ReadString('english','register','wert');
   finally
    Ini.Free;
  end;
  if startbildschirm.lmdsimplelabel1.Visible = false then
  begin
    speedbutton4.Enabled := true;
    Speedbutton3.Enabled := true;
    StatusBar1.Panels[4].Text := ' ';
  end;
end else
begin
try
Ini:=TIniFile.Create('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\languagefile.ini');
    Start.Datei1.Caption:=Ini.readstring('Deutsch','File','Wert');
    Start.Beenden1.Caption:=Ini.ReadString('Deutsch','close','wert');
    start.Beenden2.Caption:=Ini.ReadString('Deutsch','close','wert');
    start.bestenlisteanzeigen1.Caption:=Ini.ReadString('Deutsch','Score','Wert');
    start.Bestenliste1.Caption:=Ini.ReadString('Deutsch','Score','wert');
    start.Bestenliste2.Caption:=Ini.ReadString('Deutsch','Score','wert');
    start.Bearbeiten1.Caption:=Ini.ReadString('Deutsch','Edit','wert');
    start.NeuesSpiel2.Caption:=Ini.readstring('Deutsch','New','wert');
    start.NeuesSpiel1.Caption:=Ini.readstring('Deutsch','New','wert');
    start.Hilfe1.Caption:=Ini.ReadString('Deutsch','Help','wert');
    start.Hilfe2.Caption:=Ini.ReadString('Deutsch','Help','wert');
    start.Hilfe3.Caption:=Ini.ReadString('Deutsch','Help','wert');
    start.Info1.Caption:=Ini.ReadString('Deutsch','Info','wert');
    start.Anfnger1.Caption:=Ini.readstring('Deutsch','beginner','wert');
    start.Anfnger2.Caption:=Ini.readstring('Deutsch','beginner','wert');
    start.Anfnger3.Caption:=Ini.readstring('Deutsch','beginner','wert');
    start.Fortgeschritten1.Caption:=Ini.ReadString('Deutsch','advanced','wert');
    start.Genie1.Caption:=Ini.ReadString('Deutsch','genius','wert');
    start.Genie2.Caption:=Ini.ReadString('Deutsch','genius','wert');
    start.Genie3.Caption:=Ini.ReadString('Deutsch','genius','wert');
    start.Profi1.Caption:=Ini.ReadString('Deutsch','pro','wert');
    start.Profi2.Caption:=Ini.ReadString('Deutsch','pro','wert');
    start.Profi3.Caption:=Ini.ReadString('Deutsch','pro','wert');
    start.Service1.Caption:=Ini.ReadString('Deutsch','service','wert');
    start.Mittel1.Caption:=Ini.ReadString('Deutsch','advanced','wert');
    start.Mittel2.Caption:=Ini.readstring('Deutsch','advanced','wert');
    start.Extras1.Caption:=Ini.ReadString('Deutsch','extras','wert');
    start.Registrieren1.Caption:=Ini.ReadString('Deutsch','register','wert');
    start.Registrieren2.Caption:=Ini.ReadString('Deutsch','register','wert');
   finally
    Ini.Free;
  end;
  if startbildschirm.lmdsimplelabel1.Visible = false then
  begin
    speedbutton4.Enabled := true;
    Speedbutton3.Enabled := true;
    StatusBar1.Panels[4].Text := ' ';
  end;
end;
         end;
procedure TStart.Button1Click(Sender: TObject);
begin
Startbildschirm.show;
end;
procedure TStart.Fehlermelden1Click(Sender: TObject);
begin
  if ShellExecute(Application.Handle,
                 'open',
                 PChar('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\Fehlermelde-Assistent.exe'),
                 Nil, Nil, SW_NORMAL) <= 32 then
    ShowMessage('Es ist ein Fehler aufgetreten');
end;

procedure TStart.DeutschDe1Click(Sender: TObject);
var regist: TRegistry;
    Ini: TIniFile;

begin
label1.Caption:='Deutsch';
DeutschDe1.enabled := false;
Image2.Visible := true;
Image3.Visible := false;
Image4.Visible := false;
ShowMessage('Bitte starten Sie BrainTrainer neu, um die Einstellungen zu übernehmen!');
try
    Ini:=TIniFile.Create('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\language.ini');
    Ini.WriteString('favoritelanguage','language',Label1.Caption);
  finally
    Ini.Free;
  end;
{regist:=TRegistry.Create;
  try
    regist.RootKey:=HKEY_LOCAL_MACHINE; //voreingestellt ist HKEY_CURRENT_USER
    regist.OpenKey('SOFTWARE\E.T.-IT Software Corporation\BrainTrainer\2.0',true);
      //bei true wird Schlüssel erzeugt, wenn er noch nicht existiert

    regist.writestring('Language', 'German');

    finally
      Free;
    end;}
end;


procedure TStart.N16Click(Sender: TObject);
var regist: TRegistry;
    Ini: TIniFile;
begin
Label1.Caption:='English';

Image3.Visible := true;
Image4.Visible := true;
Image2.Visible := false;
ShowMessage('Please restart BrainTrainer for changing the language!');

try
    Ini:=TIniFile.Create('C:\Program Files\E.T.-IT Software Corporation\BrainTrainer 2.0\language.ini');
    Ini.WriteString('favoritelanguage','language',Label1.Caption);
  finally
    Ini.Free;
  end;
{ regist:=TRegistry.Create;
  try
    regist.RootKey:=HKEY_LOCAL_MACHINE; //voreingestellt ist HKEY_CURRENT_USER
    regist.OpenKey('SOFTWARE\E.T.-IT Software Corporation\BrainTrainer\2.0',true);
      //bei true wird Schlüssel erzeugt, wenn er noch nicht existiert

    regist.writestring('Language', 'English');

    finally
      Free;
    end; }
end;


procedure TStart.NeuerBenutzer1Click(Sender: TObject);
begin
NeuerBenutzer.show;
end;

end.
So hier der Quellcode aber ich check das noch mal mit den Haltepunkten durch!!

shmia 31. Jul 2007 16:51

Re: Exception der Klasse EAccessViolation aufgetreten!
 
Man darf innerhalb einer Klasse nicht auf die globale Instanzvariable (der eigenen Klasse) zugreifen!
Das ist nur ein (aber sehr schwerwiegender) Fehler in deinem Sourcecode.
Delphi-Quellcode:
var
  Startbildschirm: TStartbildschirm;
implementation
procedure TStartbildschirm.StartTimerTimer(Sender: TObject);
begin
  Start.show;
  // FALSCH !!!!!!
  // Wer sagt denn, dass die Variable "Startbildschirm" wirklich auf ein gültiges Objekt zeigt ?
  // Es könnten auch mehrere Objekte der Klasse TStartbildschirm existieren
  // auch dann führt das zu schweren Fehlern
  Startbildschirm.Visible := false;

  // Richtig !
  Visible := false; // eigentlich ganz einfach

//  if Start.Visible = true then // Schlecht
  // Richtig: Boolsche Ausdrücke werden direkt verwendet
  // Vergleich mit True kostet mehr Rechenzeit und kann unter bestimmten Umständen
  // zu Fehlern führen
  if Start.Visible then
  begin
    // Startbildschirm.StartTimer.Enabled := false ;
    StartTimer.Enabled := false ; // siehe oben
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz