![]() |
Konsolenprogramme wie in TP
Wie kann man eigentlich in Delphi die Schriftfarbe und -größe der Ausgabe verändern? Und wie kann man über den Speaker etwas ausgeben, ohne die API Beep() zu verwenden?
|
Moin Chewie,
bei einem Konsolenprogramm kannst Du einfach durch ein
Delphi-Quellcode:
einen Ton ausgeben.
WriteLn(#07);
Ich habe jetzt leider keine Liste zur Hand, aber auch das mit den Farben könnte sich über spezielle ASCII Codes (Wert < 32) einleiten lassen. |
Zitat:
Windows bietet für die Consolenprogrammierung genug API Funktionen. Hier ist mal ein kleines Beispielprogramm:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} uses Windows, SysUtils; type TConsole = class(TObject) private FNewConsole: Boolean; FhOut, FhIn: THandle; procedure SetTitle(const Value: string); function GetTitle: string; public constructor Create(const Title: string = ''; NewConsole: Boolean = True); destructor Destroy; override; procedure ClrScr; procedure GotoXY(x, y: Integer); procedure SetTextAttr(Attr: Word); procedure WriteEx(const Text: string; Attr: Word); property Title: string read GetTitle write SetTitle; property hOut: THandle read FhOut; property hIn: THandle read FhIn; end; constructor TConsole.Create(const Title: string = ''; NewConsole: Boolean = True); begin inherited Create; FNewConsole := NewConsole; if FNewConsole then AllocConsole; FhOut := GetStdHandle(STD_OUTPUT_HANDLE); FhIn := GetStdHandle(STD_INPUT_HANDLE); SetTitle(Title); end; destructor TConsole.Destroy; begin if FNewConsole then FreeConsole; inherited Destroy; end; procedure TConsole.SetTitle(const Value: string); begin SetConsoleTitle(PChar(Value)); end; function TConsole.GetTitle: string; var Buf: Array[0..1024] of Char; begin SetString(Result, Buf, GetConsoleTitle(Buf, 1024)); end; procedure TConsole.ClrScr; var NumWritten: Cardinal; c: TCoord; Info: TConsoleScreenBufferInfo; begin c.X := 0; c.Y := 0; GetConsoleScreenBufferInfo(hOut, Info); FillConsoleOutputAttribute(hOut, Info.wAttributes, 80 * 25, c, NumWritten); FillConsoleOutputCharacter(hOut, ' ', 80 * 25, c, NumWritten) end; procedure TConsole.GotoXY(x, y: Integer); var c: TCoord; begin c.X := x; c.Y := y; SetConsoleCursorPosition(hOut, c); end; procedure TConsole.SetTextAttr(Attr: Word); begin SetConsoleTextAttribute(hOut, Attr); end; procedure TConsole.WriteEx(const Text: string; Attr: Word); var NumWritten: Cardinal; begin SetConsoleTextAttribute(hOut, Attr); WriteConsole(hOut, PChar(Text), Length(Text), NumWritten, nil); end; var Con: TConsole; begin Con := TConsole.Create('Meine Konsole'); try Con.SetTextAttr(FOREGROUND_GREEN or FOREGROUND_RED or FOREGROUND_INTENSITY or BACKGROUND_BLUE); Con.ClrScr; Con.GotoXY(10, 10); Write('Hallo'); ReadLn; Con.ClrScr; ReadLn; finally Con.Free; end; end. |
Moin jbg,
die genaue Vorgehensweise weiss ich leider auch nicht mehr. Dass man aber mit "Bordmitteln" seinen Batchdateien Farbe verleihen konnte, vorausgesetzt, man hatte Mode CO80 eingestellt und den ANSI.SYS geladen, weiss ich noch genau. ;-) (nur: Wer braucht's heute noch...) |
Warum ich frage, ist ganz simpel: Man muss ja irgendwie den Inf-Unterricht rumkriegen, und Matrix-Programme zu schreiben, hilft ungemein dabei. Und die Matrix sieht halt grün besser aus als weiß :wink:
|
Hi Chewie,
zumindest auf neueren UNIX-Shells kann man die Farben mit Escape-Sequenzen umstellen (ASCII 27 und dann einen bestimmten Code senden). Mit bestimmten Einstellungen in der CONFIG.SYS/CONFIG.NT scheint man auch unter Windows diese Escape-Sequenzen nutzen zu können: ![]() MfG, d3g |
Hallo,
wenn es eine Alternative für dich ist, das Programm tatsächlich in Turbo Pascal zu schreiben, dann solltest du mal ins ![]() Gruß Klabautermann |
Zitat:
Aber auch sehr lustig sind Programme, die hochfrequente Töne erzeugen. Ich hab dabei nämlich festgestellt, dass ich höchstens noch 11000 Hertz hören kann. Kein sehr gutes Ergebnis. Und da haben sie mich bei der Musterung als "befriedigend" eingestuft. :| Aber nochmal zurück zu meiner urrsprünglichen Frage. Bei der API Beep() kann man laut SDK (und laut meinen Ohren, ich hoffe, tiefe Töne hören sie noch) keine Töne mit Frequenzen von weniger als 37 Hertz erzeugen. Kann man nicht irgendwie unter diese Grenze gehen, ein Mensch sollte ja schließlich bis 18 Hertz hören können. Und unter TP geht das ja auch. |
Moin Chewie,
ich weiss ja nicht, über was für Lautsprecher/Soundkarte Du verfügst, aber: Das mit den 11000 Hz kann auch daran liegen, das höhere Frequenzen von mindestens einer der Komponenten nicht mehr wiedergegeben werden können. Von der Möglichkeit eine Wiedergabequelle zu haben, die 18Hz produzieren kann mal ganz zu schweigen. ;-) |
Hallo Christian,
das Problem war hier nicht die Soundkarte oder der Lautsprecher, sondern die Hörmuschel :mrgreen: . Stell dich einmal neben ein laufendes Jettriebwerk, dann weist du was ich meine... Häääääh, hast du was gesagt ? :mrgreen: |
Re: Konsolenprogramme wie in TP
ich habe mal führer in c so eine Frequenz erzeugt von 15 MHZ glaube ich und dann rauf zu 100 dabei entstand dann dieses ton, wie man es führer in den auto dos spielen kannte.
|
Re: Konsolenprogramme wie in TP
:shock: Eine Freqenz von 15 MHz mit einem PC-Speaker? Und dann "rauf" auf 100? Meinr Ansicht nach ist ^15 x 10^9 > 100 :gruebel:
|
Re: Konsolenprogramme wie in TP
Zitat:
|
Re: Konsolenprogramme wie in TP
Zitat:
|
Re: Konsolenprogramme wie in TP
ich es kann auch 18 MHZ sein,
was ich nicht schlecht finde es, wenn man es in einer for schleife macht und dann von 18 bis 100 MHZ |
Re: Konsolenprogramme wie in TP
:shock: also doch ! :lol:
|
Re: Konsolenprogramme wie in TP
Hey wir haben Hunde im Forum :lol: ;)
|
Re: Konsolenprogramme wie in TP
Praktisch, ab 87.5 MHz kann man sich das Geld fürs Radio sparen. :-D Hat dein Kopf auch einen Cinch-Ausgang? :wink:
|
Re: Konsolenprogramme wie in TP
lol,zurück zu anfangs frage *G*
|
Re: Konsolenprogramme wie in TP
Zitat:
|
Re: Konsolenprogramme wie in TP
Hallo?!?. Ihr werdet gerade sehr stark offtopic und albert nur rum. :warn:
|
Re: Konsolenprogramme wie in TP
Wachhunde müssen eben immer auf der Hut sein. :lol:
vielleicht nützt das was: ![]() Aber nicht von C abschrecken lassen ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:25 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 by Thomas Breitkreuz