| Autor |
Beitrag |
steve-allround
      
Beiträge: 59
Linux, Windows
|
Verfasst: Mo 07.11.05 12:17
Hallo,
ich tüfftel schon seit ein paar Tagen an einem Speicher Button.
Ich erkläre mal kurz das Programm.
Habe einen Öffnen Button, der kann unter einen beliebigen Pfad eine Datei lade und dann Edit's ausfüllen.
Dann habe ich noch ein Speichern unter Button, der kann, wie der Name es schon sagt, unter wiederum einen beliebigen Pfad eine Datei speichern.
Nun suche ich eine If oder andere Funktion, womit ich einen Speichern-Button programmieren kann.
Denn: Der User soll, wenn er eine Datei geöffnet hat und Veränderungen vorgenommen hat einfach nur Speichern drücken und nicht immer Speichern unter....
Aber: Wenn der User die Daten neu mit Speichern unter abgespeichert hat, und dann wiederrum Veränderung vornimmt auch nur Speichern klicken.
Habe es schon mit Boolean und and und or probiert...
Warum geht die Funktion nicht?:
if OpenDialog1.FileName or SaveDialog1.FileName > '0' then
P.S.:
zu den Öffnen Button gehört: OpenDialog1.FileName als Pfadangabe
und zu Speichern unter: SaveDialog1.FileName.....
Vielen Dank schonmal....
Moderiert von Christian S.: "Wichtig!!" aus Titel entfernt - jeder findet seine Frage wichtig
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mo 07.11.05 12:22
dann nimm ein
Delphi-Quelltext
und in Daten neu setze es auf True und bei load auf False;
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mo 07.11.05 12:24
Bin mir nicht sicher, ob ich dich richtig verstehe, aber ich glaube, du könntest einfach beim Laden der Datei den Pfad in eine Variable schreiben und wenn in dieser etwas drinsteht (sprich, der User hat etwas geöffnet), dann soll das wieder auf genau den Pfad gespeichert werden.
Delphi-Quelltext 1: 2: 3: 4:
| if Pfad = '' then SaveDialog.execute else deinText.SaveToFile(Pfad); |
(Hab ich jetzt ausm Kopf geschrieben, geht also nur so in die Richtung  )
|
|
steve-allround 
      
