![]() |
Save-Dialog
Mich beschäftigt gerade folgendes Problem....
procedure TForm1.Button1Click(Sender: TObject); begin GridzuExcel(stringGrid1, 'Meine Grid Daten', 'f:\daten.xls') end; GridzuExcel ist eine eigene Procedure die auch funzt..... Arbeite ich nach obigem Schema klappt alles wunderbar, nur schaffe ich es einfach nicht einen Save-Dialog mit einzuarbeiten. SaveDialog1.Execute ist mir klar..... aber wie geht's weiter??? Möchte durch den Save-Dialog flexibel sein, was den Speicherort und den Speichernamen angeht. |
Re: Save-Dialog
Hallo publes,
So:
Delphi-Quellcode:
Execute ist eine Funktion, welche True zurueck liefert, falls auf "Speichern" geklickt wurde.
procedure TForm1.Button1Click(Sender: TObject);
begin if SaveDialog1.Execute then GridzuExcel(stringGrid1, 'Meine Grid Daten', SaveDialog1.FileName) end; Greetz alcaeus |
Re: Save-Dialog
So richtig muss ich das jetzt nicht verstehen...oder?????
Bin halt ein Anfänger und gebe das auch zu!!!! |
Re: Save-Dialog
Zitat:
Greetz alcaeus |
Re: Save-Dialog
Hallo!
Ich hatte auch mit saveDialog einige Probleme. Aber mit einem Beispiel hat es dann geklappt! Man macht sich zum Beispiel einen Button "Speichern". Dafür erstellt man ein Ereignis, dass dann auftritt, wenn der Button gedrückt wurde. Anschließend ruft man die Execute-Methode auf - dadurch erhält man das typische Dialog-Feld. Wenn der Anwender seine Eingabe gemacht hat (auf Speichern geklickt hat), gibt die Execute-Methode true zurück. Man kann nun die Datei an dem vorgegebenen Ort speichern (das Feld Filename von SaveDialog).
Delphi-Quellcode:
MfG wZ
if (frmForm1.SaveDialog1.Execute = true) then
begin // hier könnte man selber speichern end; |
Re: Save-Dialog
Super besten Dank............
|
Re: Save-Dialog
Hi,
@ publes: Nächstes mal bitte den Delphi-Code Button verwenden. Also aus: procedure TForm1.Button1Click(Sender: TObject); begin GridzuExcel(stringGrid1, 'Meine Grid Daten', 'f:\daten.xls') end; wird:
Delphi-Quellcode:
Thanks :zwinker:
procedure TForm1.Button1Click(Sender: TObject);
begin GridzuExcel(stringGrid1, 'Meine Grid Daten', 'f:\daten.xls') end; Zitat:
(Dann brauchst du auch keine Klammern.) MfG Marc |
AW: Save-Dialog
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo alle zusammen.
Ich denke hier passt meine Frage ganz gut. Es geht um die Eingabe von integer Werten für Variablen, welche anschließend in einem Textdokument abgespeichert werden. Hier der Quellcode:
Delphi-Quellcode:
Was ich verstehe, warum bei Eingabe von Werten in die Edit-Bereiche, die Werte auf 0 springen.
unit Unit17;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm17 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; procedure Button1Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Edit5Change(Sender: TObject); procedure Edit4Change(Sender: TObject); procedure Edit3Change(Sender: TObject); procedure Edit2Change(Sender: TObject); procedure Edit6Change(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form17: TForm17; ts,Te,ER,RE,th, Di: integer; implementation {$R *.dfm} procedure TForm17.Edit1Change(Sender: TObject); begin Edit1.Text:=IntToStr(ts); //bei Programmstart wird jede Eingabe zu Null, da alle initierten Werte auf 0 gesetzt werden end; procedure TForm17.Edit2Change(Sender: TObject); begin Edit2.Text:=IntToStr(Te); //bei Programmstart wird jede Eingabe zu Null, da alle initierten Werte auf 0 gesetzt werden end; procedure TForm17.Edit3Change(Sender: TObject); begin Edit3.Text:=IntToStr(ER); //bei Programmstart wird jede Eingabe zu Null, da alle initierten Werte auf 0 gesetzt werden end; procedure TForm17.Edit4Change(Sender: TObject); begin Edit4.Text:=IntToStr(RE); //bei Programmstart wird jede Eingabe zu Null, da alle initierten Werte auf 0 gesetzt werden end; procedure TForm17.Edit5Change(Sender: TObject); begin Edit5.Text:=IntToStr(th); //bei Programmstart wird jede Eingabe zu Null, da alle initierten Werte auf 0 gesetzt werden end; procedure TForm17.Edit6Change(Sender: TObject); begin Edit6.Text:=IntToStr(Di); //bei Programmstart wird jede Eingabe zu Null, da alle initierten Werte auf 0 gesetzt werden end; {******** Export Data ********} procedure TForm17.Button1Click(Sender: TObject); var textis : textfile; // -> lokale Initialisierung der zu Speichernden Parameter in textfile (textis.txt existiert im Ornder in dem Programm ist) savepath : string; // -> lokale Initialisierung des Speicherpfades SaveDialog1 :TSaveDialog; // -> ist Save dialog variable begin if SaveDialog1.execute then // -> Darstellung des Dateiöffnungs Dialogs (Quelle www.Delphibasics.co.uk) begin savepath := SaveDialog1.Files[0]; // (?) assignfile(textis,savepath); // Versuch der Öffnung von textist aus Dateipfad savepath rewrite(textis); // -> Einschreiben der Daten in Textdokument textis writeln(textis, 'Time(s) Web Temperature(C) Evap Rate(g/m2s) Residual Solvent(%) Coat Thickness(m) Diffusivity(m2/s) '); write(textis, ts); // Einschreiben des ts write(textis,' '); // Einschreiben des Freizeischen write(textis,Te); // Einschreiben der Te write(textis,' '); // Einschreiben des Freizeischen write(textis,ER); // Einschreiben der ER write(textis,' '); // Einschreiben des Freizeischen write(textis,RE); // Einschreiben des RE write(textis,' '); // Einschreiben des Freizeischen write(textis,th); // Einschreiben der th write(textis,' '); // Einschreiben des Freizeischen write(textis,Di); // Einschreiben des Di write(textis,#13#10); // (?)1* The "#13#10" part represents a carriage-return + line-feed combination. The "#13" is the ASCII equivalent to the CR (carriage return) value; #10 represents LF (line feed). end; closefile(textis); // -> Schließen des Textdokuments end; end. Die Frage ist, warum bei Betätigung des Buttons die folgende Fehlermeldung erscheint? (Siehe Anhang) Vielen Dank für eure Unterstützung! |
AW: Save-Dialog
In welcher Zeile?
|
AW: Save-Dialog
Zitat:
Meldung kommt, wenn Code komplett compiliert wurde und danach Button1Click erfolgt. Grüße. |
AW: Save-Dialog
Dann Setzte dort mal einen Breakpoint und führe dann Zeile für Zeile aus
|
AW: Save-Dialog
Man muss den SaveDialog erst erzeugen, bevor man ihn benutzt.
|
AW: Save-Dialog
Und dieser nicht als Komponente auf der Form liegt.
|
AW: Save-Dialog
Ich sehe ein
Delphi-Quellcode:
in der Button1Click-Procedure, aber kein
SaveDialog1.execute
Delphi-Quellcode:
in der Typdeklaration von "TForm17"
SaveDialog1: TSaveDialog;
EDIT: Schon wieder zu langsam |
AW: Save-Dialog
Markus, selbst wenn er auf der Form läge, würde er nicht angesprochen, sondern die lokale Variable ;)
|
AW: Save-Dialog
Zitat:
|
AW: Save-Dialog
Dann würde aber eine Instanz existieren, was hier scheinbar nicht der Fall ist.
Oha eine lokale Variable |
AW: Save-Dialog
Zitat:
Delphi-Quellcode:
initialisiert, nur es kommt zu folgende Fehlermeldung:
type
SaveDialog1 :TSaveDialog; Unit17.pas(93): W1036 Variable 'SaveDialog1' ist möglicherweise nicht initialisiert worden Danke für eure zahlreiche Hilfe! |
AW: Save-Dialog
Kommentier doch mal die lokale Variable aus.
|
AW: Save-Dialog
Zitat:
Du hast nur eine lokale Variable SaveDialog1, also mußt du entweder mit TSaveDialog.Create dafür eine Instanz erstellen, oder den TOpenDialog auf die Form ziehen/legen (hier muß die lokale Variable natürlich weg). Dann, sind die globalen Variablen sowas von schlecht. Die gehören in das Private der Formklasse und dann sollten sie ordentliche Namen bekommen, damit man "leicht" erkennt was die eigentlich machen. Kommentare sind schoin wichtig, aber "sinnlose" Kommentare behindern nur und man übersieht "wichtige" Kommentare. Vorallem "Einschreiben des ts" und "Einschreiben des Freizeischen" sind extrem kontraproduktiv, denn genau das geschriebene sieht man sofort an den Befehlen. Wenn einer ständig twittert "bin aufgestanten ... hab rechten Schuh angezogen ... hab linken Schuh angezogen ... mach die Tür auf ... geh auf's klo ... mach tür zu ... *kacken* ...." dann liest keiner mehr das "bin gestorben" .... 800 Zeilen später ... zwischen den 100 "bin am sterben"-Zeilen. |
AW: Save-Dialog
Zitat:
|
AW: Save-Dialog
Ok, Danke soweit.
Also habe nun eine einfachere Variante gefunden.
Delphi-Quellcode:
Falls die oberen Dialogausschnitte als nicht brauchbar escheinen, können sehr gerne die Moderatoren die letzteren Abschnitte löschen.
begin
assignfile(textis,'textis.txt') rewrite(textis); ... Danke für eure Hilfe. |
AW: Save-Dialog
Zitat:
Du musst doch nur die Komponente TSaveDialog auf Dein Formular legen und vorher die unnötigen "SaveDialog1"-Variablen entfernen. Poste noch einmal die ganze Unit, damit wir Dir zeigen können, was Du falsch gemacht hast. |
AW: Save-Dialog
Zitat:
Relative Pfade sollte man grundsätzlich niemals verwenden, denn wo soll denn diese Datei denn nun liegen? Und nein, es ist nicht das Programmverzeichnis ... wenn doch, dann ist es nur "zufällig" heute mal so. |
AW: Save-Dialog
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Danke für deinen Hinweis.
Delphi-Quellcode:
Nun kann ich den Speicherort festlegen und Datei auswählen, jedoch kommt es zu einer Fehlermeldung. (Siehe Anhang)
unit Unit17;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;//Dialogs; type TForm17 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; SaveDialog1: TSaveDialog; procedure Button1Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Edit5Change(Sender: TObject); procedure Edit4Change(Sender: TObject); procedure Edit3Change(Sender: TObject); procedure Edit2Change(Sender: TObject); procedure Edit6Change(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form17: TForm17; ts,Te,ER,Re,th, Di: integer; implementation {$R *.dfm} procedure TForm17.Edit1Change(Sender: TObject); begin Edit1.Text:=IntToStr(ts); end; procedure TForm17.Edit2Change(Sender: TObject); begin Edit2.Text:=IntToStr(Te); end; procedure TForm17.Edit3Change(Sender: TObject); begin Edit3.Text:=IntToStr(ER); end; procedure TForm17.Edit4Change(Sender: TObject); begin Edit4.Text:=IntToStr(RE); end; procedure TForm17.Edit5Change(Sender: TObject); begin Edit5.Text:=IntToStr(th); end; procedure TForm17.Edit6Change(Sender: TObject); begin Edit6.Text:=IntToStr(Di); end; {******** Export Data ********} procedure TForm17.Button1Click(Sender: TObject); var textis : textfile; // -> (textis.txt existiert im Ornder in dem Programm ist) savepath : string; begin if SaveDialog1.execute=true then begin //assignfile(textis,'textis.txt'); assignfile(textis,savepath); rewrite(textis); writeln(textis, 'Ts(s) WT(C) ERate(g/m2s) RS(%) CThick(m) Dif(m2/s) '); write(textis, ts); write(textis,' '); write(textis,Te); write(textis,' '); write(textis,ER); write(textis,' '); write(textis,RE); write(textis,' '); write(textis,th); write(textis,' '); write(textis,Di); write(textis,#13#10); end; closefile(textis); end; end. Vielen dank für deine Hilfe. Grüße |
AW: Save-Dialog
Ist dein Internet kaputt oder warum suchst du nicht mal nach der Fehlernummer? Dazu gibt es sogar mind. einen Beitrag hier im Forum.
Und der Debugger würde dir hier auch helfen ... und eine Angabe, an welcher Stelle der Fehler kommt wäre auch sehr nett gewesen. |
AW: Save-Dialog
Ich empfehle dringend, mal mit dem Debugger durch den Code zu steppen (F7 und F8) und dabei ein Auge auf die Inhalte der Variablen zu haben. Dann fällt auch gleich auf, dass die ersten Zeilen der Methode Button1Click so niemals funktionieren können.
MfG Dalai |
AW: Save-Dialog
Nun sagt ihm schon, daß er mit
Delphi-Quellcode:
weiter kommt.
savepath:=savedialog1.filename;
Wie wenn nicht so, soll denn der ausgewählte Dateiname an
Delphi-Quellcode:
weiter gereicht werden?
assign
(multichoice und filenamelist ignorieren wir jetzt mal) übrigens könntest Du das auch etwas verkürzen
Delphi-Quellcode:
oder noch knapper:
textis : textfile; // -> (textis.txt existiert im Ornder in dem Programm ist)
savefile : string; satz : string; begin if SaveDialog1.execute=true then begin savefile:=Savedialog1.Filename; assignfile(textis,savefile); rewrite(textis); writeln(textis, 'Ts(s) WT(C) ERate(g/m2s) RS(%) CThick(m) Dif(m2/s) '); satz:=inttostr(ts)+' '+inttostr(te)+' '+inttostr(er)+' '+inttostr(re)+' '+inttostr(th)+' '+inttostr(di); writeln(textis,satz); closefile(textis); end;
Delphi-Quellcode:
Das ist übrigens kein Grund sich nicht mit dem Debugger auseinander zu setzen.
assignfile(textis,savefile);
rewrite(textis); writeln(textis, 'Ts(s) WT(C) ERate(g/m2s) RS(%) CThick(m) Dif(m2/s) '); writeln(format('%d %d %d %d %d %d',[ts,te,er,re,th,di])); closefile(textis); Gruß K-H |
AW: Save-Dialog
Delphi-Quellcode:
, sonst heult gleich wieder jemand.
writeln(textis, format(...
|
AW: Save-Dialog
:oops:
geschlampt K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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