Access violation..
Hep :)I min applikation har jeg på FormCreate et tjek på om værdien "isconf" i win registry = "no". Hvis den er det, skal FormSettings åbnes så brugeren "tvinges" til at oprette settings første gang programmet køres.
Umiddelbart fungerer nedenstående fint og FormSettings åbnes også. Men når så man på FormSettings trykker på OK knappen (eller for den sags skyld Cancel, så crasher programmet med en access violation exception - og jeg kan sgutte finde fejlen. Dog markerer Delphi linien SaveSettings i proceduren TFormSettings. btnOKClick.. men fjerner jeg FormSettings.Close; fra SaveSettings; proceduren, får jeg ingen fejl (men så lukkes formen jo ikke :) )
Så fejlen må være ET eller andet sted i det med at åbne og lukke form og noget pointer værk nok :/
Koden ser således ud:
-------------------------
procedure TFormSettings.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;
procedure TFormSettings.FormDestroy(Sender: TObject);
begin
FormSettings := nil;
end;
procedure TFormSettings.btnOKClick(Sender: TObject);
begin
SaveSettings;
end;
procedure TFormSettings.btnCancelClick(Sender: TObject);
begin
FormSettings.Close;
end;
procedure TFormSettings.SaveSettings;
begin
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
// SAVE AUTOSTART SETTINGS
if OpenKey(mDriveKeyName,true) then
begin
if checkAutostart.Checked then
begin
WriteString(mDriveValueName,Application.ExeName);
CloseKey;
end
else
if ValueExists(mDriveValueName) then
DeleteValue(mDriveValueName);
end
else
MessageDlg('Could not open Registry key for insertion.', mtError, [mbOK], 0);
// SAVE USERNAME, PASSWORD AND DRIVE LETTER
if OpenKey(mDriveSettingsKeyName,true) then
begin
WriteString('User',encrypt(txtKundenr.Text,'hejmeddig'));
WriteString('Pw',encrypt(txtAdgangskode.Text,'hejmeddig'));
WriteString('DriveLetter',drivesCombo.Items[drivesCombo.ItemIndex]);
CloseKey;
end
else
if CreateKey(mDriveSettingsKeyName) then
if OpenKey(mDriveSettingsKeyName,true) then
begin
WriteString('User',encrypt(txtKundenr.Text,'hejmeddig'));
WriteString('Pw',encrypt(txtAdgangskode.Text,'hejmeddig'));
WriteString('DriveLetter',drivesCombo.Items[drivesCombo.ItemIndex]);
CloseKey;
end
else
MessageDlg('Could not open Registry key for insertion.', mtError, [mbOK], 0);
finally
free;
end;
FormSettings.Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CoolTrayIcon.IconList := nil;
if not DiskInDrive(mGetDriveLetter[1]) then
begin
ImageList1.GetIcon(1, CoolTrayIcon.Icon);
ShowMessageDiscon;
end
else
ImageList1.GetIcon(0, CoolTrayIcon.Icon);
CoolTrayIcon.CycleIcons := true;
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
if OpenKey(mDriveSettingsKeyName,True) then
begin
if ValueExists('isconf') then
begin
if ReadString('isconf') = 'no' then
begin
showmessage('test 1');
WriteString('isconf','yes');
FormSettings := TFormSettings.Create(nil);
FormSettings.Show;
end
end
else
begin
showmessage('test 2');
WriteString('isconf','yes');
FormSettings := TFormSettings.Create(nil);
FormSettings.Show;
end;
CloseKey;
end;
finally
free;
end;
end;