Beiträge: 59
Linux, Windows
|
Verfasst: Mo 07.11.05 16:22
mh... ich komme damit nicht klar.
Ich habe euch mal mein Projekt zum anschauen abgelegt.
Es muss also nur noch der Button "Speichern" geschrieben werden. Ich finde dazu kein passenden Code...
Hab hier mal das reingeschrieben, was ich bis jetzt hinbekommen habe... es kommen aber Fehlermeldungen wegen das or und and
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158:
| var F: TextFile; begin if Opendialog1.FileName or SaveDialog1.FileName > '0' then
begin
if Opendialog1.FileName and SaveDialog1.FileName > '0' then begin ShowMessage('Bitte speichern Sie über die Funktion "Speichern unter"! Wählen Sie dort Ihre Datei aus.', 'Fehler bei Dateiauswahl!'); End else if OpenDialog1.FileName > '0'then begin AssignFile(F,OpenDialog1.FileName); Rewrite(F);
WriteLn(F, Edit1.Text); WriteLn(F, Edit2.Text); WriteLn(F, Edit3.Text); WriteLn(F, Edit4.Text); WriteLn(F, Edit5.Text); WriteLn(F, Edit6.Text); WriteLn(F, Edit7.Text); WriteLn(F, Edit8.Text); WriteLn(F, Edit9.Text); WriteLn(F, Edit10.Text); WriteLn(F, Edit11.Text); WriteLn(F, Edit12.Text); WriteLn(F, Edit13.Text); WriteLn(F, Edit14.Text); WriteLn(F, Edit15.Text); WriteLn(F, Edit16.Text); WriteLn(F, Edit17.Text); WriteLn(F, Edit18.Text); WriteLn(F, Edit19.Text); WriteLn(F, Edit20.Text); WriteLn(F, Edit21.Text); WriteLn(F, Edit22.Text); WriteLn(F, Edit23.Text); WriteLn(F, Edit24.Text); WriteLn(F, Edit25.Text); WriteLn(F, Edit26.Text); WriteLn(F, Edit27.Text); WriteLn(F, Edit28.Text); WriteLn(F, Edit29.Text); WriteLn(F, Edit30.Text); WriteLn(F, Edit31.Text); WriteLn(F, Edit32.Text); WriteLn(F, Edit33.Text); WriteLn(F, Edit34.Text); WriteLn(F, Edit35.Text); WriteLn(F, Edit36.Text); WriteLn(F, Edit37.Text); WriteLn(F, Edit38.Text); WriteLn(F, Edit39.Text); WriteLn(F, Edit40.Text); WriteLn(F, Edit41.Text); WriteLn(F, Edit42.Text); WriteLn(F, Edit43.Text); WriteLn(F, Edit44.Text); WriteLn(F, Edit45.Text); WriteLn(F, Edit46.Text); WriteLn(F, Edit47.Text); WriteLn(F, Edit48.Text); WriteLn(F, Edit49.Text); WriteLn(F, Edit50.Text); WriteLn(F, Edit51.Text); WriteLn(F, Edit52.Text); WriteLn(F, Edit54.Text); WriteLn(F, Edit55.Text); WriteLn(F, Edit56.Text); WriteLn(F, Edit57.Text); WriteLn(F, Edit58.Text); WriteLn(F, Edit59.Text); WriteLn(F, Label155.Caption); WriteLn(F, Label156.Caption);
CloseFile(F); Form1.Caption := 'Pumpentool ' + Opendialog1.FileName; END else begin AssignFile(F,SaveDialog1.FileName); Rewrite(F);
WriteLn(F, Edit1.Text); WriteLn(F, Edit2.Text); WriteLn(F, Edit3.Text); WriteLn(F, Edit4.Text); WriteLn(F, Edit5.Text); WriteLn(F, Edit6.Text); WriteLn(F, Edit7.Text); WriteLn(F, Edit8.Text); WriteLn(F, Edit9.Text); WriteLn(F, Edit10.Text); WriteLn(F, Edit11.Text); WriteLn(F, Edit12.Text); WriteLn(F, Edit13.Text); WriteLn(F, Edit14.Text); WriteLn(F, Edit15.Text); WriteLn(F, Edit16.Text); WriteLn(F, Edit17.Text); WriteLn(F, Edit18.Text); WriteLn(F, Edit19.Text); WriteLn(F, Edit20.Text); WriteLn(F, Edit21.Text); WriteLn(F, Edit22.Text); WriteLn(F, Edit23.Text); WriteLn(F, Edit24.Text); WriteLn(F, Edit25.Text); WriteLn(F, Edit26.Text); WriteLn(F, Edit27.Text); WriteLn(F, Edit28.Text); WriteLn(F, Edit29.Text); WriteLn(F, Edit30.Text); WriteLn(F, Edit31.Text); WriteLn(F, Edit32.Text); WriteLn(F, Edit33.Text); WriteLn(F, Edit34.Text); WriteLn(F, Edit35.Text); WriteLn(F, Edit36.Text); WriteLn(F, Edit37.Text); WriteLn(F, Edit38.Text); WriteLn(F, Edit39.Text); WriteLn(F, Edit40.Text); WriteLn(F, Edit41.Text); WriteLn(F, Edit42.Text); WriteLn(F, Edit43.Text); WriteLn(F, Edit44.Text); WriteLn(F, Edit45.Text); WriteLn(F, Edit46.Text); WriteLn(F, Edit47.Text); WriteLn(F, Edit48.Text); WriteLn(F, Edit49.Text); WriteLn(F, Edit50.Text); WriteLn(F, Edit51.Text); WriteLn(F, Edit52.Text); WriteLn(F, Edit54.Text); WriteLn(F, Edit55.Text); WriteLn(F, Edit56.Text); WriteLn(F, Edit57.Text); WriteLn(F, Edit58.Text); WriteLn(F, Edit59.Text); WriteLn(F, Label155.Caption); WriteLn(F, Label156.Caption);
CloseFile(F); Form1.Caption := 'Pumpentool ' + Savedialog1.FileName; end;
END
else ShowMessage('Bitte erst Profil abspeichern, mit "Speichern unter...".'); end; |
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt
|
|
steve-allround 
      
