Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konsole: Integer zu ASCII Code + Druck? (https://www.delphipraxis.net/83508-konsole-integer-zu-ascii-code-druck.html)

TheHighriser 3. Jan 2007 20:41


Konsole: Integer zu ASCII Code + Druck?
 
Hallo liebe Forumsmitglieder!

Ich bin Designstudent und habe nur rudimentäre TurboPascal Kenntnisse aus meiner Schul- und Textadventurezeit.

Für ein eigenes Projekt in Typographie, einen CODE-spuckenden Roboter, will ich folgendes programmieren:

Es geht um ein simples Programm, bei dem der User eine Zahl zwischen 31 und 255 eingibt, woraufhin der Roboter
das entsprechende Zeichen des ISO Latin 1 Codes (Weiterführung des ASCII Codes) über einen Nadeldrucker ausgibt.

Meine Überlegung war folgende:

1) Einfaches Konsolen-Pascal-Programm

2) User gibt Zahl zwischen 31 und 255 ein, Programm prüft ob Zahl zulässig (kein Problem!!!) :???:

3) Programm wandelt Zahl in ASCII Zeichen um (PROBLEM!!!) :wall:

Ich dachte an so etwas hier:

Delphi-Quellcode:
program Typobot;

{$APPTYPE CONSOLE}

uses
  SysUtils;

  var
  c: integer;
  x: char;

begin

 Writeln('Zeige ISO-Zeichen Nummer: ');
 Readln(c);

 if (c > 255) or (c < 31)
 then writeln ('Fehler! Nur Zahlen von 31 bis 255 eingeben')

 else

 x:= #c; //Hier sollte das ISO-Latin 1 Zeichen entstehen...:(

 writeln ('Das Zeichen Nr. ' +IntToStr(c)+ ' ist ' +x+ '!');

 readln;

end.
Geht aber nicht, da: [Error] Typobot.dpr(23): Constant expression expected (bei x:= #c; will er wohl direkt die zahl)

Gibt es da eine elegante Möglichkeit oder ist es einfacher für alle möglichen 255 zeichen eine bedingung zu schreiben?
(if c = 198 then writeln ('Æ'))...

Zweites Problem wäre dann dass das Ganze dann direkt über einen (Nadel-)drucker ausgedruckt werden soll, also einfach nur das Zeichen...
und da habe ich bislang noch gar nichts gefunden :/. (Ja, hab die Suche genutzt..und n Online Delphi Buch gelesen..nix..)

Vielleicht könnt ihr mir ja helfen. Meine Dankbarkeit ist euch sicher :)))...

Viele Grüße,

Benedikt

Die Muhkuh 3. Jan 2007 20:44

Re: Konsole: Integer zu ASCII Code + Druck?
 
Delphi-Quellcode:
x := Chr(c)
;)

Oha: Herzlich Willkommen :)

Zum Drucken:

Binde die Unit "Printer" ein und dann in etwa:

Delphi-Quellcode:
Printer.BeginDoc;
Printer.Canvas.TextOut(50,20, 'Die Zahl ' + InttoStr(c) + ' entspricht ' + x);
Printer.EndDoc;
Printer.Print;
Da bin ich mir jetzt nicht ganz sicher, da ich gerade kein Delphi zur Hand habe :)

TheHighriser 3. Jan 2007 20:49

Re: Konsole: Integer zu ASCII Code + Druck?
 
:oops:
Vielen herzlichen Dank...hätte noch Stunden gebraucht um das rauszukriegen..es kann ja so einfach sein..:D

das mit dem drucker schau ich mir dann mal genauer an jetzt. danke!!!

:cheers:

Die Muhkuh 3. Jan 2007 20:50

Re: Konsole: Integer zu ASCII Code + Druck?
 
Kein Problem ;-)

pitti platsch 3. Jan 2007 20:57

Re: Konsole: Integer zu ASCII Code + Druck?
 
Ich glaube die unit Printer in Zusammenhang mit writeln geht nicht für Nadeldrucker (unter Delphi), da einfach die writeln-Befehle an ein Printerobjekt, also dessen Canvas weitergeleitet werden. Statt dessen könnte diese Seite helfen.

pitti

TheHighriser 3. Jan 2007 22:09

Re: Konsole: Integer zu ASCII Code + Druck?
 
Hallo Pitti,

