Autor |
Beitrag |
Phil24696
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 02.07.13 19:32
Hallo Entwickler,
ich hab eine Frage bezüglich Konsolenanwendungen in Delphi 7.
Vorab möchte ich sagen, dass ich bereits bei der Delphi-Hilfe nachgeschaut habe, aber mich nicht ausgekannt habe bzw. nicht wirklich die Fachwörter und Bezeichnungen verstanden habe, deshalb bitte ich euch mir so anfängerfreundlich wie möglich zu antworten.
Ich möchte in Konsolenanwendungen eine Speicherfunktion einbinden, damit ich, wie man es wahrscheinlich ahnen kann, die Anwendung speichern kann und sie an einem Punkt aus fortsetzen kann.
Ich würde mich sehr auf eine schnelle und hilfreiche Antwort freuen.
Mfg Phil24696
|
|
jaenicke
Beiträge: 19277
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 02.07.13 19:37
Hallo und im Forum!
Eine solche Speicherfunktion gibt es so nicht. Du musst die Daten, die du dafür benötigst, selbst in Dateien speichern und beim Start auslesen.
Viel mehr wird dir niemand sagen können ohne ein wenig mehr über deine Anwendung zu wissen.
|
|
Phil24696
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 03.07.13 11:17
Danke für die Antwort und den Willkommensgruß!
Naja prinzipiell will ich diese Speicherfunktion erst bei einem Testprogramm testen.
In diesem möchte ich einen Wert abspeichern und wenn ich das Programm wieder öffne möchte ich diesen Wert wieder haben bzw. sogar an der Stelle, wo ich gespeichert habe, wieder weitermachen.
Es handelt sich hierbei um ein einfaches Rechnerprogramm, sprich addieren, subtrahieren, dividieren, multiplizieren von einer Zahl mit der darauffolgenden Zahl. (Repeat-Schleife bis Eingabe "ende")
Wenn es für dich/euch hilfreich ist, dann werde ich natürlich auch kurz die Konsolenanwendung, soweit ich sie bereits habe, hochladen, bzw. einen Screenshot davon machen.
|
|
baumina
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: Mi 03.07.13 11:51
Du könntest die relevanten Daten vor dem Programmende in eine INI-Datei schreiben (siehe TIniFile) und dort wieder nach dem Programmstart auslesen.
Für diesen Beitrag haben gedankt: Phil24696
|
|
Phil24696
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 03.07.13 18:11
Zitat: |
Du könntest die relevanten Daten vor dem Programmende in eine INI-Datei schreiben (siehe TIniFile) und dort wieder nach dem Programmstart auslesen.
|
Danke für die Antwort, weiß aber nicht das geringste von "INI-Dateien" bzw. "TIniFile".
Ich werde mich darüber mal schlau machen und werde mal diesen Befehl in mein Programm einbinden und sollte ich es mit dieser Hilfe schaffen bzw. nicht schaffen werde ich es euch mitteilen.
Nur so nebenbei: Kann dieser Befehl den Fortschritt des Programmes abspeichern (von dem Punkt aus das Programm starten von dem man speichert) oder nur einen/mehrere eingegebenen/eingegebene Wert/Werte?
|
|
MeierZwoo
Beiträge: 94
Erhaltene Danke: 11
Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
|
Verfasst: Mi 03.07.13 18:53
Was Du wohl möchtest, ist ein "Speicherabbild" des Programmes ähnlich dem Speicherabbild, welches Win zB beim Zuklappen eine Lappies erstellt.
Das geht nunmal nicht, schon deshalb nicht, weil der Speicher beim Neustart komplett anderes aufgebaut ist und Win (oder jedes andere OS) so etwas für einen einzelnen Task nicht zulassen kann.
Du brauchst doch nur den letzten Rechenschritt (oder alle letzten Rechenschritte seit einem "C") als Protokoll zu speichern - wie oben schon gesagt. Ob man das nun in einer *.INI nach den Konventionen der TIni macht oder nach eigenem Gusto, ist dabei völlig egal. Wesentlich ist doch nur, daß Du den Rechner mit den letzten Summen (Summe im Ergebnis-Werk, Summe im Additions-Werk, Konstanten-Speicher ...) neu initialisierst und auch evtl. den letzten Rechenschritt (und alle vorhandenen Speicherwerke) anzeigst.
Wenn Du das Protokoll nicht nur als letzten rechenschritt, sondern komplett als Protokoll aller Rechenschritte mit führst, hast Du zugleich einen "Kontrollstreifen" in der Datei - kann manchmal sehr sinnig sein. Die letzte Zeile wären dann die Neustart-Werte. Dann benötigst Du nur noch ein Command zum Löschen des Protokolls (oder löschst die Protokolldatei manuell).
Für diesen Beitrag haben gedankt: Phil24696
|
|
Phil24696
Hält's aus hier
Beiträge: 11
|
Verfasst: Do 04.07.13 00:34
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Danke für die Antwort, aber leider verstehe ich nicht komplett was damit gemeint ist, daher hab ich einige Fragen:
Da ich mich nicht sonderlich mich Fachwörtern auskenne, könnte mir jemand erklären was mit "eigenem Gusto" und "Command" gemeint ist?
Was ist mit der Aussage "seit einem "C"" gemeint?
So ganz verstehe ich noch nicht was mit der Antwort gemeint ist (Fragen oben), aber ich hoffe, dass sich diese Unklarheit auflöst sobald ich mir das Infomaterial, das wovon ich schon bei meiner letzten Antwort gesprochen habe, angesehen habe und hilfreiche Antworten auf meine Fragen erhalten habe.
|
|
MeierZwoo
Beiträge: 94
Erhaltene Danke: 11
Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
|
Verfasst: Do 04.07.13 01:01
Phil24696 hat folgendes geschrieben : | Da ich mich nicht sonderlich mich Fachwörtern auskenne, könnte mir jemand erklären was mit "eigenem Gusto" und "Command" gemeint ist?
Was ist mit der Aussage "seit einem "C"" gemeint? |
"Eigenes Gusto" ist kein Fachbegriff, sondern Sprichwort/Redensart, meint nach eigenem Ermessen, eigener Meinung, eigener Lust und Laune.
[Zitat Duden]
Gusto, der
Wortart: Substantiv, maskulin
Bedeutung: 1. Neigung, Lust 2. Appetit
Synonyme: Lust, Neigung, Appetit, Bedürfnis, [Ess]lust, [Heiß]hunger; (gehoben) Gelüste, Verlangen; (umgangssprachlich) Hunger, Kohldampf
Beispiele: "das kannst du ganz nach Gusto machen"
[Duden Ende]
Was ein "Command" ist, solltest Du aber wissen wenn Du programmierst, besonders in der Console. "Command" ist die englische Form des deutschen "Kommandos", auch Befehl. Das was man in der Console (Console = englische Form der Konsole) eingibt, um ein Programm (neudeutsch App) zu starten, zu bedienen oder zu beenden.
Und was "C" auf einem Taschenrecner ist, den Du ja gerade programmierst, solltest Du auch wissen. Taste [C] löscht alles, [CE] setzt die aktuelle Eingabe zurück, [MC] den Summenspeicher, ...
Also meint "seit einem "C"" seit der letzten Gesamtlöschung ...
Wär es nicht einfacher, einfach den Windows-Rechner zu benutzen? Oder einen Rechner mit der Win-GUI/API zu programmieren?
Ansonsten FF
Für diesen Beitrag haben gedankt: Phil24696
|
|
Tranx
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Do 04.07.13 07:36
Das mit den Ini-Dateien ist gar nicht so kompliziert. Da gibt es bestimmt eine Hilfe. Prinzipiell sieht das so aus:
Delphi-Quelltext 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:
| var IniFile : TIniFile; Dateiname : string; b : boolean; i : integer; s : string;
Dateiname := 'C:\TEMP\Test.Ini'; s := 'Wert'; i := 4; b := TRUE; IniFile := TIniFile.Create(Dateiname); IniFile.WriteString('Global','StringSchluessel',s); IniFile.WriteInteger('Global','IntSchluessel',i); IniFile.WriteBool('Global','BoolSchluessel',b); IniFile.Free;
Dateiname := 'C:\TEMP\Test.Ini'; IniFile := TIniFile.Create(Dateiname); s := IniFile.ReadString('Global','StringSchluessel',''); i := IniFile.ReadInteger('Global','IntSchluessel',0); b := IniFile.ReadBool('Global','BoolSchluessel',TRUE); IniFile.Free; |
Du kannst auch alle Komponenten und deren Eigenschaften in eine solche Inidatei schreiben, so dass Du diese dann zurückladen kannst. (z.B. Inhalte von Editfeldern (Text-Eigenschaft von TEdit), Checkboxeigenschaften (Checked-Eigenschaften von TCheckBox, Index von Radiogroupboxen (Itemindex-Eigenschaften von TRadioGroup) etc. Auch kannst Du die Komponente wieder aktivieren, die den Focus hat, also für Eingaben aktiviert ist (ActiveControl des TForm). Hier müsstest Du dann den Namen der Componente speichern:
Delphi-Quelltext 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:
| if Form1.ActiveControl <> NIL then WriteString('Formular','Focus',ActiveControl.Name) else WriteString('Formular','Focus','');
beim Laden dann so vorgehen:
var Contr : TControl; ContrName : string; i : integer; CName : string;
ContrName := ReadString('Formular','Focus',''); if ContrName<>'' then begin for i := 0 to Form1.ControlCount-1 do begin Contr := Form1.Controls[i]; if Contr.Name = ContrName then begin Contr.SetFocus; break; end; end; end; |
So kannst Du über ini-Dateien Deine Programmeinstellungen wiederherstellen. Die anderen Eigenschaften kannst Du ja selber mal versuchen zu programmieren.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
Für diesen Beitrag haben gedankt: Phil24696
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Do 04.07.13 08:58
Für diesen Beitrag haben gedankt: Phil24696
|
|
MeierZwoo
Beiträge: 94
Erhaltene Danke: 11
Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
|
Verfasst: Do 04.07.13 09:00
Tranx hat folgendes geschrieben : | Du kannst auch alle Komponenten und deren Eigenschaften in eine solche Inidatei schreiben, so dass Du diese dann zurückladen kannst. (z.B. Inhalte von Editfeldern (Text-Eigenschaft von TEdit), Checkboxeigenschaften (Checked-Eigenschaften von TCheckBox, Index von Radiogroupboxen (Itemindex-Eigenschaften von TRadioGroup) etc. Auch kannst Du die Komponente wieder aktivieren, die den Focus hat, also für Eingaben aktiviert ist (ActiveControl des TForm). |
Es ist ein Konsolenprogramm, das kennt keine Checkboxen etc..
|
|
Tranx
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Do 04.07.13 12:55
Entschuldigung, das habe ich überlesen. Aber außerhalb der Komponenten ist alles andere gültig.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Tranx
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Do 04.07.13 12:56
Entschuldigung, das habe ich überlesen. Aber außerhalb der Komponenten ist alles andere gültig.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Phil24696
Hält's aus hier
Beiträge: 11
|
Verfasst: Do 04.07.13 13:47
Danke für die ausführliche Erklärungen meiner Fragen.
Auf das wäre ich nicht gekommen, das mit dem "C" der Knopf auf einem Taschenrechner gemeint ist. Tja manchmal steht man auf dem Schlauch, ebenso bei "Command".
Gut wieder ein neues Wort gelernt "Gusto".
Natürlich wäre es einfacher einen schon vorhanden Rechner(Taschenrechner) zu verwenden, aber ich möchte es schließlich wissen wie so etwas aufgebaut ist, außerdem möchte ich nicht zwingend einen Taschenrechner programmieren, da es ja wie schon gesagt nur ein Testprogramm ist für mein eigentliches Programm. (Schließlich greift dieses ebenfalls auf mathematische Befehle zurück, daher dachte ich mir ein Testprogramm, dass ähnlich agiert hilft mir leichter in die Materie einzusteigen, anstatt diesen Befehl gleich in mein kompliziertes Programm einzubinden, zudem erstelle ich gerne "Bausteinprogramme" um schnell in einem selbst geschriebenen Programm nachzusehen wie ich es machen kann.)
Zitat: | Oder einen Rechner mit der Win-GUI/API zu programmieren? |
Wie schon mal erwähnt bin ich noch nicht wirklich stark in die Programmierung involviert, daher stellt sich mir die Frage, was eine "Win-GUI/API" ist.
Zitat: | Das mit den Ini-Dateien ist gar nicht so kompliziert. Da gibt es bestimmt eine Hilfe. Prinzipiell sieht das so aus: (...) |
Mhm für mich sehen die Quelltexte die du(Tranx) mir geschickt hast schon ziemlich kompliziert aus.
Heute werde ich mich in mein vorhandenes Infomaterial zu Ini-Dateien und auch in die die Informationen, zu die der Link von WasWeißDennIch führt reinlesen und dann werde ich 2 Sprichwörter eines ehemaligen Mathematiklehrers von mir anwenden:
"Probieren geht über studieren" und "Macht es selbst sonst lernt ihr es nie."
|
|
MeierZwoo
Beiträge: 94
Erhaltene Danke: 11
Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
|
Verfasst: Do 04.07.13 14:51
Bei deinen vielen Rückfragen simpelster Begriffe frage ich mich langsam, ob Du wirklich ein Consolen-Programm schreibst. Dieser Begriff ist nämlich auch festgenagelt und bezeichnet ein Programm, welches von außen guckende Laien auch als "DOS-Programm" bezeichnen würden.
Und da Delphi keine CRT-Unterstützung hat, frage ich mich wo Du eine einigermaßen funzende CRT-Unit her hast - wenn Du schon mit "Command" nichts anfangen konntest. Denn ohne CRT besteht dein ganzes Consolen-Programm ja NUR aus scrollenden Commandozeilen in der Console.
Du solltest wirklichmal einen ScreenShot hochladen ...
|
|
baumina
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: Do 04.07.13 15:17
MeierZwoo hat folgendes geschrieben : | Bei deinen vielen Rückfragen simpelster Begriffe frage ich mich langsam, ob Du wirklich ein Consolen-Programm schreibst. |
Warum sollte man keine Rechnungen mit einem Konsolenprogramm erledigen können?
Eingabe : 40+8 [Enter]
Ausgabe : 48
Eingabe : 5*2
Ausgabe : 10
usw.
Was ist CRT?
|
|
Gammatester
Beiträge: 328
Erhaltene Danke: 101
|
Verfasst: Do 04.07.13 15:36
baumina hat folgendes geschrieben : | Was ist CRT? |
CRT = cathode ray tube = Kathodenstrahlröhre = Bildschirm des Computer-Monitors.
In diesem Zusammenhang ist CRT eine Unit die in Turbopascal eingeführt wurde.
Zitat: | Die Routinen dieser Unit ermöglichen die direkte Kontrolle des Bildschirms (Farben, Textattribute, Fenster), der Tastatur (direkte Abfrage, erweiterte Codes), der Farben und des Tongenerators.
|
Hier gibt es eine funktionierende Delphi-CRT Unit.
|
|
baumina
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: Do 04.07.13 15:42
Gammatester hat folgendes geschrieben : | In diesem Zusammenhang ist CRT eine Unit die in Turbopascal eingeführt wurde |
oh, wohl schon zu lange her, danke.
Zuletzt bearbeitet von baumina am Do 04.07.13 15:43, insgesamt 1-mal bearbeitet
|
|
MeierZwoo
Beiträge: 94
Erhaltene Danke: 11
Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
|
Verfasst: Do 04.07.13 15:42
|
|
MeierZwoo
Beiträge: 94
Erhaltene Danke: 11
Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
|
Verfasst: Do 04.07.13 15:51
Diese CRT-Unit ist im Gegensatz zu der von Ziegler-Soft (kostenpflichtig) leider nicht mit der Turbo-Pascal CRT kompatibel. Sie funktioniert wunderbar, nur beim Umstellen alter TP/BP-Quellcodes muß doch einiges grundsätzlich überarbeitet werden.
|
|
|