#

Cobukas - Dokumentation zur Portierung

 
 

 Auswahl von Zeilen aus einer  Liste und Aufruf von Funktion für dieses Objekt
================================================================================
 Die Darstellung der Liste auf dem Bildschirm erfolgt in Teilstücken = Blöcken
................................................................................



Gesamtablauf:
-------------

  Setze      zeilenVorBlock  := ..(Bildschirmzeilen oberhalb der ersten Blockzeile)
  Setze       maxZeilenBild  := ..(Bildschirmzeilen für einen Datenblock)
  Übernimm   maxZeilenListe  :=   (Konstante in Unit cbk01mod.pas)
  Setze      wahlZeileListe  := 1 (kann maximal = anzZeilenListe werden)
  Setze                  x1  := ..(Zeilenbeginn für das Schreiben)

  Ermittle anzBloecke :=  Aufgerundet auf ganze Zahl (anzZeilenListe/maxZeilenBild)

  Schreibe Menü
  Schreibe Funktionstasten


  REPEAT

    Übernimm anzZeilenListe :=  Anzahl der Zeilen/Items in der Datei
    (Übergib an Anzahl der Zeilen/Items in der Datei := anzZeilenListe - immer
    wenn verändert) 

    Leeren       Bildschirm

    Ermittle     aktBlock       (aus wahlZeileListe) {Der aktuelle Block}
    Ermittle     anzZeilenBlock (aus wahlZeileListe) {Anzahl der Zeilen im akt.Block}
    Ermittle     wahlZeileBild  (aus wahlZeileListe) {Die Bildschirmzeile, die der
                                            Auswahlzeile in der Liste entspricht}
                                                  

    Schreibe     aktuellen Block
    Schreibe     Aufforderung 'Wähle ...'

    Aufleuchten  wahlZeileBild

    REPEAT
      Auswahl einer Zeile = Setze wahlZeileListe - Ermittle aktBlock - ->InnerEnde
        oder
      Auswahl einer Funktion  ->Ausführen und hierhin zurück
        oder
      Setze InnerEnde und OuterEnde
    UNTIL InnerEnde oder OuterEnde
  UNTIL OuterEnde

  Übergib anzZeilenListe an ... 

................................................................................


Ermittle anzBloecke :=  Aufgerundet auf ganze Zahl (anzZeilenListe / maxZeilenBild)
--------------------------------------------------------------------------------

  anzBloecke :=  anzZeilenListe  DIV  maxZeilenBild;
  IF (anzZeilenListe  MOD  maxZeilenBild) > 0 THEN inc(anzBloecke);


Leeren Bildschirm
-----------------

  FOR  aktZeileBild := 1 TO maxZeilenBild  DO
    gotoxy(x1, ZeilenVorBlock+aktZeileBild); 
           clrEol;
    oder   write('           ');
  END;


Ermittle aktBlock (aus wahlZeileListe) {Der aktuelle Block}
---------------------------------------------------------

  aktBlock :=  wahlZeileListe  DIV  maxZeilenBild;
  IF (wahlZeileListe  MOD  maxZeilenBild) > 0 THEN inc(aktBlock);



Ermittle  anzZeilenBlock (aus wahlZeileListe) {Anzahl der Zeilen im akt.Block}
--------------------------------------------------------------------------
Beim letzten Block können es weniger Zeilen sein als maxZeilenBild.

  IF aktBlock = anzBloecke THEN
        anzZeilenBlock := anzZeilenListe - ( (aktBlock - 1) * maxZeilenBild )
  ELSE  anzZeilenBlock := maxZeilenBild


Ermittle wahlZeileBild (aus wahlZeileListe) {Die Bildschirmzeile, die der
                                          Auswahlzeile in der Liste entspricht } 
--------------------------------------------------------------------------------

  wahlZeileBild := zeilenVorBlock + wahlZeileListe - ( (aktBlock - 1) * maxZeilenBild );


Schreibe aktuellen Block
------------------------

    FOR  aktZeileBild := 1 TO anzZeilenBlock  DO
      aktZeileList := aktZeileBild + ( (aktBlock - 1) * maxZeilenBild )
      gotoxy(x1, ZeilenVorBlock + aktZeileBild);

      WITH name.arr[wahlZeileListe]^ DO BEGIN
        write(...);
      END;
        oder
      write(name[aktZeileListe])
    END;


Aufleuchten  wahlZeilBild
-------------------------

  TextAttr:=(2*16)+0;
  gotoxy(1, wahlZeileBild);

  WITH name.arr[wahlZeileListe]^ DO BEGIN
    write(...);
  END;
    oder
  write(name[wahlZeileListe]);

  TextAttr:=(0*16)+0;



Anwahl einer Zeile  = Auswahl einer Zeile in der Gesamtliste
------------------------------------------------------------

                #80 : {Pfeil nach unten}
                    BEGIN
                      IF wahlZeileListe = anzZeilenListe THEN    {Weiter nach unten 
                      ELSE inc(wahlZeileListe);        geht es nicht}
                    END;

                #81 : {Seite nach unten}
                    BEGIN
                      IF aktBlock = anzBloecke THEN {Weiter nach unten geht es nicht}
                      ELSE wahlZeileListe := (aktBlock * maxZeilenBild ) + 1;
                    END;


                #79 : {Ende}
                    BEGIN
                      wahlZeileListe := anzZeilenListe;
                    END;

                #72 : {Pfeil nach oben}
                    BEGIN
                      IF wahlZeileListe = 1 THE   {Weiter nach oben geht es nicht}
                      ELSE dec(wahlZeileListe);
                    END;

                #73 : {Seite nach oben}
                    BEGIN
                      IF aktBlock = 1 THEN      {Weiter nach oben geht es nicht}
                      ELSE wahlZeileListe := ((aktBlock - 1) * maxZeilenBild );
                    END;

                #71 : {Pos1}
                    BEGIN
                      wahlZeileListe := 1;
                    END;