Beiträge: 59
Linux, Windows
|
Verfasst: Mo 07.11.05 16:32
sorry, hier die Datei!
Einloggen, um Attachments anzusehen!
|
|
Kroni
      
Beiträge: 720
Win 98, Win ME, Win2k, Win XP
D3 Pro
|
Verfasst: Mo 07.11.05 16:33
Hmmmmm mal ne andere Sache:
Wegen deinen ganzen Befehlen, die ziemlich gleich aussehen, aber für verschiedene Edits gelten: Nimm ma ne FOR Schleife und den Befehl FindComponent
Ist doch etwas eleganter^^
|
|
steve-allround 
      
Beiträge: 59
Linux, Windows
|
Verfasst: Mo 07.11.05 16:36
ja, aber so ein Profi bin ich noch nicht... Es muss einfach sein. Also ging das nur so bei mir... Ist zwar viel Arbeit, aber es funktioniert...
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mo 07.11.05 16:40
Also, durch deinen geposteten Code blicke ich momentan noch nicht allzu weit durch, fehlt mir auch gerade die Zeit zu. Ich werds mir heute abend zu Hause mal anschauen 
|
|
steve-allround 
      
Beiträge: 59
Linux, Windows
|
Verfasst: Mo 07.11.05 16:50
|
|
Matthias-K
      
Beiträge: 271
Win95, Win98, Win2000, WinXP, Linux
D2, D4 Client/Server, D5 Enterprise, D6 Enterprise, D7 Enterprise, Delphi2005, C/C++ 3.0, C/C ++ 5.0, C/C++ 6.0
|
Verfasst: Mo 07.11.05 16:51
Delphi-Quelltext 1:
| if Opendialog1.FileName or SaveDialog1.FileName > '0' then |
????????????????
was tust du da eigentlich? wenn du scho sowas abfragst, dann bitte so:
Delphi-Quelltext 1:
| if (opendialog1.filename = '') or (savedialog1.filename = '') then |
mal davon abgesehen, das es schwachsinn ist. setz dir ein booleansches flag, wo du dir merkst, ob der user es neu angelegt hat oder ob eine bestehende datei geöffnet wurde. wenn du nicht weist, wie du das umsetzen sollst, melde dich!
matthias
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt
_________________ Ein Spezialist ist ein Mensch, der immer mehr von immer weniger weis, bis er alles von nichts weis!
|
|
steve-allround 
      
Beiträge: 59
Linux, Windows
|
Verfasst: Mo 07.11.05 22:14
genau, dass suche ich, und ich komme damit nicht klar...
Kannst du mir da helfen?
|
|
Marco D.
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: Mo 07.11.05 22:31
Also ich habe das so gelöst:
Es gibt die variable 'current_filepath' vom typ string.
Also der USer lädt die Datei. dann schreibst du den pfad in diese variable. Und wenn der USer auf schließen klickt, dann schreibst du current_filepath:=''. So kannst du immer prüfen, ob der User eine Datei neu erstellt oder eine geöffnete bearbeitet hat.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| if current_filepath='' then begin end else begin end; |
Hoffe mal das ist die richtige Antwort auf deine Frage. Wenn nicht, dann musst mal etwas konkreter werden 
_________________ Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mo 07.11.05 22:37
ich hab mir gerade dein prog runtergeladen... ganz ehrlich, das ist mir zu viel durcheinander, da bräuchte ich zu lange für, mich da durchzuwühlen...
okay...
du hast als erstes nen opendialog und nen button "öffnen".
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var dateiname : string;
if opendialog1.execute then begin dateiname := opendialog1.filename; end; |
dann hast du nen savedialog und nen button "speichern unter".
Delphi-Quelltext 1: 2: 3: 4:
| if savedialog1.execute then begin end; |
so und nun willst du das speichern, ohne in den dialog zu gehen...
Delphi-Quelltext 1: 2: 3: 4:
| if not dateiname = '' then begin end; |
Ob du die Datei jetzt über AssignFile machen kannst, weiß ich nicht genau. ansonsten kannst du aber auch statt dessen eine stringlist erstellen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var liste : TStringlist;
liste := TStringList.Create try finally liste.free; end; |
Hoffe, jetzt kommst du weiter...
|
|
steve-allround 
      
