ISPF Editor unter VB

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ichduersie.

    ISPF Editor unter VB

    Hallo, ihr LIeben,

    ich hab hier ein Thema, das nicht ganz so einfach zu vermitteln ist. Aber ich versuch es mal, ich hoffe, ihr habt ein bissl Geduld mit mir. :)

    Ich arbeite auf Großrechnern unter zOS . Dort gibt es eine Dialog Umgebung, die ihren Ursprung in den 70er Jahren hat und ISPF heißt (Interactive System Productivity Facility). Die Umgebung ist rein Text orientiert (also keine Grafik). Es gibt 80 Spalten und 24 Zeilen, also genau 1.920 Zeichen In dieser Umgebung gibt es auch einen ISPF Editor ... mit dem kann man Programme und Jobs etc. editieren. Das ist ein Full Screen Editor, d.h. man kann Zeichen auf dem Bildschirm einfach übertippen.

    Was ungewöhnlich ist: Vor jeder Zeile gibt es eine Prefix Area, die zunächst mal eine Nummerierung enthält, wo man aber auch sogenannte Prefix Kommandos eingeben kann, z.b. "C" für Copy und "A" für After. Diese Nummerierung ist aber NICHT Bestandteil der Daten, die wird nur zum Editieren dynamisch generiert und hinterher beim Safe verworfen. Ich habe mal einen Screenshot angehängt.

    Es gab PC Programme, die diesen Editor unter Windows nachgebildet haben, z.B. SPFPC ... leider laufen die unter Windows 7 nicht mehr.

    Weil dieser Editor aber sehr hübsche Features hat, würde ich jetzt gern unter Windows 7 das Dingens nachbauen. Und dabei würde ich jetzt euren Rat brauchen.

    Mir geht es darum, welche Control man dafür am besten verwendet.

    Folgende Eigenschaften werden benötigt:

    1. Die Daten müssen zeilenweise editierbar sein. Es muss einen Einfügemodus- und einen Überschreibungsmodus geben.

    2. Die Position des Text Cursors (Zeile / Spalte) muss angezeigt werden.

    3. Die Pfeiltasten müssen ebenso wie der Maus Zeiger zum Positionieren geeignet sein und natürlich muss die Anzeige der Cursor Position (Zeile / Spalte) automatisch aktualisiert werden.

    Ein gutes Beispiel für diese Funktionalität ist der Editor des VB Visual Studios. So etwa soll das funktionieren!

    Versucht habe ich folgendes:

    1. Eine ListView mit zwei Spalten (Prefix und Text) - das klappt aber nicht, weil man die Daten nicht überschreiben kann.

    2. Eine DataGridView mit zwei Spalten. Das klappt zwar prinzipiell aber es gibt eine Menge von Problemen, die ich nicht lösen kann!

    Wenn man die Daten überschreiben will, geht die Zelle in den "Edit Mode". Da wird die Zelle mit einer dynamisch generiertenTextbox überlagert, die später wieder abgebaut wird. Wenn man jetzt herausfinden will, wo sich der Text Cursor befindet, muss man "Kopfstände" machen (z.B. Event Handler dynamisch definieren). Die Abfrage der Cursor Position ist super hakelig ...und nicht in allen Fällen zu realisieren.

    3. Zwei mulitiline Textboxes (eine für den Prefix, eine für den Text)

    Das führt sofort zu Problemen hinsichtlich der Synchronisation der beiden Controls. Denn wenn ich eine Text Zeile einfüge, muss ich ja auch die Prefix Area entsprechend updaten.

    ....

    Vielleicht überfordere ich das Forum damit. Aber hat jemand eine zündende Idee, wie man diese Sache KONZEPTIONELL am besten angeht ? Mit einem ungünstigen Ansatz kann man sich hier schnell verlieren, wie ich schmerzhaft festgestellt habe ...

    LG
    Peter
    Bilder
    • s 2017-08-11 14-24-536.jpg

      113,63 kB, 1.051×669, 94 mal angesehen

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Peter329“ ()

    @Peter329 Ein paar Gedanken dazu:
    Ne (Rich)TextBox sollte das durchaus können.
    Zunächst mit Courier New als Nicht-Proportionalfont.
    Die Cursorposition hast Du über .SelectionStart.
    Frage: Was passiert bei Deinem Editor, wenn Du vertikal navigierst und die (neue) Zeile ist kürzer?
    • geht er weiter nach obsn / unten, als wären da überall Leerzeichen drin
      oder
    • geht er an das Ende dieser Zeile (deren hartes Ende)?
    Dienen die 1. Spalten der Anzeige der Zeilennummer und die 2. der Editor?
    Es gibt hier im Forum einen Thread, wo sowohl solch 2 RTB gekoppelt sind als auch eine RTB mit Zeilennummernausgabe.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Jau, Courier New ist die richtige Wahl.

    Die vertikale Navigation hängt von einer Einstellung ab: NULLS OFF füllt die Zeilen mit Blanks aufL NULLS ON schneidet die Zeilen ab. Der Einfachheit halber, kann man NULLS OFF unterstellen, weil das die meisten Leute so verwenden. Mit anderen Worten, ist die Zeile zu kurz, springt der Cursor "hart" an das Ende der Zeile. Das entspricht dann (erfreulicherweise) dem Verhalten der (Rich) Text Box.

    Die erste Spalte enthält die (virtuelle) Nummerierung und die zweite Spalte enthält die zu editierenden Daten.

    .SelectionStart hat einige SEHR ungewöhnliche Verhaltensweisen ! Fülle mal .SelectionStart in ein Feld ... und dann bewege mal den den Textcursor mit der linken und rechten Pfeiltaste. Da erlebst du dein blaues Wunder. Das ist verdammt hakelig zu programmieren ! Aber zur Not man kann das hinbekommen ...

    Wie macht man das mit der Koppelung der RTBs ? Das hab ich jetzt nicht gefunden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()

    @Peter329 Weiß jetzt auch nicht, wo das war, aber ich hab noch das Projekt.
    RtbZeilennummern.zip
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!