AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit StringGrid speichern

Ein Thema von Borschti · begonnen am 27. Nov 2007 · letzter Beitrag vom 15. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#1

Probleme mit StringGrid speichern

  Alt 27. Nov 2007, 14:43
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 Link .

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:
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;
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.

Hier der angesprochene Code Ausschnitt:
Delphi-Quellcode:
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;
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:

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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

Re: Probleme mit StringGrid speichern

  Alt 27. Nov 2007, 14:49
Was macht denn IfThen? Ich habe hier im Moment nur Delphi 5 zur Verfügung, da gibt es das noch nicht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Probleme mit StringGrid speichern

  Alt 27. Nov 2007, 14:54
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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Probleme mit StringGrid speichern

  Alt 27. Nov 2007, 14:56
Einfach mal in die Hilfe schauen:
Zitat:
IfThen Routine

Conditionally returns one of two specified values.

Unit
Math

Syntax


[Delphi] function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer): Integer; overload;



[Delphi] function IfThen(AValue: Boolean; const ATrue: Int64; const AFalse: Int64): Int64; overload;



[Delphi] function IfThen(AValue: Boolean; const ATrue: Double; const AFalse: Double): Double; overload;


Description
IfThen checks the expression passed as AValue and returns ATrue if it evaluates to true, or AFalse if it evaluates to false. In Delphi, if the AFalse parameter is omitted, IfThen returns 0 or an empty string when AValue evaluates to False.
Du brauchst also zwingend drei Parameter.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#5

Re: Probleme mit StringGrid speichern

  Alt 27. Nov 2007, 15:01
Müsste also IMO so lauten:iLow := IfThen(bExcludeFixed, FixedCols, 0);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Probleme mit StringGrid speichern

  Alt 27. Nov 2007, 16:00
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#7

Re: Probleme mit StringGrid speichern

  Alt 27. Nov 2007, 16:06
Delphi-Quellcode:
If bExcludeFixed Then
  iLow := FixedCols
else
  iLow := 0;
Das sollte denselben Zweck erfüllen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Probleme mit StringGrid speichern

  Alt 27. Nov 2007, 16:55
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 :/
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Probleme mit StringGrid speichern

  Alt 28. Nov 2007, 09:45
Hallo Alex,

Zitat von Borschti:
... Gibt es vielleicht auch eine andere Anweisung mit dem man den Zweck von IfThen erfüllen kann? ...
Der dritte Parameter von IfThen() ist optional, deshalb muss er bei D7 nicht angegeben werden.

Zeilen- und Spaltenzähler werden von meinem Code nicht ausgegeben. Wo kommen die denn her?

Freundliche Grüße
  Mit Zitat antworten Zitat
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Probleme mit StringGrid speichern

  Alt 28. Nov 2007, 14:02
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

Hier ist mal der code des SaveDialogs:

Delphi-Quellcode:
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;
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:07 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