1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Professionelle MS-DOS Anwendungen erstellen

Discussion in 'Programmieren' started by schwarzm, Mar 29, 2005.

Thread Status:
Not open for further replies.
  1. schwarzm

    schwarzm Viertel Gigabyte

    Sag mal Michi0815,
    hast du TurboPascal studiert oder was?!!!
    Du kannst ja alles was ich frage, schreibst in kürzester Zeit ganze Programme.
    Was kannst du denn sonst noch so?
     
  2. Michi0815

    Michi0815 Guest

    studiert nicht gerade, aber im informatikunterricht im gymnasium haben wir fast nur damit "gespielt". ist zwar schon etwa her, aber die grundlagen verlernt man nicht und pascal ist eine erfrischend einfache sprache. kann man fast so flüssig schreiben wie einen aufsatz :)

    btw: wenn du in dos oberflächen machen willst, wirst du wahrscheinlich recht bald so etwas brauchen: Ascii Tabelle damit kann man die netten rahmen um die fenster zeichen
     
  3. kalweit

    kalweit Hüter der Glaskugel

     
  4. Michi0815

    Michi0815 Guest

    natürlich ist das nur oberfläche - mehr war ja auch nicht gefragt. die fensterstruktur etc ist feinarbeit und die überlasse ich gerne den guidos :D
    ausserdem hätte ich da etwas länger als 5 minuten gebraucht...

    wenn du ein paar fingerübungen machen willst: viel spass, ich halte dich nicht auf :spitze:

    edit: so, hier kommt die version mit fensterrahmen :p
    wie man sieht, wird der code nicht schöner...
    Code:
    Program Test2;
    uses crt;
    
    Procedure Fenster(x, y, l, h: byte; tc, bc, rc1, rc2: byte);
         Procedure PutChar(c: char; x, y: byte; tc, bc: byte);
         var BytePos: word;
         begin
              BytePos:=2*((y-1)*80 + x-1);
              Mem[$B800: BytePos]:=ord(c);
              Mem[$B800: BytePos+1]:=bc shl 4 + tc;
    
         end;
    var lv: byte;
    begin
         if (l>2) and (h>2) then
         begin
              PutChar('Ú', x,     y,     rc1, bc);
              PutChar('À', x,     y+h-1, rc1, bc);
              PutChar('¿', x+l-1, y,     rc2, bc);
              PutChar('Ù', x+l-1, y+h-1, rc2, bc);
              for lv:=2 to l-1 do
              begin
                   PutChar('Ä', x+lv-1, y,     rc1, bc);
                   PutChar('Ä', x+lv-1, y+h-1, rc2, bc);
              end;
              for lv:=2 to h-1 do
              begin
                   PutChar('³', x,     y+lv-1, rc1, bc);
                   PutChar('³', x+l-1, y+lv-1, rc2, bc);
              end;
              window(x+1, y+1, x+l-2, y+h-2);
              TextColor(tc);
              TextBackGround(bc);
              clrscr;
         end else begin
              window(x, y, x+l-1, y+h-1);
              TextColor(tc);
              TextBackGround(bc);
              clrscr;
         end;
    end;
    
    begin
         TextMode(Co80);
         Fenster(1, 1, 80, 2, black, cyan, 0, 0);
         Write('BlaBlaBla');
         Fenster(1, 3, 80, 22, white, blue, lightblue, black);
         Writeln(' ->Nummer    -> Name/Aresse');
         writeln(' ÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄ');
         writeln('     4711 ³ blablabla');
         Fenster(1, 25, 80, 1, lightgray, red, 0, 0);
         write('->³ F2-Re.³F3-Lfs');
         Fenster(40, 3, 35, 16, white, magenta, lightmagenta, darkgray);
         Writeln('A..Kundendaten');
         writeln('B..Transaktionen');
         readln;
    end.
    
     
  5. schwarzm

    schwarzm Viertel Gigabyte

    Moin erst mal,

    bei dem Code oben sind beim kompilieren 3 Fehler aufgetreten. Bin ich jetzt zu dumm einen Code zu kopieren oder was???
     
  6. schwarzm

    schwarzm Viertel Gigabyte

    Nochwas:
    [​IMG]

    Kann man solche Anwendungen auch erstellen? Wo man jetzt z.B. mit den Pfeiltasten hoch und runter gehen kann im Prog.
     
  7. Michi0815

    Michi0815 Guest

    wo sind denn die fehler bzw was hat der compiler zu meckern?
    nicht unbedingt :D

    der code ist tatsächlich nicht sonderlich "schön" (direkter zugriff auf den bildschirmspeicher!) was natürlich nur bei nativen dos-proggys klappt. ein windows-konsolenprogramm darf das nicht.

    das ist kein problem, erforder aber etwas "programmlogik" im hintergrund (textbuffer, etwas intelligentere "fenster", etc)
     
  8. schwarzm

    schwarzm Viertel Gigabyte

    Line 9/11 Error: Identifier not found MEM
    Line 9/15 Error: Illegal qualifier
    Line 9/15 Fatal: Syntax error,

    Das schmeißt mir der Compiler an den Kopf.

    Aber das andere Prog, das dauert wohl länger sowas herzustellen, oder?
     
  9. Michi0815

    Michi0815 Guest

    dachte ich mir doch, das Mem[x: y] ärger macht :p

    das ist eine eher gefährliche art und weise auf den arbeitspeicher zuzugreifen und daher ist es offenbar bei deinem compiler nicht implementiert. unter tp 5.5 (darunter hab ich das proggy geschreiben) funktioniert es noch.

    wenn du die PutChar gegen folgenden code austauscht sollte es mit jedem compiler klappen (bis auf einen kleinen haken...)
    Code:
    Procedure PutChar(c: char; x, y: byte; tc, bc: byte);
    begin
         Window(1, 1, 80, 25);
         gotoxy(x, y);
         TextColor(tc);
         TextBackGround(bc);
         write(c);
    end;
    
     
  10. schwarzm

    schwarzm Viertel Gigabyte

    Irgendwie sagt mir mein Compiler wieder die selbe Fehlermeldung!
    Was kann es denn diesmal sein?

    Aber nochwas:
    Könntest du mir vielleicht einen Code schreiben mit den Programm wo ich oben einen Screenshot gemacht habe. Ich brauch ja nur die Funktion mit den Pfeiltasten. Der Rest ist mir egal! :)
     
  11. Michi0815

    Michi0815 Guest

    du musst schon die komplette Procedure auswechseln ;)

    @pfeitastengeschichte: das dauert vielleicht etwas länger; was zahlst du pro stunde?
     
  12. schwarzm

    schwarzm Viertel Gigabyte

    Das war mich schon irgendwie klar ;)
    Wie lange würde das denn dauern? Ist das so kompliziert?
     
  13. Michi0815

    Michi0815 Guest

    wie lange das dauert, kommt drauf an, was das proggy dann nebenbei noch so alles können soll. ein einfaches fenster-objekt, das über einen zeichenbuffer auf kommando eine zeile rauf oder runter scrollt ist wohl inklusive testen in 1 oder 2 stunden fertig; wenn das ganze aber in eine grössere applikation eingebettet werden soll inklusive interner logik für maus/tastatur-steuerung, sortieren, markieren, etc würde ich da mal alleine für das planen und coden mindestens 1-2 tage veranschlagen - nicht eingerechnet testen und integration.

    bin aber kein profi was grössere projekte angeht.
     
  14. schwarzm

    schwarzm Viertel Gigabyte

    Ja an so was hatte ich gedacht! Ich will kein großes Applet. Mehr will ich nicht!
     
  15. Michi0815

    Michi0815 Guest

    wenn's nur ganz einfach sein soll reicht kannst du das ganze auch ausprogrammieren; so in der art

    const menuTxt = array[1..<irgendwas>] of string = ('Menüpunkt1', 'Menüpunkt2'....);
    var markiert, lv: byte;
    begin
    markliert:=1;
    for lv:=1 to <irgendwas> do
    begin
     
  16. Michi0815

    Michi0815 Guest

    wenn es nur ganz einfach sein soll kannst du es auch ausprogrammieren; etwa so (fehler darfst du behalten)
    Code:
    const MenuTxt: array[0..<irgendwas>] of string = ('Menüpunkt1', 'Menüpunkt2', ...);
    var Markiert, lv: byte;
    begin
         Markiert:=0;
         repeat
              for lv:=0 to <irgendwas> do
              begin
                    if lv=Markiert then
                    begin
                         TextColor(lightred);
                         TextBackGround(white);
                    end else begin
                         TextColor(red);
                         TextBackGround(black);
                    end;
                    gotoxy(10, lv*2+2);
                    write(MenuTxt[lv]);
              end;
              case readkey of 
                  #13: begin
                                 case Makiert of
                                    0: {Punkt 1 ausführen}
                                    1: {Punkt 2 ausführen}
                                    ...
                                 end;
                         end;
                  #80: Markiert:=(Markiert + 1) mod <Irgendwas>; {Taste nach unten}
                  #72: Markiert:=(Markiert - 1) mod <Irgendwas>; {Taste nach oben}
              end;
         until <irgendwas passiert>
    end.
     
  17. schwarzm

    schwarzm Viertel Gigabyte

    Das ist mir jetzt zu hoch :confused:
    Kannst du mir mal den kompletten Code geben? :)
     
  18. Michi0815

    Michi0815 Guest

    sorry; habe im antworten-feld "programmiert" und irrtümlich <tab><enter> gedrückt :p

    jetzt ist der rest auch da
     
  19. schwarzm

    schwarzm Viertel Gigabyte

    Habe das bei DevPascal eingegeben, den Code. Der Compiler sagt folgendes dazu:
    [​IMG]
    Was kann das sein?
     
  20. Michi0815

    Michi0815 Guest

    das ist doch nur ein konzept :rolleyes:

    statt dem <irgendwas> musst du schon eine zahl einsetzen und - bevor der compiler wieder meutert - statt dem <irgendwas passiert> irgendeine programm-ende-bedingung. die diversen "..." sollte man auch noch durch geeigneten code ersetzen...
     
Thread Status:
Not open for further replies.

Share This Page