Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Konsolenprogramme wie in TP (https://www.delphipraxis.net/1653-konsolenprogramme-wie-tp.html)

Chewie 16. Dez 2002 15:00


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?

Christian Seehase 16. Dez 2002 16:55

Moin Chewie,

bei einem Konsolenprogramm kannst Du einfach durch ein

Delphi-Quellcode:
WriteLn(#07);
einen Ton ausgeben.

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.

jbg 16. Dez 2002 17:54

Zitat:

Zitat von Christian Seehase
... aber auch das mit den Farben könnte sich über spezielle ASCII Codes (Wert < 32) einleiten lassen.

Das ist mir neu. Das ging schon unter DOS nicht. Warum sollte es dann unter Windows funktionieren?

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.

Christian Seehase 16. Dez 2002 19:22

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...)

Chewie 16. Dez 2002 20:37

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:

d3g 17. Dez 2002 14:30

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:
http://www.evergreen.edu/biophysics/...m/ansi_esc.htm.

MfG,
d3g

Klabautermann 17. Dez 2002 16:32

Hallo,

wenn es eine Alternative für dich ist, das Programm tatsächlich in Turbo Pascal zu schreiben, dann solltest du mal ins Museum der Borländer gucken ;).

Gruß
Klabautermann

Chewie 17. Dez 2002 21:11

Zitat:

Zitat von Klabautermann
Hallo,

wenn es eine Alternative für dich ist, das Programm tatsächlich in Turbo Pascal zu schreiben, dann solltest du mal ins Museum der Borländer gucken ;).

Gruß
Klabautermann

Na ja, etwas Fortschritt muss ja schon sein :wink:
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.

Christian Seehase 17. Dez 2002 22:53

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. ;-)

MrSpock 18. Dez 2002 06:57

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:

mimi 29. Nov 2003 10:57

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.

Chewie 29. Nov 2003 11:03

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:

Hansa 29. Nov 2003 11:07

Re: Konsolenprogramme wie in TP
 
Zitat:

Zitat von mimi
...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.

Du kannst also Töne ab 15 MHz hören ? 8) Ich sage nur. Guiness Buch. :mrgreen:

Chewie 29. Nov 2003 11:11

Re: Konsolenprogramme wie in TP
 
Zitat:

Zitat von Hansa
Zitat:

Zitat von mimi
...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.

Du kannst also Töne ab 15 MHz hören ? 8) Ich sage nur. Guiness Buch. :mrgreen:

Er hat ja nicht gesagt, dass er sie hören kann. Er hört nur den Ton, der durch die Frequenzänderung auf 100 Herz entsteht :zwinker:

mimi 29. Nov 2003 11:28

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

Hansa 29. Nov 2003 11:57

Re: Konsolenprogramme wie in TP
 
:shock: also doch ! :lol:

phlux 29. Nov 2003 12:03

Re: Konsolenprogramme wie in TP
 
Hey wir haben Hunde im Forum :lol: ;)

fenni 29. Nov 2003 12:39

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:

mimi 29. Nov 2003 13:48

Re: Konsolenprogramme wie in TP
 
lol,zurück zu anfangs frage *G*

Hansa 29. Nov 2003 15:28

Re: Konsolenprogramme wie in TP
 
Zitat:

Zitat von fenni
Praktisch, ab 87.5 MHz kann man sich das Geld fürs Radio sparen. :-D Hat dein Kopf auch einen Cinch-Ausgang? :wink:

Und Deiner einen SCSI Conroller für Mittelwelle statt UKW :?:

Luckie 29. Nov 2003 15:39

Re: Konsolenprogramme wie in TP
 
Hallo?!?. Ihr werdet gerade sehr stark offtopic und albert nur rum. :warn:

Hansa 29. Nov 2003 16:01

Re: Konsolenprogramme wie in TP
 
Wachhunde müssen eben immer auf der Hut sein. :lol:

vielleicht nützt das was:

http://home.t-online.de/home/rvelthu...es-cppobjs.htm

Aber nicht von C abschrecken lassen !


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr.

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