![]() |
[gelöst] Lazarus: SaveToFile geht nicht
OS: Windows 8.1 Professional 64-Bit
Dateisystem: NTFS IDE: Lazarus 1.2.6 FPC: 2.6.4 Moin, wedwer das :
Delphi-Quellcode:
noch das :
procedure TForm1.MenuItem5Click(Sender: TObject);
var tempstr: string; begin if SaveDialog1.Execute then begin tempstr:=SaveDialog1.FileName; sl.SaveToFile(tempstr); end; end;
Delphi-Quellcode:
Funktionieren. Beim ersten steht der richtige Pfad beim Debug in der Variablen,
procedure TForm1.MenuItem5Click(Sender: TObject);
begin if SaveDialog1.Execute then sl.SaveToFile(SaveDialog1.FileName); end; aber das Speichern führt bei beiden trotzdem zu der Meldung: Zitat:
Gruß heiko |
AW: Lazarus: SaveToFile geht nicht
Was ist s1, wo wurde das kreiert?
Beim 2. Beispiel ist tempstr nicht zugewiesen. |
AW: Lazarus: SaveToFile geht nicht
Die nötigen Rechte sind aber vorhanden? Und wozu der temporäre String, sofern er nicht anderweitig noch gebraucht wird?
Delphi-Quellcode:
if SaveDialog1.Execute then
sl.SaveToFile(SaveDialog1.Filename); |
AW: Lazarus: SaveToFile geht nicht
SIGSEGV (segmentation violation) entspricht einer Access Violation (siehe
![]() Bei der Variablen sl (SL) handelt es sich dann vermutlich eine nicht instanziierte TStringList. |
AW: Lazarus: SaveToFile geht nicht
Moin,
Zitat:
Das Füllen der Liste funktioniert. Zitat:
Kann es sein das es irgendein Problem mit den Zeichensätzen zwischen Lazarus/Free Pascal und Windows ist? Gruß HEiko |
AW: Lazarus: SaveToFile geht nicht
Zitat:
Die Fehlermeldung kommt, wenn auf ein Objekt zugegriffen werden soll, welches nicht erstellt wurde. sl ist eine Stringlist (vergleiche andere Posts des TE), welche nicht erstellt wurde (also kein Create). Zeig uns einmal die "FormCreate"-Procedure. |
AW: Lazarus: SaveToFile geht nicht
Moin,
Zitat:
Zitat:
Gruß HEiko |
AW: Lazarus: SaveToFile geht nicht
Zeig mal mehr Code, das wird sonst ein lustiges Rätselraten. Die Stringliste existiert zu diesem Zeitpunkt auf jeden Fall, oder wird sie ggf. vor dem FormDestroy wieder freigegeben?
|
AW: Lazarus: SaveToFile geht nicht
Zitat:
|
AW: Lazarus: SaveToFile geht nicht
Mpoin,
Zitat:
Delphi-Quellcode:
Gruß HEiko
private
{ private declarations } public { public declarations } end; var Form1: TForm1; sl: TStringList; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin sl:= TStringList.Create; end; |
AW: Lazarus: SaveToFile geht nicht
Wo gibst Du die Liste wieder frei?
|
AW: Lazarus: SaveToFile geht nicht
Schmeiss einmal den ganzen Code rüber.
Ich hab es beim mir unter Lazarus getestet und es funktioniert perfekt. Wahrscheinlich löst noch etwas Anderes den Fehler aus. Das ist nur eine Vermutung, denn auch Deine Diagnose der Fehlerstelle beim StringGrid.RowCount ist falsch gewesen. |
AW: Lazarus: SaveToFile geht nicht
Moin,
Zitat:
Kannst Du helfen? @DeddyH: Die Liste gebe ich hier wiedwer frei:
Delphi-Quellcode:
Gruß Heiko
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin sl.free; end; |
AW: Lazarus: SaveToFile geht nicht
Was mich verwirrt ist der Inhalt von
Delphi-Quellcode:
dem dem Schliessen des Dialoges.
SaveDialog1.FileName
Zitat:
|
AW: Lazarus: SaveToFile geht nicht
FormCloseQuery ist die völlig falsche Stelle. Was man im FormCreate erzeugt, gibt man i.A. erst im FormDestroy wieder frei.
|
AW: Lazarus: SaveToFile geht nicht
Moin,
Zitat:
Erst wurde die StringList in einer ButtonClick-Ereignis-Behamndlungsprocedure Erzeugt und nach einem finally wieder freigegeben. Leider habe ich nur einen Teil davon ausgelagert, so das die StringList doch vor dem Speichern ein Free bekam. Fehler gefunden. Danke für Eure schnelle Hilfe. Das Free habe ich ins Destroy verschoben. Gruß HEiko |
AW: [gelöst] Lazarus: SaveToFile geht nicht
Warum heißt das "sl"?
Und wieso ist das global? |
AW: [gelöst] Lazarus: SaveToFile geht nicht
Ausserdem solltest Du noch Deine Schleife aus dem anderen Post von:
Delphi-Quellcode:
auf:
StringGrid1.RowCount:=sl.count+StringGrid1.FixedRows;
for i := 0 to sl.count-1 do begin StringGrid1.Rows[i+1].StrictDelimiter := True; StringGrid1.Rows[i+1].CommaText:=sl.Strings[i]; end;
Delphi-Quellcode:
ändern.
StringGrid1.RowCount := sl.count + StringGrid1.FixedRows;
for i := 0 to sl.count-1 do begin StringGrid1.Rows[i+StringGrid1.FixedRows].StrictDelimiter := True; StringGrid1.Rows[i+StringGrid1.FixedRows].CommaText:=sl.Strings[i]; end; Denn wenn Du im OI die Property FixedRows des Stringgrids änderst, dann würde es bei Deiner Variante wieder zum Fehler kommen. |
AW: [gelöst] Lazarus: SaveToFile geht nicht
Zitat:
Gruß Heiko |
AW: [gelöst] Lazarus: SaveToFile geht nicht
Moin,
Zitat:
Delphi-Quellcode:
irgendwie hier in den Beispielen immer "sl" heißen.
StringListen
Zitat:
Gruß Heiko |
AW: [gelöst] Lazarus: SaveToFile geht nicht
Zitat:
Leg die Defintion von sl in die Typdeklaration der Form.
Delphi-Quellcode:
Dann ist sie in der gesamten Form sichtbar, aber vor unbeabsichtigten Änderungen von ausserhalb geschützt.
TForm1 = class(TForm)
private { private declarations } sl: TStringList; public { public declarations } end; Stell Dir einfach einmal vor, was geschiet, wenn Du diese Form zweimal erstellst, oder wenn irgend ein Komponentenentwickler auf die glorreiche Idee kommt, eine globale Variable mit dem Namen "sl" anzulegen. |
AW: [gelöst] Lazarus: SaveToFile geht nicht
Oder wenn du auf die geniale Idee kommt und irgendwo nochmal eine globale StringListe brachst und denkst "oh, cool, da ist ja schon eine".
Alles was nicht lokal ist, muß einen sprechenden Bezeichner bekommen, der nicht das Datenformat beschreibt, sondern den "Inhalt". Sonst könnte man alle globalen Integer auch i1 bis i3296 benennen. |
AW: [gelöst] Lazarus: SaveToFile geht nicht
Moin,
Zitat:
Gruß Heiko |
AW: [gelöst] Lazarus: SaveToFile geht nicht
Moin,
Zitat:
Danke. Gruß Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 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