Beiträge: 59
Linux, Windows
|
Verfasst: Mo 07.11.05 22:55
mh... ist erstmal zu viel für mich... muss das erstmal verarbeiten.
Gibt es denn keine einfachere Funktion zum speichern?
Es gibt ja auch Dialoge zum Speichern und öffnen....
So kompliziert darf es doch nicht sein oder?
Ich suche so was ganz einfaches wie unter Word, die Funktion "Speichern" oder "Strg + s"...
Mh... ick verzweifle bald....
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Di 08.11.05 08:45
hab ich dir doch gesagt, wie das geht...
und jetzt noch mal ganz von vorne ... ein DIALOG ist etwas, wo zwei "dinge" mit einander kommunizieren. Sprich, dein PC fragt dich etwas (Wohin soll das nu gespeichert werden?) und du antwortest. Hast du denn bei der Funktion "Speichern (ohne unter)" bei Word jemals nen DIALOG gesehen? Nein, also, wirds wohl keinen dafür geben, sonst wärs ja wieder "Speichern UNTER"...
Also musst du's ohne machen.
Tja und dafür merkst du dir ganz zu Anfang den Pfad, der geöffnet wurde und speicherst das nachher da mit .SaveToFile wieder rein. Mit welchen Möglichkeiten du .SaveToFile anwenden kannst, da musst du mal die Suche quälen. Ich weiß halt nicht, ob's mit AssignFile und so auch geht. Ich weiß, dass es mit nem Memo, oder ner Listbox geht, aber das hilft dir bei deinem Formblatt herzlich wenig weiter, da du da ja nicht noch mehr Komponenten draufpacken kannst (ist ja schon ganz voll  )
Und sooo schwer sind Stringlisten nun wirklich nicht... guck dich mal hier im Forum um, da hab ichs auch gelernt 
|
|
Matthias-K
      
Beiträge: 271
Win95, Win98, Win2000, WinXP, Linux
D2, D4 Client/Server, D5 Enterprise, D6 Enterprise, D7 Enterprise, Delphi2005, C/C++ 3.0, C/C ++ 5.0, C/C++ 6.0
|
Verfasst: Di 08.11.05 10:04
steve-allround hat folgendes geschrieben: | mh... ist erstmal zu viel für mich... muss das erstmal verarbeiten.
Ich suche so was ganz einfaches wie unter Word, die Funktion "Speichern" oder "Strg + s"...
|
also ein klein wenig musst du schon lernen. immerhin willst du ja programmieren! es gibt nicht für alles fertiges zeugs, aber man kann es sich mit ein paar überlegungen selbt herleiten! die lösung wurde dir bereits 3 mal genannt!
und erklärt wurde sie ebenfalls!
ist ja nicht so, das ich dir nicht helfen will, aber ein klein wenig könntest du mitarbeiten!
matthias
Moderiert von raziel: Quote-Tags repariert.
_________________ Ein Spezialist ist ein Mensch, der immer mehr von immer weniger weis, bis er alles von nichts weis!
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 08.11.05 10:55
steve-allround hat folgendes geschrieben: | | mh... ist erstmal zu viel für mich... muss das erstmal verarbeiten. |
Nun, dann teile doch mal das Ergebnis dieser Verarbeitung mit, bzw. wo es beim verständnis hapert...
steve-allround hat folgendes geschrieben: | | So kompliziert darf es doch nicht sein oder? |
Das ist nicht kompliziert, du musst es nur erst lernen. Dass es am Anfang etwas seltsam aussieht glaube ich, aber später wirst du darüber lachen, wenn du es besser kannst...
steve-allround hat folgendes geschrieben: | | Ich suche so was ganz einfaches wie unter Word, die Funktion "Speichern" oder "Strg + s"... |
 Meinst du die war schon von Anfang an da??? Die wurde auch programmiert! Und genau das willst du ja gerade machen...
