Hi,
sorry aber ich denke keiner wird dir hier weit helfen können, deine Unit2 / Form2 fehlt einfach im Anhang.
Und ich muss leider noch jede Menge Kritik am Code üben. Jeder der dir helfen möchte, wird es sich sicherlich noch einmal überlegen, wenn er den Codestil sieht. Aber insbesondere solltest du auch für dich selbst an einem besseren Stil arbeiten. Versteh mich nicht falsch, weder kann noch will ich dir hier einen vorschreiben, aber je strukturierter der Code, desto leichter verständlich (für jeden!) und damit auch viel viel weniger Fehleranfällig.
Deshalb solltest du einfach mal mit hierachischem einrücken anfangen
Delphi-Quellcode:
begin
if Irgendwas then
begin
Foo1;
end
else if IrgendwasAnderes then
begin
Foo2;
end;
end
Ich denke hier siehst du schon recht einfach, wo der Vorteil von einer solchen Einrückung ist, noch mal als Kontrast
Delphi-Quellcode:
begin
if Irgendwas then
Foo1; else
if IrgendwasAnderes
Foo2;
end
Da muss man doch sehr viel deutlicher hinschauen um zu wissen, welches Foo zu welcher Bedingung gehört. Insbesondere solltest du pro Zeile auch immer nur eine Anweisung benutzen. Man überliest leicht dein else in Vorgängerzeilen und es gibt auch Möglichkeiten, die sich nicht ausschließen...
Ansonsten solltest du auch Destruktoren benutzen. Wenn du etwas mit .Create anlegst, dann wird speicher allokiert, der sollte aber auch irgendwann wieder frei gegeben werden. Insbesondere gilt hier, dass du nur eine Referenz (typisierter Zeiger auf eine Instanz) speicherst.
Delphi-Quellcode:
var iniFile : TIniFile;
begin
iniFile := TIniFile.Create(DATEI); // erstes Mal speicher alloziert
...
iniFile := TIniFile.Create(DATEI); // gleiche Datei, aber zweites Mal speicher alloziert
...
iniFile.Free; // letzte Instanz frei gegeben, aber eben nur die letzte
end;
Wenn du das z.B. mal mit einer Bitmap als Klassenvariable machst (oder etwas anderem, was nur groß genug ist), dann hast du deinen Speicher ruck-zuck zugemüllt. Das führt unter
Win9x gerne zu komplettem Stillstand und unter den NTs zu Performance einbrüche (da der virtuelle Speicher etwas stark in Anspruch genommen wird).
Als letzter Punkt, benenn lieber deine Komponenten gleich richtig. Am besten mit einem Präfix, der anzeigt um was es sich handelt (z.B. Btn für Buttons oder Frm für ein Form). Unter Button1 und Button2 kann man sich weniger vorstellen als unter BtnLaden oder BtnNeu, dann ist auch klarer was für Code folgen sollte.
So, ich hoffe du fässt das hier nicht falsch auf, ist nur ein Tipp und es klingt vielleicht nach einer Menge, aber wenn du dich immer an diese Regeln hälst, merkst du dass es gar nicht so viele sind und der Code ist einfach sauberer. Am meisten profitierst Du davon, denn du liest deinen Code häufiger als jeder andere. Spätestens wenn du mal im Job mit Programmierung zu tun haben solltest, kommst du um Codestruktur auch gar nicht mehr rum (und das hat seine Gründe). Ich kann dir nur sagen, je eher man es sich angewöhnt desto leichter fällt es einem und es hat einfach seine Vorteile (auch bei noch so kleinen Projekten).
Gruß Der Unwissende