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