Eigene Zeichen auf der Console machen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Eigene Zeichen auf der Console machen

Beitrag von Marsmännchen »

Hi,

ich bastel gerade an einem Spiel. Es wird unter anderem auch auf der Konsole laufen (voll Retro, aber es stammt auch aus den 80er Jahren. Ich habe es stundenlang auf dem ZX Spektrum gezockt). Momentan stelle ich die einzelnen Spielelemente durch simple Buchstaben dar (S = Spieler, Z = Ziel), aber schöner wäre es natürlich, wenn man hier seine eigenen Symbole/Zeichen definieren könnte. Ich hab schon mal ein bisserl gegoogelt, aber bisher nichts passendes gefunden.

Kann mir jemand sagen, wie ich sowas angehen kann?
Ich mag Pascal...

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Eigene Zeichen auf der Console machen

Beitrag von Mathias »

Ich weis nicht, ob dies direkt von Lazarus aus geht, aber du könntest eine eigene Schrift bauen, und dies bei den Eigenschaften der Eingabeaufforderung einbinden.
Unter DOS mit Turbo-Pascal hatte ich mal so etwas gemacht, aber dies nützt unter Windows leider nicht viel.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Eigene Zeichen auf der Console machen

Beitrag von Marsmännchen »

Ich habe mal ein wenig weiter recherchiert und bin für Windows beim Tool EudCEdit fündig geworden. Hier eine Anleitung, falls das jemand brauchen kann: https://www.youtube.com/watch?v=fbu-7fazjSY. Ist natürlich absolut nicht CrossCompiling...

War es das, was du damit meintest, eine eigene Schrift zu bauen? Ich muss auch erst noch austesten, wie man das bei einem Programm weitergeben kann, oder ob es immer an die Maschine gebunden ist, auf der man solche Zeichen erstellt hat...

... man kann sowas wohl weitergeben, aber es ist kein eigener Font: http://www.pcwelt.de/ratgeber/2-Eudcedit-Editor-fuer-benutzerdefinierte-Zeichen-Geheime-Windows-Tools-342182.html. Ich stöber mal in Richtung eigener Font weiter... ... Murks! Was hat Font mit Konsole zu tun??? :oops:
Ich mag Pascal...

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Eigene Zeichen auf der Console machen

Beitrag von Michl »

Marsmännchen hat geschrieben:Was hat Font mit Konsole zu tun???
Viel! Zum Beispiel kann man auch den UTF8-Zeichensatz unter Windows auf der Konsole nutzen und ist nicht nur an die verschiedenen Codepages gebunden. Dabei können verschiedene Fonts genutzt werden. Es gibt Standard-Fonts, die (jedem) Windows beigefügt sind, wie Courier oder Lucida Console oder auch (freie) Raster-Fonts, die für die Konsole genutzt werden können. Je nach Font, kann dieser bestimmte Zeichen darstellen oder auch nicht.

So kann man z.B. den eingestellten Font ändern:

Code: Alles auswählen

program project1;
 
uses
  Windows;
 
const
  LF_FACESIZE = 32;
 
type
  CONSOLE_FONT_INFOEX = record
    cbSize      : ULONG;
    nFont       : DWORD;
    dwFontSizeX : SHORT;
    dwFontSizeY : SHORT;
    FontFamily  : UINT;
    FontWeight  : UINT;
    FaceName    : array [0..LF_FACESIZE-1] of WCHAR;
  end;
 
{ Only supported in Vista and onwards!}
 
function SetCurrentConsoleFontEx(hConsoleOutput: HANDLE; bMaximumWindow: BOOL; var CONSOLE_FONT_INFOEX): BOOL; stdcall; external 'kernel32.dll' name 'SetCurrentConsoleFontEx';
 
var
  New_CONSOLE_FONT_INFOEX : CONSOLE_FONT_INFOEX;
 
begin
  Write('Default Font <press Enter>');
  ReadLn;
 
  FillChar(New_CONSOLE_FONT_INFOEX, SizeOf(CONSOLE_FONT_INFOEX), 0);
  New_CONSOLE_FONT_INFOEX.cbSize := SizeOf(CONSOLE_FONT_INFOEX);
  New_CONSOLE_FONT_INFOEX.FaceName := 'Lucida Console';
  New_CONSOLE_FONT_INFOEX.FontWeight := 400;
  SetCurrentConsoleFontEx(StdOutputHandle, False, New_CONSOLE_FONT_INFOEX);
  Write('Font Lucida Console <press Enter>');
  ReadLn;
 
  New_CONSOLE_FONT_INFOEX.FaceName := 'Consolas';
  SetCurrentConsoleFontEx(StdOutputHandle, False, New_CONSOLE_FONT_INFOEX);
  Write('Font Consolas <press Enter>');
  ReadLn;
 
  New_CONSOLE_FONT_INFOEX.FaceName := 'Courier';
  SetCurrentConsoleFontEx(StdOutputHandle, False, New_CONSOLE_FONT_INFOEX);
  Write('Font Courier (mostly default font) <press Enter>');
  ReadLn;
end.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Eigene Zeichen auf der Console machen

Beitrag von Mathias »

{ Only supported in Vista and onwards!}

Das wird wohl die Konsolen betreffen, welche kein 16Bit mehr unterstützen und kein Vollbild mehr können.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten