![]() |
Problem mit aktuellen Parameter
Hiho!
Ich habe eine Prozedur, welche mir den inhalt eines Stringrids öffnet,welches ich zuvor gespeichert habe. Leider speichert er das alles als Stringlist ab, und öffnet es auch wieder als diese. Aber ich brauche Integerwerte, da die Tabelle die Punkte für ein Koordinatensystem erhält, welche ich benutze zum zeichnen. Also meine Frage... wie kann ich meine Strings in integerwerte umwandeln?! Mit StrToInt habe ich es schon versucht,aber da meckert er rum, dass ich keine aktuellen Parameter hab.
Delphi-Quellcode:
Kann mir jemand weiterhelfen?!
procedure TForm1.ffnen1Click(Sender: TObject);
var F: TStringList; i: Integer; begin opendialog1.execute; F := TStringList.Create; try with StringGrid1 do begin F.LoadFromFile(OpenDialog1.FileName); RowCount := StrToInt(F[0]); // Zeilen ColCount := StrToInt(F[1]); // Spalten Edit1.Text := F[1]; Edit2.Text := F[0]; for i := 0 to (RowCount - 1) do // Zeilen M1 Rows[i].CommaText := StrtoInt F[i+2]; end; except end; end; Danke schonmal im vorraus! MfG Anna [edit=Jelly]Wie bereits angemerkt wurde handelt es sich wohl doch eher um Win32 Mfg, Jelly[/edit] |
Re: Problem mit aktuellen Parameter
Also mal abgesehen davon, dass das nicht nach .NET aussieht (da gibts StrToInt gar nicht) solltest du dir vielleicht einmal das Grundlagentutorial auf dsdt.info ansehen.
StrToInt ist eine Funktion. Eine Funktion, die genau einen Parameter erwartet. Du musst schreiben StrToInt(F[i+2]). |
Re: Problem mit aktuellen Parameter
Ist Rows auch ne StringListe?
Deren Eigenschaft .CommaText ist ja auch ein String. |
Re: Problem mit aktuellen Parameter
Moin Anna,
ich fange mal von oben an ;-)
Delphi-Quellcode:
Du fragst den Rückgabewert nicht ab. Wird der Dialog abgebrochen, wird so anschliessend trotzdem versucht die, nicht ausgewählte, Datei zu laden, was dann in einem Fehler mündet.
OpenDialog1.Execute;
So
Delphi-Quellcode:
wird die Prozedur verlassen, wenn keine der Dialog abgebrochen wird.
if not OpenDialog1.Execute then exit;
Zu dem Erzeugen der Stringliste fehlt die zugehörige Freigabe. So wie es jetzt ist, wird ein Speicherleck produziert. So kannst Du das verhindern, selbst wenn innerhalb der Prozedur eine Execption auftritt
Delphi-Quellcode:
Die Kapselung des Hauptteils in try/except unterdrückt zwar eventuell auftretende Exceptions, aber die sollten da, wenn das Programm dort ansonsten fehlerfrei ist, eh' nicht auftreten. Am Besten lässt Du try/except dort weg.
F := TStringList.Create;
try // Der Rest der Prozedur finally FreeAndNil(F); // Oder F.free; end; Hier
Delphi-Quellcode:
musst Du mal schlicht das StrToInt weglassen, denn CommaText und F[i+2] sind beides Strings. Da muss nichts umgewandelt werden.
Rows[i].CommaText := StrtoInt F[i+2];
Damit wäre dann auch die Fehlermeldung des Compilers behoben. |
Re: Problem mit aktuellen Parameter
Erstmal danke für euere Hilfe, aber ich wollte gern noch wissen, wie ich den string in ein integerwert umwandle.
|
Re: Problem mit aktuellen Parameter
Du hast die Wahl:
TryStrToInt(), StrToInt(), Val(), StrToIntDef() |
Re: Problem mit aktuellen Parameter
das problem ist, dass ich nicht einfach TStrings über StrToInt in Integer umwandeln kann...
|
Re: Problem mit aktuellen Parameter
Eine Stringliste nicht, aber die einzelnen Strings darin.
|
Re: Problem mit aktuellen Parameter
Und wie kann ich auf die einzelnen Strings zugreifen?
|
Re: Problem mit aktuellen Parameter
Sie
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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