[ERLEDIGT] TSaveDialog
- Zvoni
- Beiträge: 708
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
[ERLEDIGT] TSaveDialog
OK, das treibt mich jetzt an die Kante.....
Wieso weigert sich TSaveDialog mir den kompletten FileName zurückzugeben mit der Meldung "Die Datei existiert nicht"???
SaveDialog.Execute, zum Zielordner durchhangeln, Dateinamen vergeben, --> Click auf "Speichern" --> "Datei existiert nicht"
Natürlich existiert die Datei NOCH nicht, da ich sie ja abspeichern will unter einem bestimmten Namen....
Vom Prinzip will ich ein SaveAs machen
Und nein.... ofFileMustExist ist nicht gesetzt, ofCreatePrompt hingegen schon
Wieso weigert sich TSaveDialog mir den kompletten FileName zurückzugeben mit der Meldung "Die Datei existiert nicht"???
SaveDialog.Execute, zum Zielordner durchhangeln, Dateinamen vergeben, --> Click auf "Speichern" --> "Datei existiert nicht"
Natürlich existiert die Datei NOCH nicht, da ich sie ja abspeichern will unter einem bestimmten Namen....
Vom Prinzip will ich ein SaveAs machen
Und nein.... ofFileMustExist ist nicht gesetzt, ofCreatePrompt hingegen schon
Zuletzt geändert von Zvoni am Do 18. Jun 2026, 12:32, insgesamt 1-mal geändert.
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: TSaveDialog
Gewöhnt euch doch bitte an, bei solchen Merkwürdigkeiten die Lazarus Version und das Betriebssystem etc. mit anzugeben.
Das kann ja eigentlich nicht sein.
Hier geht das:
Lazarus 4.99 (rev main_4_99-4662-gc1f32e679b) FPC 3.2.2 x86_64-linux-gtk3
Betriebssystem: openSUSE Tumbleweed-Slowroll 20260504
Grafik-Plattform: X11
Vielleicht ein Problem mit den Schreibrechten?
Das kann ja eigentlich nicht sein.
Hier geht das:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end; Betriebssystem: openSUSE Tumbleweed-Slowroll 20260504
Grafik-Plattform: X11
Vielleicht ein Problem mit den Schreibrechten?
Re: TSaveDialog
Bist du sicher, dass die Meldung aus dem SaveDialog kommt, oder aus der Prozedur, die hinterher drankommt und die Datei speichern soll?Zvoni hat geschrieben: Mi 17. Jun 2026, 14:43 SaveDialog.Execute, zum Zielordner durchhangeln, Dateinamen vergeben, --> Click auf "Speichern" --> "Datei existiert nicht"
- Zvoni
- Beiträge: 708
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: TSaveDialog
@Theo:
Sorry, hast Recht
Win11-64Bit
Laz 4.3 64-Bit/FPC3.2.3-64Bit
Hab nen Breakpoint auf der Execute-Zeile, wobei meine Execute so aussieht
Meldung kommt, bevor ich auf der nächsten Zeile bin.
Mir kommts vor, als ob der TSaveDialog denkt, er wäre ein TOpenFile-Dialog
EDIT: Und gerade eben einfach mal ein jungfräuliches TSaveDialog mit Defaultwerten auf die Form geworfen, angesteuert ("Execute") --> Gleiche Meldung
EDIT2: Yepp, irgendwas ist faul.
Jungfräuliches Projekt, ein TSaveDialog, 1 TButton,
im ButtonClick
Ich komme nicht bis zum "s:=...."
Und Ja: Ich habe einen "legalen" Dateinamen vergeben ("Test.txt")
Sorry, hast Recht
Win11-64Bit
Laz 4.3 64-Bit/FPC3.2.3-64Bit
Sehr sicher.wp_xyz hat geschrieben: Mi 17. Jun 2026, 14:57Bist du sicher, dass die Meldung aus dem SaveDialog kommt, oder aus der Prozedur, die hinterher drankommt und die Datei speichern soll?Zvoni hat geschrieben: Mi 17. Jun 2026, 14:43 SaveDialog.Execute, zum Zielordner durchhangeln, Dateinamen vergeben, --> Click auf "Speichern" --> "Datei existiert nicht"
Hab nen Breakpoint auf der Execute-Zeile, wobei meine Execute so aussieht
Code: Alles auswählen
Var c:Boolean;
//.......
c:=sdgExport.Execute; //sdgExport ist mein TSaveDialogMir kommts vor, als ob der TSaveDialog denkt, er wäre ein TOpenFile-Dialog
EDIT: Und gerade eben einfach mal ein jungfräuliches TSaveDialog mit Defaultwerten auf die Form geworfen, angesteuert ("Execute") --> Gleiche Meldung
EDIT2: Yepp, irgendwas ist faul.
Jungfräuliches Projekt, ein TSaveDialog, 1 TButton,
im ButtonClick
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
Var s:String;
begin
if SaveDialog1.Execute Then
s:=SaveDialog1.FileName;
end; Und Ja: Ich habe einen "legalen" Dateinamen vergeben ("Test.txt")
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: TSaveDialog
Bin nicht auf Windows, aber hast du schon mal bei Options "ofNoValidate=true" probiert?
-
shokwave
- Beiträge: 488
- Registriert: Do 15. Nov 2007, 16:58
- OS, Lazarus, FPC: Win11/Ubuntu Budgie/macOS (Laz 4.x FPC 3.2.x)
- CPU-Target: i386, x64, arm64
- Wohnort: Gera
Re: TSaveDialog
Ich bekomme es irgendwie auch nicht reproduziert. Neues Projekt - Button und SaveDialog auf die Form - im OnClick des Button folgender Code
Habe es auf einem aktuellen Win11(25H2) Home mit Lazarus 4.6/fpc 3.2.2 und Lazarus 4.9/fpc 3.2.3 probiert.
Ich habe auch ein Verzeichnis mit Umlauten und Leerzeichen probiert. Alles klein Problem.
Gibt es einen speziellen Grund warum du noch bei Lazarus 4.3 bist?
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
ShowMessage(SaveDialog1.FileName);
end;
end;
Ich habe auch ein Verzeichnis mit Umlauten und Leerzeichen probiert. Alles klein Problem.
Gibt es einen speziellen Grund warum du noch bei Lazarus 4.3 bist?
mfg Ingo
Re: TSaveDialog
Die selbe Beobachtung wie bei shokwave: Neues Projekt, TSaveDialog, TButton mit deinem Code aus dem Beitrag weiter oben, compilieren mit Laz/main 32-bit und auch 64-bit IDE auf Windows 11 --> kein Problem. Genauso wie mit Laz 4.2 und 4.4 jeweils 64 bit. (Alle FPCs sind 3.2.2)
Vielleicht mal das Profilverzeichnis umbenennen, so dass Lazarus mit Default-Parametern neu startet. Dann die IDE komplett neu bauen. -- das wäre mein Standardvorgehen bei mysteriösen Beobachtungen. Ach ja noch: Unbedingt im Virenscanner das Verzeichnis mit Lazarus, FPC, und den Projekten auf die Ignorier-Liste setzen.
Vielleicht mal das Profilverzeichnis umbenennen, so dass Lazarus mit Default-Parametern neu startet. Dann die IDE komplett neu bauen. -- das wäre mein Standardvorgehen bei mysteriösen Beobachtungen. Ach ja noch: Unbedingt im Virenscanner das Verzeichnis mit Lazarus, FPC, und den Projekten auf die Ignorier-Liste setzen.
- Zvoni
- Beiträge: 708
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: TSaveDialog
Ich fall vom Glauben ab: Es ist das OneDrive!!!
Hab mich mal auf Verdacht im Dialog nach c:\Temp gehangelt, und da kommt keine Fehlermeldung.
Dafür ist SaveDialog.FileName leer.
Was denn jetzt??!?!?!?!?
EDIT: Ok. Jungfrau-Projekt: Form, Button, SaveDialog
Im Button-Click
Wähle ich einen Ordner, der unterhalb meines OneDrives ist (Bsp. "Meine Dokumente") kommt gezeigte Fehlermeldung
Wähle ich einen Ordner, der oberhalb/ausserhalb liegt (c:\Temp, c:\Users\xxx.xxx\OneDrive - MeineFirma) bekomme ich den Dateinamen im ShowMessage gezeigt
Hmmm.....klingt entweder nach Zugriffsrechten (was ich mir nicht vorstellen kann), oder dass die Pfade zerknüllt werden, und dann eben nur Mist ankommt.
Wenn ich jetzt daran denke, dass wenn ich ein Excel-Makro in einem meiner OneDrive-Ordner den Pfadnamen der Arbeitsmappe abfrage, und da immer diese
"https://sharepoint...blablba"-Notation erhalte, beginne ich einen Verdacht zu bekommen.....
EDIT: OK, das mit FileName ist leer --> bin ein Trottel. Hatte übersehen, dass ich ein zweites (Test)-TSaveDialog auf der gleichen Form hatte mit ähnlichem Name...
und hab natürlich prompt das falsche abgefragt......
EDIT2: Fortschritt.
hab mal ofNoTestFileCreate in den Optionen aktiviert, und siehe da: Die Meldung ist weg.
Reiche ich aber den zurückgegebenen Dateinamen (kompletter Pfad) an meine Speicher-Routine, knallts mit "EFCreateError"
Heisst: Solange ich ausserhalb der Ordner bleibe, welche zum Sharepoint gesynced werden, funktioniert alles
Ganz ehrlich?
hab Schiss, dass es mir die IDE zerlegt, und ich dem Cheffe sagen muss "ähhh....Update hat alles zerlegt"
btw: Ja, ist per FPCUpDeluxe installiert
EDIT
Ok, hab mal minimalen Code ausprobiert:
Form, button
Funktioniert.
Wird immer skurriler.....
Hab mich mal auf Verdacht im Dialog nach c:\Temp gehangelt, und da kommt keine Fehlermeldung.
Dafür ist SaveDialog.FileName leer.
Was denn jetzt??!?!?!?!?
EDIT: Ok. Jungfrau-Projekt: Form, Button, SaveDialog
Im Button-Click
Code: Alles auswählen
If SaveDialog.Execute Then ShowMessage(SaveDialog.FileName);Wähle ich einen Ordner, der oberhalb/ausserhalb liegt (c:\Temp, c:\Users\xxx.xxx\OneDrive - MeineFirma) bekomme ich den Dateinamen im ShowMessage gezeigt
Hmmm.....klingt entweder nach Zugriffsrechten (was ich mir nicht vorstellen kann), oder dass die Pfade zerknüllt werden, und dann eben nur Mist ankommt.
Wenn ich jetzt daran denke, dass wenn ich ein Excel-Makro in einem meiner OneDrive-Ordner den Pfadnamen der Arbeitsmappe abfrage, und da immer diese
"https://sharepoint...blablba"-Notation erhalte, beginne ich einen Verdacht zu bekommen.....
EDIT: OK, das mit FileName ist leer --> bin ein Trottel. Hatte übersehen, dass ich ein zweites (Test)-TSaveDialog auf der gleichen Form hatte mit ähnlichem Name...
und hab natürlich prompt das falsche abgefragt......
EDIT2: Fortschritt.
hab mal ofNoTestFileCreate in den Optionen aktiviert, und siehe da: Die Meldung ist weg.
Reiche ich aber den zurückgegebenen Dateinamen (kompletter Pfad) an meine Speicher-Routine, knallts mit "EFCreateError"
Heisst: Solange ich ausserhalb der Ordner bleibe, welche zum Sharepoint gesynced werden, funktioniert alles
Firmen-Laptop mit aktiver Entwicklungsphase gerade.Gibt es einen speziellen Grund warum du noch bei Lazarus 4.3 bist?
Ganz ehrlich?
hab Schiss, dass es mir die IDE zerlegt, und ich dem Cheffe sagen muss "ähhh....Update hat alles zerlegt"
btw: Ja, ist per FPCUpDeluxe installiert
EDIT
Ok, hab mal minimalen Code ausprobiert:
Form, button
Code: Alles auswählen
Uses LCLIntf;
//.....
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDocument('C:\Users\zvoni\OneDrive - FirmaGroup\Dokumente\5009.xlsx');
end; Wird immer skurriler.....
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: TSaveDialog
Keine Ahnung, ich frage mich nur, warum du das mit dem OneDrive nicht im ersten Beitrag erwähnt hast.
Du lässt uns im Nebel stochern...
Du lässt uns im Nebel stochern...
- Zvoni
- Beiträge: 708
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: TSaveDialog
Stimmt. Sorry, aber da hatte ich ja das OneDrive ja noch gar nicht im Verdachttheo hat geschrieben: Do 18. Jun 2026, 11:12 Keine Ahnung, ich frage mich nur, warum du das mit dem OneDrive nicht im ersten Beitrag erwähnt hast.
Du lässt uns im Nebel stochern...![]()
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: TSaveDialog
Ist ja OK.Zvoni hat geschrieben: Do 18. Jun 2026, 11:19 Stimmt. Sorry, aber da hatte ich ja das OneDrive ja noch gar nicht im Verdacht
Trotzdem: Bei solchen Beobachtungen, die eigentlich nicht allgemeingültig sein können, muss man sich als Erstes überlegen: "Was ist in meinem Fall anders?"
Das hat viel mit dem "etc." in meiner ersten Antwort zu tun.
Das spart v. a. dir, aber auch uns Zeit und Nerven.
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 454
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: TSaveDialog
Hi!
Was zeigt Folgendes dir bei einem Fehler an?
Es gibt solche Sachen wie ERROR_CLOUD_FILE_*irgendwas
Was zeigt Folgendes dir bei einem Fehler an?
Code: Alles auswählen
ShowMessage( SysUtils.SysErrorMessage(GetLastOSError) );- Zvoni
- Beiträge: 708
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: TSaveDialog
Wann und wo soll ich das ausführen?Jorg3000 hat geschrieben: Do 18. Jun 2026, 12:07 Hi!
Was zeigt Folgendes dir bei einem Fehler an?
Es gibt solche Sachen wie ERROR_CLOUD_FILE_*irgendwasCode: Alles auswählen
ShowMessage( SysUtils.SysErrorMessage(GetLastOSError) );
Die "fehlerhafte" zeile in einen Try/Except-Block, den Fehler auf die Ausnahmeliste setzen, und dann das im Except-Block?
Hier:
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- Zvoni
- Beiträge: 708
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: TSaveDialog
OK, ich habs gefunden.
Es ist der Windows Defender
Im Ransomware-Schutz sind genau die 3 Ordner geschützt die ich getestet hatte (Dokumente, Bilder, Desktop).
Ich sehe es sogar im Zugriffs-Verlauf
Es ist der Windows Defender
Im Ransomware-Schutz sind genau die 3 Ordner geschützt die ich getestet hatte (Dokumente, Bilder, Desktop).
Ich sehe es sogar im Zugriffs-Verlauf
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 454
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: TSaveDialog
Gut zu wissen, dass es das gibt, denn darauf wäre ich auch reingefallen.Zvoni hat geschrieben: Do 18. Jun 2026, 12:31 Im Ransomware-Schutz sind genau die 3 Ordner geschützt die ich getestet hatte (Dokumente, Bilder, Desktop).
Wie ich gerade gelesen habe, ist der Ransomware-Schutz standardmäßig ausgeschaltet. Wenn er eingeschaltet ist, soll er die üblichen Benutzerordner vor z.B. ungewollter Verschlüsselung schützen.
Es sind dann zum Schreiben auf diese Ordner nur Programme zugelassen, die explizit als "zulässige App" in den Defender-Einstellungen eingetragen sind.