![]() |
Probleme mit StringGrid speichern
Hallo ;)
ich habe mal wieder ein Problem mit dem Speichern eines StringGrids und zwar geht es zuerst um eine Prozedur die Marabu mal in einem Thread gepostet hat. Hier mal der ![]() Und zwar werden mir bei 3 Stellen Fehlermeldungen angezeigt, die habe ich einfach mal kommentiert. Die fehlermeldung lautet bei allen drei: [Fehler] UnStringGrid.pas(66): Es gibt keine überladene Version von 'IfThen', die man mit diesen Argumenten aufrufen kann.
Delphi-Quellcode:
Wenn ich die Zeilen in denen die Fehlermeldungen vorkommen auskommentiere, startet das Programm ganz normal. Allerdings speichert es dann die FixedRows doch mit was ja eigentlich, durch eine Anweisung die später im Programm kommt sich aber darauf bezieht, verhindert werden soll.
type
TSaveOption = (soSaveCols, soExcludeFixed); TSaveOptions = set of TSaveOption; procedure SaveGrid(sg: TStringGrid; s: TStream; so: TSaveOptions = []); var iLow, iHigh, i: Integer; ss: TStringStream; bSaveCols, bExcludeFixed: Boolean; begin ss := TStringStream.Create(''); with sg do begin bSaveCols := soSaveCols in so; bExcludeFixed := soExcludeFixed in so; if bSaveCols then begin iLow := IfThen(bExcludeFixed, FixedCols); //Fehlermeldung iHigh := Pred(ColCount); //Fehlermedung end else begin iLow := IfThen(bExcludeFixed, FixedRows); //Fehlermeldung iHigh := Pred(RowCount); end; for i := iLow to iHigh do begin ss.Size := 0; if bSaveCols then ss.WriteString(Cols[i].CommaText + sLineBreak) else ss.WriteString(Rows[i].CommaText + sLineBreak); ss.Position := 0; s.CopyFrom(ss, ss.Size); end; end; ss.Free; end; Hier der angesprochene Code Ausschnitt:
Delphi-Quellcode:
So das wär dann Problem Nr1 aber ich verzweifle zZ. trotzdem noch an einem anderen Teil und zwar handelt sich darum wie das StringGrid in der Datei abgespeichert wird, hier mal ein Beispiel um es zu verdeutlichen:
procedure TForm1.Speichern1Click(Sender: TObject);
var s: TStream; fn: TFileName; begin fn := ChangeFileExt(ParamStr(0), '.txt'); s := TFileStream.Create(fn, fmCreate); savedialog1.execute; SaveGrid(StringGrid1, s); s.Free; 11 7 ,KundenNr,Name,Vorname,Straße,PLZ,Ort 1,52323,Müller,Hans,"Kühle Bäume 12",13186,Jesberg 2,52266,Lang,Susanne,"Am Rödel 21",52131,Hundshausen 3,85902,Willhelm,Jörg,"Roter Berg 7",63671,Mengsberg 4,36347,Nebel,Maren,"Schulstraße 14",48920,Zimmersrode 5,49403,Bielig,Klaus,"Wiesenwogen 11",49783,Römersberg 6,52531,Kessler,Tobias,"Hauptstraße 40",39202,Jesberg 7,32360,Pitz,Fabian,"Am Brunnen 18",349492,Sachsenhausen 8,48292,Bos,Samuel,"Spiesergarten 6",93921,Münchhausen 9,49202,Usbek,Natalia,"Hauerweg 26",38392,Gilsa 10,49202,Geißel,Theresa,"Steinweg 15",39382,Bischhausen ,,,,,, So, das Problem ist das er mir die Zeilen- und Spaltenanzahl meines StringGrids mit speichert was zu einem Problem wird wenn ich die Datei dann wieder öffnen möchte :/ , kann ich vielleicht bewirken das wenn das Programm das StringGrid speichert das die beiden Zahlen gleich wieder gelöscht werden, oder kann man das direkt im Keim ersticken? Wenn ja wie kann ich das anstellen? Das zweite mehr oder weniger große Problem sind die "" um die Straßennamen und Hausnummern welche dann auch wieder in das StringGrid übertragen werden wenn ich die Datei öffne, es ist zwar jetzt nicht der Weltuntergang aber ohne siehts dann scho besser aus, hat jemand eine Idee? ;) Schonmal danke für alle Antworten mfg Alex |
Re: Probleme mit StringGrid speichern
Was macht denn IfThen? Ich habe hier im Moment nur Delphi 5 zur Verfügung, da gibt es das noch nicht.
|
Re: Probleme mit StringGrid speichern
Das ist auch mein Problem ich hab mal nach gegoogelt aber wurde immer nur auf if-then-else verwiesen...daher könnte das Problem vielleicht auch bei meiner Version liegen was ich allerdings bezweifle da er, laut der Fehlermeldung, ja die Anweisung kennt :shock:
|
Re: Probleme mit StringGrid speichern
Einfach mal in die Hilfe schauen:
Zitat:
|
Re: Probleme mit StringGrid speichern
Müsste also IMO so lauten:
Delphi-Quellcode:
iLow := IfThen(bExcludeFixed, FixedCols, 0);
|
Re: Probleme mit StringGrid speichern
Hmm erstmal danke für eure Antworten, also ich habe nochmal in der Deutschen Hilfe nachgeschaut und bin zu den gleichen Ergebnis gekommen wie DeddyH aber funktionieren tut es trotzdem nicht...
Gibt es vielleicht auch eine andere Anweisung mit dem man den Zweck von IfThen erfüllen kann? Oder Marabu könnte sich zu der Anweisung äußern, ich glaube das würde am meisten bringen ;) mfg Alex |
Re: Probleme mit StringGrid speichern
Delphi-Quellcode:
Das sollte denselben Zweck erfüllen.
If bExcludeFixed Then
iLow := FixedCols else iLow := 0; |
Re: Probleme mit StringGrid speichern
Ah ja, jetzt wird das auch klarer, danke erstmal ;)
Aber wie kann ich den Zeilen und Spalten Zähler in der abgespeicherten Datei weglassen bzw. direkt nach dem speichern wieder löschen? Ich stehe da gerade ziemlich aufm Schlauch :/ |
Re: Probleme mit StringGrid speichern
Hallo Alex,
Zitat:
Zeilen- und Spaltenzähler werden von meinem Code nicht ausgegeben. Wo kommen die denn her? Freundliche Grüße |
Re: Probleme mit StringGrid speichern
Hmm also mir würde da nur der SaveDialog einfallen, alles andere was mit dem Speichern in meinem Programm zu tun hat kommt von deiner Prozedur :gruebel:
Hier ist mal der code des SaveDialogs:
Delphi-Quellcode:
In wie fern kann das zusammenhängen? Ist vielleicht schonmal jemandem aufgefallen das der SaveDialog sowas automatisch macht? Und kennt jemanden einen Weg das zu unterbinden? Viel zu viele Fragen :roll:
procedure TForm1.Speichern1Click(Sender: TObject);
var s: TStream; fn: TFileName; begin fn := ChangeFileExt(ParamStr(0), '.txt'); s := TFileStream.Create(fn, fmCreate); savedialog1.execute; SaveGrid(StringGrid1, s); s.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 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