[ERLEDIGT] TSaveDialog

Rund um die LCL und andere Komponenten
Benutzeravatar
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

Beitrag von Zvoni »

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

Benutzeravatar
theo
Beiträge: 11367
Registriert: Mo 11. Sep 2006, 19:01

Re: TSaveDialog

Beitrag von theo »

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:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
    Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;    
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?

wp_xyz
Beiträge: 5462
Registriert: Fr 8. Apr 2011, 09:01

Re: TSaveDialog

Beitrag von wp_xyz »

Zvoni hat geschrieben: Mi 17. Jun 2026, 14:43 SaveDialog.Execute, zum Zielordner durchhangeln, Dateinamen vergeben, --> Click auf "Speichern" --> "Datei existiert nicht"
Bist du sicher, dass die Meldung aus dem SaveDialog kommt, oder aus der Prozedur, die hinterher drankommt und die Datei speichern soll?

Benutzeravatar
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

Beitrag von Zvoni »

@Theo:
Sorry, hast Recht
Win11-64Bit
Laz 4.3 64-Bit/FPC3.2.3-64Bit
Screenshot 2026-06-17 152049.png
Screenshot 2026-06-17 152049.png (138.43 KiB) 2247 mal betrachtet
wp_xyz hat geschrieben: Mi 17. Jun 2026, 14:57
Zvoni hat geschrieben: Mi 17. Jun 2026, 14:43 SaveDialog.Execute, zum Zielordner durchhangeln, Dateinamen vergeben, --> Click auf "Speichern" --> "Datei existiert nicht"
Bist du sicher, dass die Meldung aus dem SaveDialog kommt, oder aus der Prozedur, die hinterher drankommt und die Datei speichern soll?
Sehr sicher.
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 TSaveDialog
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

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
Var s:String;
begin
  if SaveDialog1.Execute Then
    s:=SaveDialog1.FileName;

end;         
Ich komme nicht bis zum "s:=...."
Und Ja: Ich habe einen "legalen" Dateinamen vergeben ("Test.txt")
Screenshot 2026-06-17 153750.png
Screenshot 2026-06-17 153750.png (9.77 KiB) 2231 mal betrachtet
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.

Benutzeravatar
theo
Beiträge: 11367
Registriert: Mo 11. Sep 2006, 19:01

Re: TSaveDialog

Beitrag von theo »

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

Beitrag von shokwave »

Ich bekomme es irgendwie auch nicht reproduziert. Neues Projekt - Button und SaveDialog auf die Form - im OnClick des Button folgender Code

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
  begin
    ShowMessage(SaveDialog1.FileName);
  end;
end;
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?
mfg Ingo

wp_xyz
Beiträge: 5462
Registriert: Fr 8. Apr 2011, 09:01

Re: TSaveDialog

Beitrag von wp_xyz »

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.

Benutzeravatar
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

Beitrag von Zvoni »

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

Code: Alles auswählen

If SaveDialog.Execute Then ShowMessage(SaveDialog.FileName);
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"
Screenshot 2026-06-18 095950.png
Screenshot 2026-06-18 095950.png (17.29 KiB) 2051 mal betrachtet
Heisst: Solange ich ausserhalb der Ordner bleibe, welche zum Sharepoint gesynced werden, funktioniert alles
Gibt es einen speziellen Grund warum du noch bei Lazarus 4.3 bist?
Firmen-Laptop mit aktiver Entwicklungsphase gerade.
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;      
Funktioniert.
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.

Benutzeravatar
theo
Beiträge: 11367
Registriert: Mo 11. Sep 2006, 19:01

Re: TSaveDialog

Beitrag von theo »

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

Benutzeravatar
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

Beitrag von Zvoni »

theo 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... :roll:
Stimmt. Sorry, aber da hatte ich ja das OneDrive ja noch gar nicht im Verdacht
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.

Benutzeravatar
theo
Beiträge: 11367
Registriert: Mo 11. Sep 2006, 19:01

Re: TSaveDialog

Beitrag von theo »

Zvoni hat geschrieben: Do 18. Jun 2026, 11:19 Stimmt. Sorry, aber da hatte ich ja das OneDrive ja noch gar nicht im Verdacht
Ist ja OK. :lol:
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. :wink:
Das spart v. a. dir, aber auch uns Zeit und Nerven.

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 454
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: TSaveDialog

Beitrag von Jorg3000 »

Hi!
Was zeigt Folgendes dir bei einem Fehler an?

Code: Alles auswählen

ShowMessage( SysUtils.SysErrorMessage(GetLastOSError) );
Es gibt solche Sachen wie ERROR_CLOUD_FILE_*irgendwas

Benutzeravatar
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

Beitrag von Zvoni »

Jorg3000 hat geschrieben: Do 18. Jun 2026, 12:07 Hi!
Was zeigt Folgendes dir bei einem Fehler an?

Code: Alles auswählen

ShowMessage( SysUtils.SysErrorMessage(GetLastOSError) );
Es gibt solche Sachen wie ERROR_CLOUD_FILE_*irgendwas
Wann und wo soll ich das ausführen?
Die "fehlerhafte" zeile in einen Try/Except-Block, den Fehler auf die Ausnahmeliste setzen, und dann das im Except-Block?

Hier:
Screenshot 2026-06-18 122724.png
Screenshot 2026-06-18 122724.png (5.98 KiB) 1980 mal betrachtet
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.

Benutzeravatar
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

Beitrag von Zvoni »

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

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 454
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: TSaveDialog

Beitrag von Jorg3000 »

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).
Gut zu wissen, dass es das gibt, denn darauf wäre ich auch reingefallen.
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.

Antworten