Und glaube nicht, dass das, was in der Speichern-Funktion von Word programmiert wurde, so einfach ist, wie das, was du hier machen willst!!!
steve-allround hat folgendes geschrieben: | | Mh... ick verzweifle bald.... |
Die Frage ist nur: Woran?
Ich meine, wenn man was nicht versteht, dann fragt man ja schließlich nach! Und sagt nicht einfach: Das verstehe ich nicht, bitte macht es einfacher!
Du hast aber zum geposteten Quelltext oder zu den Hinweisen noch keine einzige Frage gestellt!!! Wenn du da was nicht verstehst, dann frag nach!
Wir helfen gerne, aber wir erwarten auch, dass sich der Fragesteller Mühe gibt und ernsthaft lernen will, wie etwas funktioniert. Und dazu gehört es, Fragen zu stellen, wenn man etwas nicht versteht...
|
|
steve-allround 
      
Beiträge: 59
Linux, Windows
|
Verfasst: Di 08.11.05 11:52
Hy,
sorry, mein Text vorher war nicht so gemeint, war eher nur eine Verzweiflung, dat was nich klappte... (jaenicke).
Ist klar, das ich mich da erstmal reinfitzen muss, und ich bin glücklicher Weise zu einem Ergebnis dank: Matthias-K!
hier die Lösung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| procedure TForm1.BitBtn1Click(Sender: TObject); var F: TextFile; begin if (Opendialog1.FileName > '0') or (SaveDialog1.FileName > '0') then
begin
if (Opendialog1.FileName > '0') and (SaveDialog1.FileName > '0') then begin ShowMessage('Bitte speichern Sie über die Funktion "Speichern unter"! Wählen Sie dort Ihre Datei aus.'); End else if OpenDialog1.FileName > '0' then begin AssignFile(F,OpenDialog1.FileName); Rewrite(F);
WriteLn(F, Edit1.Text); CloseFile(F); Form1.Caption := 'Pumpentool ' + Opendialog1.FileName; END else if SaveDialog1.FileName > '0' then begin AssignFile(F,SaveDialog1.FileName); Rewrite(F);
WriteLn(F, Edit1.Text); CloseFile(F); Form1.Caption := 'Pumpentool ' + Savedialog1.FileName; END else ShowMessage('Bitte öffnen Sie zuerst eine Datei oder speichern Ihre eingegebenen Daten mit "Speichern unter..." ab!')
END
else ShowMessage('Bitte erst Profil abspeichern, mit "Speichern unter...".'); end; |
Klappt wunderbar....
P.S. Das ist ja ein ganz schönes Ding, das so ein "eigentlicher" Button --> Speichern so kompliziert sein kann....
Vielen Dank nochmal...
Moderiert von Gausi: Code- durch Delphi-Tags ersetzt
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 08.11.05 12:54
Na dann ist ja gut, wenn alles klappt...
Nur noch eine Anmerkung (die auch weiter oben schon angesprochen wurde):
Wenn du testen möchtest, ob ein String (in diesem Fall OpenDialog1.FileName bzw. SaveDialog1.FileName) leer ist oder nicht, dann solltest du lieber
Delphi-Quelltext 1:
| (OpenDialog1.FileName = '') |
(Ist der FileName leer, d.h. gleich dem leeren String?)
bzw.
(OpenDialog1.FileName <> '') //Was passiert hier mit den Delphi-Tags???
(Ist der FileName nicht leer, d.h. ungleich dem leeren String?)
benutzen!
In diesem Fall geht es auch so, aber sauber programmiert ist das nicht! Und es kann Fälle geben, in denen das nicht klappt!
Ich weiß: Am Anfang denkt man immer, das mach ich ja später dann besser, aber leider ist es so nicht...
Was man sich am Anfang angewöhnt, behält man meist auch bei... 
|
|
steve-allround 
      
Beiträge: 59
Linux, Windows
|
Verfasst: Do 10.11.05 11:51
Ja, das mit dem sauberen programmieren weis ich. Ich ertappe mich manschmal selber.
In dem Moment, wo man noch drinsteht beim programmieren, kennt man sich in den Chaos aus, aber wenn ich nach einer langen Zeit wieder mal nachschauen will, seh ick nich mehr durch.
Aber ich habe leider das richtige Programmieren nie gelernt... und bin leider so ein Chaot.... Vielleicht änder ich mich mal, wenn ich noch größere Programme schreiben will....
|
|
|