danke für die Seite mit dem Beispielcode; leider reichen meine Kenntnisse noch nicht ganz aus, um da durchzusteigen,
zu dem schluss komme ich jedenfalls jetzt nach ca. einer Stunde "Analyse" :)...
ich scheitere ja schon daran, eine unit zu erzeugen...siehe muhkuhs drucktipp.

es ist wohl doch etwas komplizierter mit dem drucken als ich es mir vorgestellt hatte (wie so oft).

hier hatte ich noch etwas gefunden, was halbwegs 'simpel' aussah, aber man kann es wohl nicht zu diesem Zweck gebrauchen:

Delphi-Quellcode:
var
  F: TextFile;
begin
  AssignFile(F, 'LPT1');// LPT2,COM1,COM2...
  Rewrite(F);
  Writeln(F, 'Hello');
  Writeln(F, 'There!');
  Writeln(F, #12);
  CloseFile(F);
end;
gefunden hier:
http://www.swissdelphicenter.com/de/showcode.php?id=293

wenn ich den code in ein neues Konsolenprogramm einfüge rauscht jedenfalls das Ding durch und schließt sich wieder (klar)
aber ohne irgendwas zu drucken; habe diverse Ports ausprobiert, mein Drucker wäre am USB also USB001 laut Windows...
(können Konsolenprogramme USB überhaupt ansprechen?! na, soll eh nadeldrucker ran..).
Den nadeldrucker hab ich zur Zeit gar nicht hier, ein normaler Ausdruck würde mir aber im Prinzip auch erstmal reichen.

Ich glaube, dass ich bei der ersten Druckvariante noch am ehesten durchblicken würde.

Sorry, ich kann mir denken, mein Unwissen muss geradezu schmerzhaft sein :).

http://img63.imageshack.us/img63/437...easciibtm2.jpg

Die Muhkuh 5. Jan 2007 07:39

Re: Konsole: Integer zu ASCII Code + Druck?
 
Hi Highriser,

da ich jetzt Delphi installiert habe, habe ich mich nochmals um Dein Problem gekümmert.

Herausgekommen ist nun das:

Delphi-Quellcode:
program Typobot;

{$APPTYPE CONSOLE}

uses
  SysUtils, Printers;

var
  c: integer;
  x: char;
  tmp: String;

begin

  Writeln('Zeige ISO-Zeichen Nummer: ');
  Readln(c);

  if (c > 255) or (c < 31) then
    writeln('Fehler! Nur Zahlen von 31 bis 255 eingeben')

  else

    x := Chr(c); //Hier sollte das ISO-Latin 1 Zeichen entstehen...:(

  writeln('Das Zeichen Nr. ' + IntToStr(c) + ' ist ' + x + '!');

  WriteLn('Drucken? (Y / N)');
  ReadLn(tmp);

  if (LowerCase(tmp) = 'y') then
  begin
    Printer.BeginDoc;
    Printer.Canvas.TextOut(150, 60, 'Das Zeichen Nr. ' + IntToStr(c) + ' ist ' +
      x + '!');
    Printer.EndDoc; // Hier wird schon gedruckt.
  end;

  readln;

end.
Viel Spaß damit :-)

TheHighriser 6. Jan 2007 15:59

Re: Konsole: Integer zu ASCII Code + Druck?
 
Zitat:

Zitat von Die Muhkuh
Viel Spaß damit :-)

:dancer2: :dancer: :dancer2: :dancer: :dancer2:
:thumb:

DANKE!

Wenn du mal was an Designleistung brauchst, logo oder sowas, info@hghrsr.de - einfach mal anfragen...

TheHighriser 23. Jan 2007 21:52

Re: Konsole: Integer zu ASCII Code + Druck?
 
guden!

erstmal @muhkuh sorry bin noch nicht zu gekommen dir zu antworten

zuviel stress

dann noch eine kurze frage. wenn man in die konsole buchstaben eingibt,
stürzt das programm ab. kann man das irgendwie einfach ausschließen?

und irgendwie funktioniert die bedingung nicht; gibt man eine zahl unter 31 oder über 255 ein, gibt er zwar die meldung aus, druckt aber nochmal das zeichen das zuletzt eingegeben wurde. hm..

also jungs und mädels wär toll wenn ihr mir nochmal helfen könntet, morgen ist abgabe..

danke schonmal

gruß das iso latin bot design team :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz