Autor Beitrag
Phil24696
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 02.07.13 19:37 
Hallo und :welcome: 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mi 03.07.13 11:17 
Danke für die Antwort und den Willkommensgruß! :D

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94
Erhaltene Danke: 11

Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 04.07.13 00:34 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94
Erhaltene Danke: 11

Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
BeitragVerfasst: Do 04.07.13 01:01 
user profile iconPhil24696 hat folgendes geschrieben Zum zitierten Posting springen:
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]
Gus­to, 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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:


ausblenden 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;

// Schreiben von Daten:
  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;

// Lesen von Daten:

  Dateiname := 'C:\TEMP\Test.Ini';
  
  IniFile := TIniFile.Create(Dateiname);
// der dritte Parameter der Readfunktion ist die Vorgabe, falls der Schlüssel nicht existiert.
  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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Do 04.07.13 08:58 

Für diesen Beitrag haben gedankt: Phil24696
MeierZwoo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94
Erhaltene Danke: 11

Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
BeitragVerfasst: Do 04.07.13 09:00 
user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 04.07.13 13:47 
Danke für die ausführliche Erklärungen meiner Fragen. :zustimm:
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". :lol:

Gut wieder ein neues Wort gelernt "Gusto". 8)

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." :D
MeierZwoo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94
Erhaltene Danke: 11

Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Do 04.07.13 15:17 
user profile iconMeierZwoo hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Do 04.07.13 15:36 
user profile iconbaumina hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Do 04.07.13 15:42 
user profile iconGammatester hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94
Erhaltene Danke: 11

Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
BeitragVerfasst: Do 04.07.13 15:42 
user profile iconbaumina hat folgendes geschrieben Zum zitierten Posting springen:
Warum sollte man keine Rechnungen mit einem Konsolenprogramm erledigen können?

Ich habe nichts davon gesagt, daß ein Consolenprogramm keine Berechnungen durchführen kann. Nur wer nicht weiß, was ein Command ist, weiß wohl auch nicht, daß die Eingabe 30+6 <enter> ein solches ist.
user profile iconbaumina hat folgendes geschrieben Zum zitierten Posting springen:
Was ist CRT?

CRT steht für Routinen für den stdout, den Bildschirm (CRT). Die sind in Delphi ja nur noch per write/writeLn, read/readLn ohne Datei als Ziel/Quellangabe, also stdout/stdin, enthalten.
MeierZwoo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94
Erhaltene Danke: 11

Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
BeitragVerfasst: Do 04.07.13 15:51 
user profile iconGammatester hat folgendes geschrieben Zum zitierten Posting springen:
Hier gibt es eine funktionierende Delphi-CRT Unit.

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.