Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.838 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: Ungültige Zeigeroperation

  Alt 1. Jan 2020, 12:57
Hallöle...

Zitat:
Nachdem ich das Programm beendet habe, habe ich nochmal die sämtlichen Textdateien kontrolliert: alles wurde entsprechend dem Code gemacht...
...das halte ich für ein Gerücht.

Wie die anderen schon erwähnten, fehlen dir die wichtigsten Grundlagen. Um zu Helfen sind wir ja da.

Du solltest diesen Link komplett durcharbeiten:
Crashkurs: https://www.delphi-treff.de/tutorial...phi-crashkurs/

Weitere:
Tutorials: https://www.delphi-treff.de/tutorials/
Debugging lernen: https://www.delphipraxis.net/41047-t...ortgeschr.html

Anmerkungen zu deinem Quelltext:

1. Wichtig: Den Delphi StyleGuide benutzen. https://www.delphi-treff.de/object-pascal/styleguide/
2. Sprechende Namen verwenden. (keine Abkürzungen). In 2 Monaten weißt du nicht mehr was die Abkürzungen bedeuten. (Erfahrung)
3. Formatierung nach dem StyleGuide einhalten. Automatische Formatierung im Delphi ... Standard STRG + D
4. Vermeidung globaler Variablen ... sprich keine.
5. KISS https://de.wikipedia.org/wiki/KISS-Prinzip
6. DRY https://de.wikipedia.org/wiki/Don%E2...epeat_yourself
7. Delphi - Referenz als Hilfe verwenden https://www.delphipraxis.net/dp_reference.php
...als Suchmaschine in den Browser integrieren.
8. Bitte kein Denglisch Programmierung vorzugsweise Englisch.

Vorschlag:
...versuche mal den Code zeilenweise zu analysieren.
Delphi-Quellcode:
unit FormCash;

interface

uses
  Winapi.Windows, Winapi.Messages,
  System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  FormCashOpen, FormCashSave; // sprechende Namen ... was die Forms darstellen :-)

type
  TfoCash = class(TForm)
    btnCash: TButton;
    lstProducts: TListBox;
    procedure btnCashClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FBonList, FCashList: TStringList;
    FSession: Integer;
    FSumTotal: Currency;
    FMoneyGive: Currency;
  public

  end;

var
  foCash: TfoCash;

implementation

{$R *.dfm}

procedure TfoCash.FormCreate(Sender: TObject);
begin
  FBonList := TStringList.Create;
  FCashList := TStringList.Create;
end;

procedure TfoCash.FormDestroy(Sender: TObject);
begin
  FBonList.Free;
  FCashList.Free;
end;

procedure TfoCash.btnCashClick(Sender: TObject);
begin
  try
    FBonList.LoadFromFile('.\Market\info.txt');
    try
      FCashList.LoadFromFile('.\Market\lastsession.txt');
    except
      // Fehlerbehandlung laden ergänzen
      Exit;
    end;
  except
    // Fehlerbehandlung laden ergänzen
    Exit;
  end;

  FSession := (StrToInt(FCashList[FCashList.Count - 1]) + 1); // neue Nummer (letzte Nummer aus der Liste + 1)

  FBonList.Add('');
  FBonList.Add('Einkauf-Nr.: ' + IntToStr(FSession));
  FBonList.Add('');
  FBonList.Add('Produkte:');
  FBonList.Add('');
  FBonList.AddStrings(lstProducts.Items);
  FBonList.Add('');
  FBonList.Add('Total: ' + FloatToStrF(FSumTotal, ffCurrency, 4, 2));
  FBonList.Add('Gegeben: ' + FloatToStrF(FMoneyGive, ffCurrency, 4, 2)); // Denglish geändert
  FBonList.Add('Rückgeld: ' + FloatToStrF(FMoneyGive - FSumTotal, ffCurrency, 4, 2)); // Denglish geändert
  FBonList.Add('');
  FBonList.Add('Vielen Dank für Ihren Einkauf.'); // !!! bedeuten "komm ja nicht wieder" :-)
  FBonList.Add('');

  try
    FBonList.SaveToFile('.\Market\Bon\' + IntToStr(FSession) + '.txt');
    try
      FCashList.Add(IntToStr(FSession));
      FCashList.SaveToFile('.\Market\lastsession.txt');
    except
      // Fehlerbehandlung speichern ergänzen
    end;
  except
    // Fehlerbehandlung speichern ergänzen
  end;
end;

end.

Geändert von haentschman ( 1. Jan 2020 um 13:04 Uhr)
  Mit Zitat antworten Zitat