Einzelnen Beitrag anzeigen

Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#1

Funktionsaufruf innerhalb With..do => access violation

  Alt 6. Mär 2017, 10:52
Hi,

ich hänge mal wieder an eine möglicherweise recht simplen Problem.
Ich erzeuge in meinem Programm einige Forms dynamisch. Zwecks Formatüberprüfung für z.B. eine Faxnummer nutze ich eine Function, die in einer separaten Unit liegt, in 2 dynamisch erzeugen Formularen jeweils im OnExit-Event eine JvValidateEdit um eine Faxnummer automatisch richtig zu formatieren. So weit kein Problem, läuft fehlerfrei.
Bei den beiden Formularen handelt es sich um eine Adressliste und eine Formular zur Adressenerfassung.

Wird jetzt beim Editieren einer Adresse das Formular zur Adressenerfassung erzeugt, möchte ich (im Falle eines des Editieren bereits vorhandener Daten) auch gleich eine Validierung der Faxnummer vornehmen. Der Aufruf ist identisch mit dem im OnExit-Event der Erfassungsform.
Jedoch kommt beim Aufruf der Function bereits eine AccessViolation. Ich habe Probleme mir das zu erklären. Objekte sind alle erzeugt, Uses ist auch passig, Compiler hat nix zu meckern und ich kann über den Debugger auch darauf zugreifen. Aber per Einzelschritt komme ich nicht einmal in die Funktion.

Hier mal der Code:
Delphi-Quellcode:
procedure Tfrm_Adressbuch.btn_aendernClick(Sender: TObject);
var
  LKZ, ONKZ, RN: string;
  idxLKZ, idxONKZ: Integer;
  faxnummer: string;
begin
  if lv_adressen.Selected=nil then Exit;
  with Tfrm_Adresse.Create(self) do
  begin
    try
      edt_name.Text:=Adressbuch[lv_adressen.Selected.Index].Name;
      edt_vorname.Text:=Adressbuch[lv_adressen.Selected.Index].Vorname;
      edt_firma.Text:=Adressbuch[lv_adressen.Selected.Index].Firma;
      faxnummer:=Adressbuch[lv_adressen.Selected.Index].Faxnummer;
      faxnummer:=ValidateNumber(faxnummer, CountryList, ONKZList, Settings.OwnCountryPrefix, Settings.OwnCityPrefix, LKZ, ONKZ, RN, idxLKZ, idxONKZ); // <-- Hier kommt die Access Violation
      edt_faxnummer.Text:=faxnummer;
      if idxLKZ>-1 then lbl_LKZ.Caption:=CountryList[idxLKZ].CountryDE;
      if idxONKZ>-1 then lbl_ONKZ.Caption:=ONKZList[idxONKZ].Ort;
      CountryList:=Self.CountryList;
      ONKZList:=Self.ONKZList;
      Settings:=Self.Settings;
      if ShowModal=mrOK then
      begin
        Adressbuch[lv_adressen.Selected.Index].Name:=edt_name.Text;
        Adressbuch[lv_adressen.Selected.Index].Vorname:=edt_vorname.Text;
        Adressbuch[lv_adressen.Selected.Index].Firma:=edt_firma.Text;
        Adressbuch[lv_adressen.Selected.Index].Faxnummer:=edt_faxnummer.Text;
        Adressbuch.SortByName;
        Adressbuch.SaveToFile(AdressenFilename);
        BuildLV;
      end;
    finally
      Free;
    end;
  end;
end;
Und die Function sieht folgendermaßen aus:
Delphi-Quellcode:
function ValidateNumber(Number: string; CountryList: TCountryList; ONKZList: TONKZList;
  OwnCountryPrefix: string; OwnCityPrefix: string;
  var LKZ, ONKZ, RN: string; var idxLKZ, idxONKZ: integer): string;
Wie gesagt in den OnExit-Events innerhalb des Tfrm_Adresse-Formular kann ich die Funktion problemlos aufrufen.

Hat irgendeiner eine Idee woran das liegen kann? Ist sicher mein Fehler, aber ich verstehe nicht warum.
Gruß Hobbycoder
  Mit Zitat antworten Zitat