AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Elemente aus TStringList in Laufzeit entfernen

Ein Thema von KetchUp · begonnen am 16. Nov 2018 · letzter Beitrag vom 25. Nov 2018
 
Delphi.Narium

Registriert seit: 27. Nov 2017
2.596 Beiträge
 
Delphi 7 Professional
 
#31

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 18. Nov 2018, 13:04
Die Stringliste wird im TForm2.FormCreate erstellt und in TForm2.FormDestroy freigeben.

Eine Freigabe irgendwo "unterwegs" ist schlicht und einfach falsch.

Auch der Aufruf von FormDestroy ist nicht wirklich zielführend, da hier alles ausgeführt wird, was bei der Freigabe des Formulares erforderlich ist.

Im FormDestroy ein weiteres Formular zu öffnen, halte ich nicht für sinnvoll.

Mache Dir bitte eine Methode, die zum Ende, wenn das Vokabeltraining erfolgreich abgeschlossen wurde, aufgerufen wird. In der Methode kannst Du dann das Form3 erstellen und anzeigen.

FormDestroy enthält nur dashier:
Delphi-Quellcode:
procedure TForm2.FormDestroy(Sender: TObject);
begin
  Vocabulary.Free;
  jpgWrong.free;
  jpgCorrect.free;
end;
In einer weiteren Methode, z. B.: Erfolgsmeldung, steht dann sowas in der Art:
Delphi-Quellcode:
procedure TForm2.Erfolgsmeldung(Sender: TObject);
begin
  Form3 := TForm3.Create(self);
  try
    Form3.ShowModal;
  finally
    Form3.Free;
  end;
end;
Oben in der Unit musst Du dann noch etwas ergänzen:
Delphi-Quellcode:
...
    procedure FormCreate(Sender: TObject);
    procedure Bt_CompareClick(Sender: TObject);
    procedure Erfolgsmeldung(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
...
An der Stelle, an der Du momentan FormDestroy(Vocabulary); stehen hast, ruftst Du dann die Methode Erfolgsmeldung(self); auf.

Danach sollte (hoffentlich) das "unmotivierte" Beenden des Programmes oder die Folgefehler der Stringlistenfreigabe, behoben sein.

Dafür
Zitat von ketchup:
ohne wirklich Ahnung von Delphi zu haben
sieht es meiner Meinung nach garnichtmal so übel aus.

Klar kann man da noch was verbesssern, aber mir ist im Laufe meines Lebens noch kein Programm untergekommen, an dem man nicht noch irgendwas verbessern könnte. Mit der Zeit wird man besser und mag eventuell das eine oder andere, was man gemacht hat, nicht mehr wirklich anschauen.

Sorg' erstmal dafür, dass das Programm so funktioniert, wie Du Dir es vorstellst. Dann schaust Du, ob es irgendwelche Quelltexte gibt, die in (fast) identischer Form, mehrfach vorkommen. Daraus machst Du dann Methoden, die Du entsprechend aufrufst. Dadurch wird der Quelltext leichter lesbar.

Ungetesteter Vorschlag:
aus
Delphi-Quellcode:
  Img_Background_01.Canvas.Brush.Color:= RGB(170,220,70);
  Img_Background_01.Canvas.Rectangle(-1,-1,Img_Background_01.Width+1,Img_Background_01.Height+1);

  Img_Background_02.Canvas.Brush.Color:= RGB(170,220,70);
  Img_Background_02.Canvas.Rectangle(-1,-1,Img_Background_02.Width+1,Img_Background_02.Height+1);

  Img_BackgroundSwitchLanguage.Canvas.Brush.Color:= RGB(170,220,70);
  Img_BackgroundSwitchLanguage.Canvas.Rectangle(-1,-1,Img_Background_02.Width+1,Img_Background_02.Height+1);

  Img_HeadingAmountBackground.Canvas.Brush.Color:= RGB(170,220,70);
  Img_HeadingAmountBackground.Canvas.Rectangle(-1,-1,Img_Background_02.Width+1,Img_Background_02.Height+1);

  Img_HeadingRepititionsBackground.Canvas.Brush.Color:= RGB(170,220,70);
  Img_HeadingRepititionsBackground.Canvas.Rectangle(-1,-1,Img_Background_02.Width+1,Img_Background_02.Height+1);
machen wir sowas in der Art:
Delphi-Quellcode:
procedure TForm1.DefaultImg(Img1 : TImage; Img2 : TImage);
begin
  Img1.Canvas.Brush.Color := RGB(170,220,70);
  Img1.Canvas.Rectangle(-1,-1,Img2.Width + 1,Img2.Height + 1);
end;
und statt obiger vielen Zeilen, wird daraus dann sowas in der Art:
Delphi-Quellcode:
  DefaultImg(Img_Background_01,Img_Background_01);
  DefaultImg(Img_Background_02,Img_Background_02);
  DefaultImg(Img_BackgroundSwitchLanguage,Img_Background_02);
  DefaultImg(Img_HeadingAmountBackground,Img_Background_02);
  DefaultImg(Img_HeadingRepititionsBackground,Img_Background_02);
In den ersten beiden Zeilen wird die Methode mit zwei identischen Parametern aufgerufen, das kann man sicherlich auch noch verbessern, in dem man eine überladene Methode erstellt, ... aber das kommt später
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz