TextForms Textmode Forms

Zur Vorstellung von Komponenten und Units für Lazarus

TextForms Textmode Forms

Beitragvon Warf » 19. Okt 2017, 16:02 TextForms Textmode Forms

Hey ho,

ich habe vor einiger Zeit mal angefangen eine Textmode-Formular Bibliothek für Konsolenanwendungen zu schreiben. Mit einem Projekt für das ich diese benutzt habe, habe ich sie nun in einen Benutzbaren status gebracht.
Die Idee ist recht simpel, die Felder in einem TTY werden zur Darstellung von Objekten verwendet. Aktuell implementiert sind Checkboxen, ListBoxen, Checklistboxen, Edits, Labels und Buttons.

Ein Beispiel Projekt ist dabei, sollte eigentlich selbsterklärend sein.

Bild:
Bild

Download:
Link

PS: Je nach dem auf was für Terminals es laufen soll muss mit entweder define Col4 (4 Bit Farben, e.g. Windows CMD) Col8 (8 Bit Farben, gängiger Unix Standard) oder Col24(24 bit Farben, xTerm) kompiliert werden (also entweder -dColX oder im lazarus projekteinstellungen). Wird das nicht angegeben wird für Linux Col24 verwendet, für Windows Col4 und sonst Col8. Wenn man möchte das es über SSH unter den meisten Terminals funktioniert sollte man Col8 nehmen, da dies mehr oder weniger der Mindeststandard ist den so gut wie jedes TTY erfüllt.
Warf
 
Beiträge: 609
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon pluto » 20. Okt 2017, 13:38 Re: TextForms Textmode Forms

Läuft das ganze nur in einem Terminal welches unter einem Desktop gestartet wurde oder läuft das auch ohne das man einen Desktop startet?
Verstehe mich nicht falsch, ich denke da gerade an ncurses. Die Handharbung ist ja nicht die einfachste.

Die Grafik sieht jedenfalls recht gut aus für eine Terminal Anwendung.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6476
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 17.1 Rebecca | 
Nach oben

Beitragvon pluto » 20. Okt 2017, 13:53 Re: TextForms Textmode Forms

Wenn ich das Beispiel unter Lazarus 1.9.0 kompiliere kommt in TFCanvas eine Kompiler Fehler Meldung:
Code: Alles auswählen
 
function GetArrow(seq: string): TArrowKey;
begin
  Result := akNone;
  case seq[1] of
    #27:
      if seq.length = 3 then // Hier tfcanvas.pas(107,14) Error: Illegal qualifier
        case seq[3] of
          'A': Result := akUp;
          'B': Result := akDown;
          'C': Result := akRight;
          'D': Result := akLeft;
        end;
  end;
end;
 


Das Problem kommt auch noch weiter in der Unit auf, überall wo auf Length Zugriffen werden soll.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6476
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 17.1 Rebecca | 
Nach oben

Beitragvon siro » 20. Okt 2017, 14:30 Re: TextForms Textmode Forms

In der Windows Umgebnung kann ich beides benutzen:
Code: Alles auswählen
 
  if seq.length = 3 then   // wuste garnicht dass sowas geht .....
  if length(seq) = 3 then   // das war ja die übliche alte Form für Strings unter DOS


evtl. nur entsprechend ändern.

Code: Alles auswählen
  if ord(seq[0]) = 3 then  // sollte auch gehen, solange es sich um Shortstrings handelt 


Siro
Grüße von Siro
"C" verCehnfacht die Entwicklungszeit...
siro
 
Beiträge: 219
Registriert: 23. Aug 2016, 13:25
Wohnort: Berlin
OS, Lazarus, FPC: Windows 7 Windows 8.1 Windows 10 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Warf » 20. Okt 2017, 15:35 Re: TextForms Textmode Forms

pluto hat geschrieben:Läuft das ganze nur in einem Terminal welches unter einem Desktop gestartet wurde oder läuft das auch ohne das man einen Desktop startet?
Verstehe mich nicht falsch, ich denke da gerade an ncurses. Die Handharbung ist ja nicht die einfachste.

Die Grafik sieht jedenfalls recht gut aus für eine Terminal Anwendung.


Kommt drauf an ob das TTY für die ausgäbe Ansi Escape Sequenzen unterstützt. Also bei einem modernen Unix ohne Desktop sollte es mit Col8 auf jeden fall funktionieren, bei Col24 bin ich mir nicht so sicher.

Aber, es kann noch kein UTF-8, das ist mein nächstes Ziel.

pluto hat geschrieben:Wenn ich das Beispiel unter Lazarus 1.9.0 kompiliere kommt in TFCanvas eine Kompiler Fehler Meldung:
Code: Alles auswählen
 
function GetArrow(seq: string): TArrowKey;
begin
  Result := akNone;
  case seq[1] of
    #27:
      if seq.length = 3 then // Hier tfcanvas.pas(107,14) Error: Illegal qualifier
        case seq[3] of
          'A': Result := akUp;
          'B': Result := akDown;
          'C': Result := akRight;
          'D': Result := akLeft;
        end;
  end;
end;
 


Das Problem kommt auch noch weiter in der Unit auf, überall wo auf Length Zugriffen werden soll.


Welche fpc version verwendest du? das ist glaube ich erst seit ppc 3.0.2 drin

siro hat geschrieben:In der Windows Umgebnung kann ich beides benutzen:
Code: Alles auswählen
 
  if seq.length = 3 then   // wuste garnicht dass sowas geht .....
  if length(seq) = 3 then   // das war ja die übliche alte Form für Strings unter DOS


evtl. nur entsprechend ändern.

Code: Alles auswählen
  if ord(seq[0]) = 3 then  // sollte auch gehen, solange es sich um Shortstrings handelt 


Siro


Seit der Einführung von Typehelpern gibt es einige nette Spielereien, die ich seither auch recht viel verwende, z.B. .ToString von Integer oder Floats, oder .SubString von Strings. Vor allem sind diese Hilfsfunktionen für Strings 0 basiert. Das heißt 'abc'.Character[0] ist das selbe wie 'abc'.SubString(0,1) und das ist 'a'. Somit kommt man nicht so sehr mit Arrays und strings durcheinander
Warf
 
Beiträge: 609
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Mathias » 20. Okt 2017, 15:56 Re: TextForms Textmode Forms

ich habe vor einiger Zeit mal angefangen eine Textmode-Formular Bibliothek für Konsolenanwendungen zu schreiben.

Ich will nichts gegen dein Project einwenden, aber als kleiner Hinweis, gibt es dies mit Free Vision fix und fertig.

Ich habe da ein Tutorial in Arbeit. :wink:

viewtopic.php?f=22&t=11063&p=98205&hilit=vision#p98205

Die Grafik sieht jedenfalls recht gut aus für eine Terminal Anwendung.

Ich habe auch immer wieder Freude, wen man sieht, was man alles im Text-Modus machen kann. Unter DOS hatte es richtige Künstler von Programmierern. :shock: :wink:

So was ist sehr gefährlich.
Code: Alles auswählen
function GetArrow(seq: string): TArrowKey;
begin
  Result := akNone;
  case seq[1] of

Wen man GetArrow(''); aufruft, dann knallt es.

Seit der Einführung von Typehelpern gibt es einige nette Spielereien, die ich seither auch recht viel verwende, z.B. .ToString von Integer oder Floats, oder .SubString von Strings.

Dieses Typenhelper finde ich auch genial, ich denke dabei an String.Spitt.

PS: Ich habe gerade ein Project getestet.
Code: Alles auswählen
[Debuggerausnahmen-Nachricht]
 
Projekt example hat Exception-Klasse »ERangeError« ausgelöst mit der Meldung:
Range check error
 In Datei '../tfcanvas.pas' in Zeile 673

Getestet mit Linux 64Bit. FPC 3.0.4
Zuletzt geändert von Mathias am 20. Okt 2017, 16:47, insgesamt 1-mal geändert.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3179
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon pluto » 20. Okt 2017, 16:44 Re: TextForms Textmode Forms

Nun, ich verwende so wie es aussieht: fpc-3.0.0

Ein FPC Update ist immer nicht so einfach.... aber das ist ein anders Thema.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6476
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 17.1 Rebecca | 
Nach oben

Beitragvon pluto » 20. Okt 2017, 16:45 Re: TextForms Textmode Forms

Alles klar, ich update jetzt mein fpc nicht....
und so wie es aussieht geht das nur mit dem neuen FPC.....
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6476
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 17.1 Rebecca | 
Nach oben

Beitragvon Mathias » 20. Okt 2017, 16:50 Re: TextForms Textmode Forms

Alles klar, ich update jetzt mein fpc nicht....
und so wie es aussieht geht das nur mit dem neuen FPC.....

Wen du dies auf den Typenhelper beziehst, kannst du mit FPC 3.0.4 nicht viel falsch machen.
War TypenHelper nicht schon mit 3.0.0 verfügbar ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3179
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon pluto » 20. Okt 2017, 17:04 Re: TextForms Textmode Forms

Es sind leider mehrer Änderungen nötig.... Zum Beispiel sowas hier:
ACanvas.TextOut(Left + 3, Top + i, Text[i].Substring(0, Width - 3));
da meckert der Kompiler wird. Ich denke, sowas kommt noch öfter vor.
Da in dem Projekt leider gebraucht gemacht wird von neuern FPC Versionen,
habe ich auch keine Lust jetzt diese Units anzupassen, dass sie unter einem Ältern FPC läuft.

Das erinnert mich halt sehr Stark an z.b. java oder JavaScript. Das war immer das schöne an Object Pascal, dass sowas nicht ging, früher.
Wurde wohl in Delphi eingeführt und das muss jetzt unbedingt auch übernommen werden in fpc....
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6476
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 17.1 Rebecca | 
Nach oben

Beitragvon Mathias » 20. Okt 2017, 17:09 Re: TextForms Textmode Forms

habe ich auch keine Lust jetzt diese Units anzupassen, dass sie unter einem Ältern FPC läuft.

Ich dachte, FPC sei abwärts kompatibel.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3179
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Warf » 20. Okt 2017, 17:37 Re: TextForms Textmode Forms

Mathias hat geschrieben:
ich habe vor einiger Zeit mal angefangen eine Textmode-Formular Bibliothek für Konsolenanwendungen zu schreiben.

Ich will nichts gegen dein Project einwenden, aber als kleiner Hinweis, gibt es dies mit Free Vision fix und fertig.

Ich habe da ein Tutorial in Arbeit. :wink:

viewtopic.php?f=22&t=11063&p=98205&hilit=vision#p98205

Die Grafik sieht jedenfalls recht gut aus für eine Terminal Anwendung.

Ich habe auch immer wieder Freude, wen man sieht, was man alles im Text-Modus machen kann. Unter DOS hatte es richtige Künstler von Programmierern. :shock: :wink:

So was ist sehr gefährlich.
Code: Alles auswählen
function GetArrow(seq: string): TArrowKey;
begin
  Result := akNone;
  case seq[1] of

Wen man GetArrow(''); aufruft, dann knallt es.

Seit der Einführung von Typehelpern gibt es einige nette Spielereien, die ich seither auch recht viel verwende, z.B. .ToString von Integer oder Floats, oder .SubString von Strings.

Dieses Typenhelper finde ich auch genial, ich denke dabei an String.Spitt.

PS: Ich habe gerade ein Project getestet.
Code: Alles auswählen
[Debuggerausnahmen-Nachricht]
 
Projekt example hat Exception-Klasse »ERangeError« ausgelöst mit der Meldung:
Range check error
 In Datei '../tfcanvas.pas' in Zeile 673

Getestet mit Linux 64Bit. FPC 3.0.4


Es gibt auch schon ncurses, was auch etwa das selbe macht und in wahrscheinlich die umfangreichste Bibliothek dieser Sorte ist. Ich hab das ganze einfach aus spaß gemacht.
Außerdem verwendet mein Projekt echte Klassen und keine Objects :mrgreen:

Und GetArrow werde ich dann bald fixen :D

pluto hat geschrieben:Es sind leider mehrer Änderungen nötig.... Zum Beispiel sowas hier:
ACanvas.TextOut(Left + 3, Top + i, Text[i].Substring(0, Width - 3));
da meckert der Kompiler wird. Ich denke, sowas kommt noch öfter vor.
Da in dem Projekt leider gebraucht gemacht wird von neuern FPC Versionen,
habe ich auch keine Lust jetzt diese Units anzupassen, dass sie unter einem Ältern FPC läuft.

Das erinnert mich halt sehr Stark an z.b. java oder JavaScript. Das war immer das schöne an Object Pascal, dass sowas nicht ging, früher.
Wurde wohl in Delphi eingeführt und das muss jetzt unbedingt auch übernommen werden in fpc....


Also das ganze abwärts zu Porten wäre gar nicht so wenig Aufwand, ich verwende diese Typhelfer relativ häufig.

Ich verstehe nur nicht was du daran so schlecht findest, sie sind deutlich übersichtlicher. Z.B.
Code: Alles auswählen
s := str.SubString(0, 5) +  str.Length.ToString + Str2.Split([';'])[1] + str.SubString(5);
// ohne helper
s := Copy(str, 1, 5) + IntToStr(Length(str)) + Copy(Str2, Pos(';', Str2), Length(str2)) + Copy(Str, 5, Length(str));

Also da hab ich klar einen Favoriten wenn es um Übersichtlichkeit geht und schnelles verstehen vom Code
Warf
 
Beiträge: 609
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon pluto » 20. Okt 2017, 18:55 Re: TextForms Textmode Forms

Also das ganze abwärts zu Porten wäre gar nicht so wenig Aufwand, ich verwende diese Typhelfer relativ häufig.

Klar kann man das jetzt alles anpassen oder man lässt es sein und verwenden den normalen Object Pascal Standard(Wenn es einen gibt)
oder man Updatet das FPC, das war beim letzten mal aber so viel Arbeit und Aufwand....
Ich glaube im Moment verwende ich sogar eine svn version(Ich meine die verwenden noch kein git), ich könnte mal schauen, ob es immer noch so viel aufwand ist.....
Zuletzt geändert von pluto am 20. Okt 2017, 19:20, insgesamt 1-mal geändert.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6476
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 17.1 Rebecca | 
Nach oben

Beitragvon Mathias » 20. Okt 2017, 19:08 Re: TextForms Textmode Forms

Es gibt auch schon ncurses, was auch etwa das selbe macht und in wahrscheinlich die umfangreichste Bibliothek dieser Sorte ist.
Ich dachte immer des sei eine C/C++ Bibliothek, aber da habe ich mich getäuscht, die gibt es auch unter Lazarus, aber nur unter Linux.
Ich hab das ganze einfach aus spaß gemacht.
Das kann ich mit gut vorstellen, sowas ist immer lern reich. Ich beschäftige mich momentan mit FreeVision.
Außerdem verwendet mein Projekt echte Klassen und keine Objects
Das ist bei FreeVision nicht der Fall, das sind es noch Objecte, immerhin stammt dies aus TP-Zeiten und da gab es noch keine Classen. Aber Objecte kann man fast gleich Hand haben wie Classen, sie haben sogar den Vorteil, man kann sie dynamisch und statisch verwenden. Classen sind nur dynamisch.


Klar kann man das jetzt alles anpassen oder man lässt es sein und verwenden den normalen Object Pascal Standard(Wenn es einen gibt)
oder man Updatet das FPC, das war beim letzten mal aber so viel Arbeit und Aufwand....
Ich verstehe dich da nicht ganz, wen man von 3.0.0 auf 3.0.4 Updatet, was muss man da an seinen Programmen ändern ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3179
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon pluto » 20. Okt 2017, 19:22 Re: TextForms Textmode Forms

Ich verstehe dich da nicht ganz, wen man von 3.0.0 auf 3.0.4 Updatet, was muss man da an seinen Programmen ändern ?

Man muss nicht sein Programm ändern, man muss die FPC Version ändern. Das ist aufwendig.
Bei den letzten malen war das so aufwendig und es hat lange gedauert.

Ich habe natürlich beim FPC Wiki nach gesehen und mich an der Anleitung gehalten, aber genau weiß ich das nicht mehr.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6476
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 17.1 Rebecca | 
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Units/Komponenten



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried