Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#7

AW: exe Datei verhält sich anders als in der IDE-Umgebung

  Alt 30. Nov 2021, 14:34
joar

* "geloescht" wird niemals verwendet
* "weiter" wird oft garnicht gesetzt/zugewiesen (warum liest niemand das, was der Compiler sagt?)
* * siehe Objekte.Count=0 oder nicht mbYes

* Clear ist etwas nutzlos, weil dort die Liste immer schon leer ist (bei Dem wie du es da oben machst)
* das letzte ShowMessage: Result sind weiter sind immer gleich ... wozu dann Beides anzeigen?

* ...

Delphi-Quellcode:
begin
  if ohneWarnmeldung then begin
    Result := True;
  end else begin
    Result := (Objekte.Count=0) or (MessageDlg('Wollen Sie die vorhandenen '+Objekte.Count.ToString+' Objekte überschreiben',mtConfirmation,[mbYes,mbNo],0)=mrYes);
  end;
  {
  Result := ohneWarnmeldung or (Objekte.Count=0) or (MessageDlg('Wollen Sie die vorhandenen '+Objekte.Count.ToString+' Objekte überschreiben',mtConfirmation,[mbYes,mbNo],0)=mrYes);
  }

  if Result then begin
    while Objekte.Count>0 do begin
      OB := Objekte[0];
      OB.loeschen;
      Objekte.Delete(0);
    end;
    {
    while Objekte.Count>0 do begin
      //OB := Objekte.Extract(0);  // Extract = Auslesen+Delete
      //OB.loeschen;
      Objekte.Extract(0).loeschen;
    end;
    }

    {
    for var i := Objekte.Count-1 downto 0 do
      Objekte[i].loeschen;
    Objekte.Clear;
    }

    {
    // Warum "loeschen" und nicht Free/Destroy?
    // Warum keine ObjectList mit Owns=True?
    // Und schon reicht ein einziger Befehl.
    Objekte.Clear;
    }

  end;
end;
Genau das, was dein Code von da oben macht, nur ohne die "nichtinitialisierten Variablen" (vor dem zwei IF noch ein weiter:=True; eingefügt) und die IFs auch direkt zusammengefasst.
Delphi-Quellcode:
begin
  if not ohneWarnmeldung and (Objekte.Count>0) and (MessageDlg('Wollen Sie die vorhandenen '+Objekte.Count.ToString+' Objekte überschreiben?',mtConfirmation,[mbYes,mbNo],0)=mrYes) then
    Exit(False);
  while Objekte.Count> do
    Objekte.Extract(0).loeschen;
  Result := True;
end;
oder
Delphi-Quellcode:
begin
  if not ohneWarnmeldung and (Objekte.Count>0) and (MessageDlg('Wollen Sie die vorhandenen '+Objekte.Count.ToString+' Objekte überschreiben?',mtConfirmation,[mbYes,mbNo],0)=mrYes) then
    Exit(False);
  for var i := 0 to Objekte.Count-1 do
    Objekte[i].loeschen;
  Objekte.Clear; // ob noch ein Try-Finally oder die Variante mit Extract ... kommt drauf an, wie man die Fehlerbehandlung braucht, falls es im "loeschen" knallt
  Result := True;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Dez 2021 um 08:29 Uhr)
  Mit Zitat antworten Zitat