AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konsolenprogramme wie in TP

Ein Thema von Chewie · begonnen am 16. Dez 2002 · letzter Beitrag vom 29. Nov 2003
Antwort Antwort
Seite 1 von 3  1 23      
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

Konsolenprogramme wie in TP

  Alt 16. Dez 2002, 16:00
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?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 16. Dez 2002, 17:55
Moin Chewie,

bei einem Konsolenprogramm kannst Du einfach durch ein

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3
  Alt 16. Dez 2002, 18:54
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.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 16. Dez 2002, 20: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...)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5
  Alt 16. Dez 2002, 21: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ß
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#6
  Alt 17. Dez 2002, 15: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
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Klabautermann

Registriert seit: 22. Jun 2002
Ort: Münster (NRW)
63 Beiträge
 
#7
  Alt 17. Dez 2002, 17: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
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#8
  Alt 17. Dez 2002, 22:11
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
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9
  Alt 17. Dez 2002, 23: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#10
  Alt 18. Dez 2002, 07:57
Hallo Christian,

das Problem war hier nicht die Soundkarte oder der Lautsprecher, sondern die Hörmuschel . Stell dich einmal neben ein laufendes Jettriebwerk, dann weist du was ich meine...

Häääääh, hast du was gesagt ?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 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