Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi EStringListError Hilfe (https://www.delphipraxis.net/172440-estringlisterror-hilfe.html)

AxelhacK 3. Jan 2013 22:35

Delphi-Version: 5

EStringListError Hilfe
 
Hallo, ich bräuchte eure Hilfe.
Bei diesem Quellcode, kommt dieser Error.

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Ed_EIN: TEdit;
    Ed_AUS: TEdit;
    Btn_Start: TButton;
    procedure Btn_StartClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  nr1, nr2, nr3, translated2:string;
  a,b,i2,AktuelleZahl, Stelle1, Stelle2, Stelle3: integer;
  Bloecke: TStringList;
  nummern: TStringList;
  translated: TStringList;
implementation

{$R *.dfm}


procedure Zerlegen;
begin
Bloecke:=TStringList.Create;
Bloecke.Clear;

Repeat
  begin
    b:=a mod 1000;
    a:=(a-b)div 1000;
    Bloecke.Add(inttostr(b));
  end;
  until a=0;
end;

procedure benenne;
begin
  if aktuellezahl>99 then
    begin
      Stelle1:=(aktuellezahl - (aktuellezahl mod 100)) div 100;
    end
    else
    begin
      Stelle1:=0;
    end;

  if aktuellezahl mod 10 > 0 then
    begin
      stelle3:= aktuellezahl mod 10;
    end
    else
    begin
      stelle3:= 0;
    end;

  if aktuellezahl - (aktuellezahl - (aktuellezahl mod 100))>9 then
    begin
      Stelle2:=((aktuellezahl -(stelle3)-(stelle1 *100)) div 10);
    end
    else
    begin
      stelle2:=0;
    end;
end;

procedure translate;
begin
  nummern:= TstringList.Create;
  nummern.Add('ein');
  nummern.Add('eins');
  nummern.Add('zwei');
  nummern.Add('drei');
  nummern.Add('vier');
  nummern.Add('fuenf');
  nummern.Add('sechs');
  nummern.Add('sieben');
  nummern.Add('acht');
  nummern.Add('neun');
  nummern.Add('zehn');
  nummern.Add('zwanzig'); //11//
  nummern.Add('dreissig');
  nummern.Add('vierzig');
  nummern.Add('fuenfzig');
  nummern.Add('sechzig');
  nummern.Add('siebzig');
  nummern.Add('achzig');
  nummern.Add('neunzig'); //18//
  nummern.Add('elf');
  nummern.Add('zwoelf');
  nummern.Add('und');

  if stelle1 <> 0 then
  begin
    if stelle1=1 then
    begin
      nr1:=nummern [0];
    end
    else
    begin
      nr1:=nummern [stelle1];
    end;
  end;

  if stelle2 > 1 then
  begin
    nr2:=nummern [Stelle2 +9];
  end
  else
  begin
    if stelle2 = 1 then
    begin
      if stelle3 = 1 then
      begin
        nr2:=nummern[19];    //elf//
        stelle3:=0            //dritte stelle faellt weg//
      end;

      if stelle3 = 2 then
      begin
        nr2:=nummern[20];    //zwoelf//
        stelle3:=0            //s. Oben//
      end
      else
      begin
        nr2:=nummern[10];
      end;
    end;
  end;

  if stelle3 > 1 then
  begin
    nr3:=nummern[stelle3];
  end
  else
  begin
    if stelle3 = 1 then
    begin
      nr3:= nummern[0]
    end;
  end;
end;

procedure erweitere;
begin
  translated:=TstringList.Create;

  if (stelle1 = 0) or (stelle2 = 0) or (stelle3 = 0) then
  begin
    if (stelle1 = 0) and (stelle2 = 0) and (stelle3 = 0) then
    begin
      translated2:='a';
    end
    else
    begin
      if ((stelle1=0) and (stelle2=0)) or ((stelle1=0) and (stelle3=0)) or ((stelle2=0) and (stelle3=0)) then
      begin
        if (stelle1=0) and (stelle2=0) then
        begin
          translated2:=nr3;
        end;
        if (stelle1=0) and (stelle3=0) then
        begin
          translated2:=nr2;
        end;
        if (stelle2=0) and (stelle3=0) then
        begin
          translated2:=nr1;
        end;
      end
      else
      begin
        if stelle1=0 then
        begin
          translated2:=nr3 + 'und' + nr2;
        end;
        if stelle2=0 then
        begin
          translated2:=nr1 + nr3;
        end;
        if stelle3=0 then
        begin
          translated2:=nr1 + nr2;
        end;
      end;
    end;
  end
  else
  begin
    translated2:=nr1 + nr3 + 'und' + nr2;
  end;
  translated.Add(translated2);
end;

procedure mach_mathe;
var i:Integer;
begin
Zerlegen;
i2:=Bloecke.Count;
for i:=0 to bloecke.Count do
begin
  aktuellezahl:=strtoint(Bloecke[i2]);
  benenne;
  translate;
  erweitere;
  i2:=i2 -1;
  Bloecke.Free;
  nummern.Free;
  translated.Free;
end;
end;

procedure TForm1.Btn_StartClick(Sender: TObject);
begin
a:=strtoint(Ed_EIN.Text);
mach_mathe;
//Ed_Aus.Text:=inttostr(i);//
end;

end.
Mit freundlichen Grüßen,

Alex

Volker Z. 3. Jan 2013 22:50

AW: EStringListError Hilfe
 
Hallo,

Delphi-Quellcode:
procedure mach_mathe;
var i:Integer;
begin
Zerlegen;
i2:=Bloecke.Count; // Count gibt Dir die Anzahl der Einträge in der Stringliste, also 0..N
for i:=0 to bloecke.Count do
begin
  aktuellezahl:=strtoint(Bloecke[i2]); // Der Index einer Stringliste liegt immer zwischen 0 und Count - 1
  benenne;
  translate;
  erweitere;
  i2:=i2 -1;
  Bloecke.Free;
  nummern.Free;
  translated.Free;
end;
end;
Gruß

Bjoerk 3. Jan 2013 22:58

AW: EStringListError Hilfe
 
Bloecke.Free innerhalb der Schleife ist auch ganz groß.

Und, was erzeugt wird, muß auch wieder freigegeben werden.
Und Verwende zum löschen einer Stringlist die Methode Clear;
Und, und, und..

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Bloecke:= TStringList.Create;
  nummern:= TStringList.Create;
  translated:= TStringList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Bloecke.Free;
  nummern.Free;
  translated.Free;
end;

Bummi 3. Jan 2013 22:58

AW: EStringListError Hilfe
 
CROSSPOST http://www.entwickler-ecke.de/viewtopic.php?t=110889


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz