ich habe das Problem, dass unten stehender Code beim kompilieren keine Fehlermeldung ergibt aber zur Laufzeit unter Win XP dann einen Fehler Access Violation ergibt. Habt ihr eine Idee, warum?
mit
Kalk_Text:=Memo1.Lines;
setzt du Kalk_Text gleich mit Memo1.Lines und gibst es anschliessend frei (aber nicht mehr die StringList!).
Das schmeckt dem Memo nicht, wenn du ihm sein "Lines" wegnimmst.
Mach so:
Kalk_Text.Assign(Memo1.Lines);
Oder wenn es nur um den Code in Snippet geht, reicht Memo1.Lines.SaveToFile
Sobald ich diesen blöden Part mit der Stringlist und dem wegspeichern auskommentiere funktioniert das ganze auch wieder wunderbar ...
In einem anderen Formular funktioniert das ganze auch wunderbar. Nur dass ich da das Speichern über einen Dialog mache. Doch auch wenn ich das Speichern weglasse, gibt es einen Access Violation.
Giss hat geschrieben: Doch auch wenn ich das Speichern weglasse, gibt es einen Access Violation.
Meine Diagnose: Du suchst am falschen Ort. Der Fehler ist in Teilen deines Codes, die du nicht zeigst.
Das Close; ist vllt. auch nicht so schlau, kommt aber auf den Kontext an.
Es handelt sich um ein Unterformular, das ich dann schließen möchte. Nehme ich das Close raus, funktioniert es auch wieder ... bis ich das Hauptformular schließen möchte. Dann wieder dieselbe Fehlermeldung. Nur fehlen mir spätestens jetzt die Hintergründe ... kann ich ein Unterformular auch anders schließen?
Um Dir helfen zu können, müsstest Du etwas mehr von Deinem Code zeigen oder Deine Zielstellung deutlicher machen!
Es kann sein, daß Du da ein paar Dinge durcheinanderbringst wie: .Show, .Showmodal, .visible etc.
var
Form7: TForm7;
h1 : Real;
v :array [1..49] of String;
Ergebnis : array [1..49] of real;
store : boolean;
Kalk_text : TStringList;
implementation
uses
main in 'main.pas';
{ TForm7 }
procedure TForm7.Button1Click(Sender: TObject); //Berechnung
begin
h1:=RoundTo(StrToFloat(Edit3.Text)+StrToFloat(Edit6.Text)+StrToFloat(Edit9.Text)+
StrToFloat(Edit12.Text)+StrToFloat(Edit15.Text)+StrToFloat(Edit18.Text)+
StrToFloat(Edit21.Text)+StrToFloat(Edit24.Text)+StrToFloat(Edit27.Text)+
StrToFloat(Edit30.Text)+StrToFloat(Edit33.Text)+StrToFloat(Edit36.Text)+
StrToFloat(Edit39.Text)+StrToFloat(Edit42.Text),-2);
Ergebnis[45]:=RoundTo(StrToFloat(Edit43.Text)*h1*0.15, -2);
Edit45.Text:=FloatToStr(Ergebnis[45]);
Edit49.Text:=IntToStr(round(h1)+round(StrToFloat(Edit45.Text))+
round(StrtoFloat(Edit48.Text)));
v[1]:=(Edit1.Text); v[3]:=(Edit3.Text);
v[4]:=(Edit4.Text); v[6]:=(Edit6.Text);
v[7]:=(Edit7.Text); v[9]:=(Edit9.Text);
v[10]:=(Edit10.Text); v[12]:=(Edit12.Text);
v[13]:=(Edit13.Text); v[15]:=(Edit15.Text);
v[16]:=(Edit16.Text); v[18]:=(Edit18.Text);
v[19]:=(Edit19.Text); v[21]:=(Edit21.Text);
v[22]:=(Edit22.Text); v[24]:=(Edit24.Text);
v[25]:=(Edit25.Text); v[27]:=(Edit27.Text);
v[28]:=(Edit28.Text); v[30]:=(Edit30.Text);
v[31]:=(Edit31.Text); v[33]:=(Edit33.Text);
v[34]:=(Edit34.Text); v[36]:=(Edit36.Text);
v[37]:=(Edit37.Text); v[39]:=(Edit39.Text);
v[40]:=(Edit40.Text); v[42]:=(Edit42.Text);
v[43]:=(Edit43.Text); v[45]:=(Edit45.Text);
v[46]:=(Edit46.Text); v[48]:=(Edit48.Text);
v[49]:=(Edit49.Text);
v[2]:=(Edit2.Text);
v[5]:=(Edit5.Text);
v[8]:=(Edit8.Text);
v[11]:=(Edit11.Text);
v[14]:=(Edit14.Text);
v[17]:=(Edit17.Text);
v[20]:=(Edit20.Text);
v[23]:=(Edit23.Text);
v[26]:=(Edit26.Text);
v[29]:=(Edit29.Text);
v[32]:=(Edit32.Text);
v[35]:=(Edit35.Text);
v[38]:=(Edit38.Text);
v[41]:=(Edit41.Text);
v[47]:=(Edit47.Text);
//sitz:=true;
end;
procedure TForm7.Button2Click(Sender: TObject);
begin
v[1]:=(Edit1.Text); v[3]:=(Edit3.Text);
v[4]:=(Edit4.Text); v[6]:=(Edit6.Text);
v[7]:=(Edit7.Text); v[9]:=(Edit9.Text);
v[10]:=(Edit10.Text); v[12]:=(Edit12.Text);
v[13]:=(Edit13.Text); v[15]:=(Edit15.Text);
v[16]:=(Edit16.Text); v[18]:=(Edit18.Text);
v[19]:=(Edit19.Text); v[21]:=(Edit21.Text);
v[22]:=(Edit22.Text); v[24]:=(Edit24.Text);
v[25]:=(Edit25.Text); v[27]:=(Edit27.Text);
v[28]:=(Edit28.Text); v[30]:=(Edit30.Text);
v[31]:=(Edit31.Text); v[33]:=(Edit33.Text);
v[34]:=(Edit34.Text); v[36]:=(Edit36.Text);
v[37]:=(Edit37.Text); v[39]:=(Edit39.Text);
v[40]:=(Edit40.Text); v[42]:=(Edit42.Text);
v[43]:=(Edit43.Text); v[45]:=(Edit45.Text);
v[46]:=(Edit46.Text); v[48]:=(Edit48.Text);
v[2]:=(Edit2.Text);
v[5]:=(Edit5.Text);
v[8]:=(Edit8.Text);
v[11]:=(Edit11.Text);
v[14]:=(Edit14.Text);
v[17]:=(Edit17.Text);
v[20]:=(Edit20.Text);
v[23]:=(Edit23.Text);
v[26]:=(Edit26.Text);
v[29]:=(Edit29.Text);
v[32]:=(Edit32.Text);
v[35]:=(Edit35.Text);
v[38]:=(Edit38.Text);
v[41]:=(Edit41.Text);
v[47]:=(Edit47.Text);
{Kalk_Text:=TStringList.Create;
try
Kalk_Text.Clear;
Kalk_Text.AddStrings(Memo1.Lines);
if SaveDialog1.Execute then kalk_text.SaveToFile(SaveDialog1.FileName);
//finally
ShowMessage('Datei wurde gespeichert');
//end; }
store:=true;
//kalk_text.free;
Close;
end;
procedure TForm7.Edit10Exit(Sender: TObject);
begin
Ergebnis[12]:=RoundTo(StrToFloat(Edit10.Text)*StrtoFloat(Edit11.Text),-2);
Edit12.Text:=FloatToStr(Ergebnis[12]);
if StrToFloat(Edit10.Text)>0 then
begin
Edit10.Color:=(clSkyBlue);
Memo1.Lines.add(Edit10.Text +' x '+ label7.Caption);
end
else Edit10.Color:=(clWindow);
end;
procedure TForm7.Edit13Exit(Sender: TObject);
begin
Ergebnis[15]:=RoundTo(StrToFloat(Edit13.Text)*StrtoFloat(Edit14.Text),-2);
Edit15.Text:=FloatToStr(Ergebnis[15]);
if StrToFloat(Edit13.Text)>0 then
begin
Edit13.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit13.Text+' x '+Label8.Caption);
end
else Edit13.Color:=(clWindow);
end;
procedure TForm7.Edit16Exit(Sender: TObject);
begin
Ergebnis[18]:=RoundTo(StrToFloat(Edit16.Text)*StrtoFloat(Edit17.Text),-2);
Edit18.Text:=FloatToStr(Ergebnis[18]);
if StrToFloat(Edit16.Text)>0 then
begin
Edit16.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit16.Text+' x '+Label9.Caption);
end
else Edit16.Color:=(clWindow);
end;
procedure TForm7.Edit19Exit(Sender: TObject);
begin
Ergebnis[21]:=RoundTo(StrToFloat(Edit19.Text)*StrtoFloat(Edit20.Text),-2);
Edit21.Text:=FloatToStr(Ergebnis[21]);
if StrToFloat(Edit19.Text)>0 then
begin
Edit19.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit19.Text+' x '+Label10.Caption);
end
else Edit19.Color:=(clWindow);
end;
procedure TForm7.Edit1Exit(Sender: TObject);
begin
Ergebnis[3]:=RoundTo(StrToFloat(Edit1.Text)*StrtoFloat(Edit2.Text),-2);
Edit3.Text:=FloatToStr(Ergebnis[3]);
if StrToFloat(Edit1.Text)>0 then
begin
Edit1.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit1.Text+' x '+Label4.Caption);
end
else Edit1.Color:=(clWindow);
end;
procedure TForm7.Edit22Exit(Sender: TObject);
begin
Ergebnis[22]:=RoundTo(StrToFloat(Edit22.Text)*StrtoFloat(Edit23.Text),-2);
Edit22.Text:=FloatToStr(Ergebnis[22]);
if StrToFloat(Edit22.Text)>0 then
begin
Edit22.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit22.Text+' x '+Label11.Caption);
end
else Edit22.Color:=(clWindow);
end;
procedure TForm7.Edit25Exit(Sender: TObject);
begin
Ergebnis[27]:=RoundTo(StrToFloat(Edit25.Text)*StrtoFloat(Edit26.Text),-2);
Edit27.Text:=FloatToStr(Ergebnis[27]);
if StrToFloat(Edit25.Text)>0 then
begin
Edit25.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit25.Text+' x '+Label12.Caption);
end
else Edit25.Color:=(clWindow);
end;
procedure TForm7.Edit28Exit(Sender: TObject);
begin
Ergebnis[30]:=RoundTo(StrToFloat(Edit28.Text)*StrtoFloat(Edit29.Text),-2);
Edit30.Text:=FloatToStr(Ergebnis[30]);
if StrToFloat(Edit28.Text)>0 then
begin
Edit28.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit28.Text+' x '+Label13.Caption);
end
else Edit28.Color:=(clWindow);
end;
procedure TForm7.Edit31Exit(Sender: TObject);
begin
Ergebnis[33]:=RoundTo(StrToFloat(Edit31.Text)*StrtoFloat(Edit32.Text),-2);
Edit33.Text:=FloatToStr(Ergebnis[33]);
if StrToFloat(Edit31.Text)>0 then
begin
Edit31.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit31.Text+' x '+Label14.Caption);
end
else Edit31.Color:=(clWindow);
end;
procedure TForm7.Edit34Exit(Sender: TObject);
begin
Ergebnis[36]:=RoundTo(StrToFloat(Edit34.Text)*StrtoFloat(Edit35.Text),-2);
Edit36.Text:=FloatToStr(Ergebnis[36]);
if StrToFloat(Edit34.Text)>0 then
begin
Edit34.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit34.Text+' x '+Label15.Caption);
end
else Edit34.Color:=(clWindow);
end;
procedure TForm7.Edit37Exit(Sender: TObject);
begin
Ergebnis[39]:=RoundTo(StrToFloat(Edit37.Text)*StrtoFloat(Edit38.Text),-2);
Edit39.Text:=FloatToStr(Ergebnis[39]);
if StrToFloat(Edit37.Text)>0 then
begin
Edit37.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit37.Text+' x '+Label16.Caption);
end
else Edit37.Color:=(clWindow);
end;
procedure TForm7.Edit40Exit(Sender: TObject);
begin
Ergebnis[42]:=RoundTo(StrToFloat(Edit40.Text)*StrtoFloat(Edit41.Text),-2);
Edit42.Text:=FloatToStr(Ergebnis[42]);
if StrToFloat(Edit40.Text)>0 then
begin
Edit40.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit40.Text+' x '+Label17.Caption);
end
else Edit40.Color:=(clWindow);
end;
procedure TForm7.Edit43Exit(Sender: TObject);
begin
h1:=RoundTo(StrToFloat(Edit3.Text)+StrToFloat(Edit6.Text)+StrToFloat(Edit9.Text)+
StrToFloat(Edit12.Text)+StrToFloat(Edit15.Text)+StrToFloat(Edit18.Text)+
StrToFloat(Edit21.Text)+StrToFloat(Edit24.Text)+StrToFloat(Edit27.Text)+
StrToFloat(Edit30.Text)+StrToFloat(Edit33.Text)+StrToFloat(Edit36.Text)+
StrToFloat(Edit39.Text)+StrToFloat(Edit42.Text), -2);
Ergebnis[45]:=RoundTo(StrToFloat(Edit43.Text)*h1*0.15, -2);
Edit45.Text:=FloatToStr(Ergebnis[45]);
if StrToFloat(Edit43.Text)>0 then
begin
Edit43.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit43.Text+' x '+Label18.Caption);
end
else Edit43.Color:=(clWindow);
end;
procedure TForm7.Edit46Exit(Sender: TObject);
begin
Ergebnis[48]:=RoundTo(StrToFloat(Edit46.Text)/100*StrToFloat(Edit47.Text),-2);
Edit48.Text:=FloatToStr(Ergebnis[48]);
if StrToFloat(Edit46.Text)>0 then
begin
Edit46.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit46.Text+' x '+Label19.Caption);
end
else Edit46.Color:=(clWindow);
end;
procedure TForm7.Edit4Exit(Sender: TObject);
begin
Ergebnis[6]:=RoundTo(StrToFloat(Edit4.Text)*StrtoFloat(Edit5.Text),-2);
Edit6.Text:=FloatToStr(Ergebnis[6]);
if StrToFloat(Edit4.Text)>0 then
begin
Edit4.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit4.Text+' x '+Label5.Caption);
end
else Edit4.Color:=(clWindow);
end;
procedure TForm7.Edit7Exit(Sender: TObject);
begin
Ergebnis[9]:=RoundTo(StrToFloat(Edit7.Text)*StrtoFloat(Edit8.Text),-2);
Edit9.Text:=FloatToStr(Ergebnis[9]);
if StrToFloat(Edit7.Text)>0 then
begin
Edit7.Color:=(clSkyBlue);
Memo1.Lines.Add(Edit7.Text+' x '+Label6.Caption);
end
else Edit7.Color:=(clWindow);
end;
procedure TForm7.FormCreate(Sender: TObject);
var
i : integer;
begin
if main.version_intern=false then //Felder bleiben gesperrt
begin
if store=false then
begin
for i:=1 to 49 do
begin
v[i]:=('0');
end;
end;
Edit1.Text:=(v[1]); Edit3.Text:=(v[3]);
if StrToFloat(Edit1.Text)>0 then Edit1.Color:=(clSkyBlue);
Edit4.Text:=(v[4]); Edit6.Text:=(v[6]);
if StrToFloat(Edit4.Text)>0 then Edit4.Color:=(clSkyBlue);
Edit7.Text:=(v[7]); Edit9.Text:=(v[9]);
if StrToFloat(Edit7.Text)>0 then Edit7.Color:=(clSkyBlue);
Edit10.Text:=(v[10]); Edit12.Text:=(v[12]);
if StrToFloat(Edit10.Text)>0 then Edit10.Color:=(clSkyBlue);
Edit13.Text:=(v[13]); Edit15.Text:=(v[15]);
if StrToFloat(Edit13.Text)>0 then Edit13.Color:=(clSkyBlue);
Edit16.Text:=(v[16]); Edit18.Text:=(v[18]);
if StrToFloat(Edit16.Text)>0 then Edit16.Color:=(clSkyBlue);
Edit19.Text:=(v[19]); Edit21.Text:=(v[21]);
if StrToFloat(Edit19.Text)>0 then Edit19.Color:=(clSkyBlue);
Edit22.Text:=(v[22]); Edit24.Text:=(v[24]);
if StrToFloat(Edit22.Text)>0 then Edit22.Color:=(clSkyBlue);
Edit25.Text:=(v[25]); Edit27.Text:=(v[27]);
if StrToFloat(Edit25.Text)>0 then Edit25.Color:=(clSkyBlue);
Edit28.Text:=(v[28]); Edit30.Text:=(v[30]);
if StrToFloat(Edit28.Text)>0 then Edit28.Color:=(clSkyBlue);
Edit31.Text:=(v[31]); Edit33.Text:=(v[33]);
if StrToFloat(Edit31.Text)>0 then Edit31.Color:=(clSkyBlue);
Edit34.Text:=(v[34]); Edit36.Text:=(v[36]);
if StrToFloat(Edit34.Text)>0 then Edit34.Color:=(clSkyBlue);
Edit37.Text:=(v[37]); Edit39.Text:=(v[39]);
if StrToFloat(Edit37.Text)>0 then Edit37.Color:=(clSkyBlue);
Edit40.Text:=(v[40]); Edit42.Text:=(v[42]);
if StrToFloat(Edit40.Text)>0 then Edit40.Color:=(clSkyBlue);
Edit43.Text:=(v[43]); Edit45.Text:=(v[45]);
if StrToFloat(Edit43.Text)>0 then Edit43.Color:=(clSkyBlue);
Edit46.Text:=(v[46]); Edit48.Text:=(v[48]);
if StrToFloat(Edit46.Text)>0 then Edit46.Color:=(clSkyBlue);
Edit49.Text:=(v[49]);
end
else if main.version_intern=true then //Felder freigeben
begin
if store=false then
begin
for i:=1 to 49 do
begin
v[i]:=('0');
end;
end;
Edit1.Text:=(v[1]); Edit3.Text:=(v[3]);
if StrToFloat(Edit1.Text)>0 then Edit1.Color:=(clSkyBlue);
Edit4.Text:=(v[4]); Edit6.Text:=(v[6]);
if StrToFloat(Edit4.Text)>0 then Edit4.Color:=(clSkyBlue);
Edit7.Text:=(v[7]); Edit9.Text:=(v[9]);
if StrToFloat(Edit7.Text)>0 then Edit7.Color:=(clSkyBlue);
Edit10.Text:=(v[10]); Edit12.Text:=(v[12]);
if StrToFloat(Edit10.Text)>0 then Edit10.Color:=(clSkyBlue);
Edit13.Text:=(v[13]); Edit15.Text:=(v[15]);
if StrToFloat(Edit13.Text)>0 then Edit13.Color:=(clSkyBlue);
Edit16.Text:=(v[16]); Edit18.Text:=(v[18]);
if StrToFloat(Edit16.Text)>0 then Edit16.Color:=(clSkyBlue);
Edit19.Text:=(v[19]); Edit21.Text:=(v[21]);
if StrToFloat(Edit19.Text)>0 then Edit19.Color:=(clSkyBlue);
Edit22.Text:=(v[22]); Edit24.Text:=(v[24]);
if StrToFloat(Edit22.Text)>0 then Edit22.Color:=(clSkyBlue);
Edit25.Text:=(v[25]); Edit27.Text:=(v[27]);
if StrToFloat(Edit25.Text)>0 then Edit25.Color:=(clSkyBlue);
Edit28.Text:=(v[28]); Edit30.Text:=(v[30]);
if StrToFloat(Edit28.Text)>0 then Edit28.Color:=(clSkyBlue);
Edit31.Text:=(v[31]); Edit33.Text:=(v[33]);
if StrToFloat(Edit31.Text)>0 then Edit31.Color:=(clSkyBlue);
Edit34.Text:=(v[34]); Edit36.Text:=(v[36]);
if StrToFloat(Edit34.Text)>0 then Edit34.Color:=(clSkyBlue);
Edit37.Text:=(v[37]); Edit39.Text:=(v[39]);
if StrToFloat(Edit37.Text)>0 then Edit37.Color:=(clSkyBlue);
Edit40.Text:=(v[40]); Edit42.Text:=(v[42]);
if StrToFloat(Edit40.Text)>0 then Edit40.Color:=(clSkyBlue);
Edit43.Text:=(v[43]); Edit45.Text:=(v[45]);
if StrToFloat(Edit43.Text)>0 then Edit43.Color:=(clSkyBlue);
Edit46.Text:=(v[46]); Edit48.Text:=(v[48]);
if StrToFloat(Edit46.Text)>0 then Edit46.Color:=(clSkyBlue);
Edit5.Color:=(clWindow); Edit5.ReadOnly:=false;
Edit2.Color:=(clWindow); Edit2.ReadOnly:=false;
Edit8.Color:=(clWindow); Edit8.ReadOnly:=false;
Edit11.Color:=(clWindow); Edit11.ReadOnly:=false;
Edit14.Color:=(clWindow); Edit14.ReadOnly:=false;
Edit17.Color:=(clWindow); Edit17.ReadOnly:=false;
Edit20.Color:=(clWindow); Edit20.ReadOnly:=false;
Edit23.Color:=(clWindow); Edit23.ReadOnly:=false;
Edit26.Color:=(clWindow); Edit26.ReadOnly:=false;
Edit29.Color:=(clWindow); Edit29.ReadOnly:=false;
Edit32.Color:=(clWindow); Edit32.ReadOnly:=false;
Edit35.Color:=(clWindow); Edit35.ReadOnly:=false;
Edit38.Color:=(clWindow); Edit38.ReadOnly:=false;
Edit41.Color:=(clWindow); Edit41.ReadOnly:=false;
Edit47.Color:=(clWindow); Edit47.ReadOnly:=false;
if store=true then
begin
Edit2.Text:=(v[2]);
Edit5.Text:=(v[5]);
Edit8.Text:=(v[8]);
Edit11.Text:=(v[11]);
Edit14.Text:=(v[14]);
Edit17.Text:=(v[17]);
Edit20.Text:=(v[20]);
Edit23.Text:=(v[23]);
Edit26.Text:=(v[26]);
Edit29.Text:=(v[29]);
Edit32.Text:=(v[32]);
Edit35.Text:=(v[35]);
Edit38.Text:=(v[38]);
Edit41.Text:=(v[41]);
Edit47.Text:=(v[47]);
end;
end;
end;
initialization
{$I unit7.lrs}
end.
Die benutzte Methode war in den Büchern, die ich gelesen habe, die bevorzugte. Deinen Vorschlag habe ich gerade umgesetzt gehabt. Leider hat das nicht so ohne weiteres funktioniert: