Miten on mahdollista vaihtaa delphin console-applicationissa (turbo pascal) fontin väriä? Ja miten ohjelman saa laitettua fullscreeniksi?
Niin, Delphi vai Turbo Pascal? Delphi, ainakin uudet Delphit, tekevät Windows-ohjelmia, joten en luottaisi mahdollisuuteen muuttaa konsolin fontin väriä. En ole ainakaan onnistunut. Turbo Pascalissa kannattaa taas tutustua kirjastoihin Graph ja Crt. Crt-kirjaston funktioita on listattu hakemistoon.
Siis delphin console-application on sama asia kuin turbo-pascal ohjelma.
No eikä ole. Yritäpä ajaa se DOSissa (siis ei konsolissa vaan oikeassa DOSissa) niin se sanoo, että win32 required. Turbo Pascal taas on DOS-kääntäjä, jolla tehdään DOS-ohjelmia, ja niissä saa paljon enemmän aikaan. Jos haluat Turbo Pascalia käyttää, mene lataamaan Borlandin sivuilta TP 5.5. Se on DOS-ohjelma ja se tekee DOS-ohjelmia, toisin kuin Delphi. Usko minua.
Delphin ohje kirjoitti:
Console applications are 32-bit programs that run without a graphical interface, in a console window.
Kiitos valaistuksesta :)
Metabolix kirjoitti:
Delphi, ainakin uudet Delphit, tekevät Windows-ohjelmia, joten en luottaisi mahdollisuuteen muuttaa konsolin fontin väriä.
WinAPI auttaa
Alla esimerkki konsolin värien käytöstä ala Delphi:
program ConsoleApp;
{$APPTYPE CONSOLE}
uses
SysUtils,
Windows,
Dialogs;
const
CONSOLE_WIDTH = 80; //Konsolin koko
CONSOLE_HEIGHT = 25;
var
InH, OutH: THandle; //stdin ja stdout handlet
MX,MY: Integer; //max koko
function Init: Boolean;
var
Coord: TCoord;
R: TSmallRect;
begin
Result := True;
InH := GetStdHandle(STD_INPUT_HANDLE);
OutH := GetStdHandle(STD_OUTPUT_HANDLE); //Haetaan handlet
if (InH = INVALID_HANDLE_VALUE) or (OutH = INVALID_HANDLE_VALUE) then
begin
Result := False; //Ei onnistunut, lopetetaan
Exit;
end;
MX := CONSOLE_WIDTH;
MY := CONSOLE_HEIGHT;
R.Left := 0;
R.Top := 0;
R.Right := MX;
R.Bottom := MY;
Coord.X := MX;
Coord.Y := MY;
SetConsoleScreenBufferSize(OutH, Coord); //Asetetaan puskurin koko
SetConsoleWindowInfo(OutH, False, R); //Aseteaan ikkunan koko
end;
//Siirtyy konsolin kohtaan x,y
procedure GotoXY(X, Y : Word);
var
Coord: TCoord;
begin
Coord.X := X;
Coord.Y := Y;
SetConsoleCursorPosition(OutH, Coord);
end;
//Tyhjentää ikkunan
procedure Cls;
var
Coord: TCoord;
cnt: Cardinal;
begin
Coord.X := 0;
Coord.Y := 0;
FillConsoleOutputCharacter(OutH, ' ', MX*MY, Coord, cnt);
GotoXY(0, 0);
end;
//Muuttaa nykyisen ikkuna ominaisuudet (värit)
procedure SetConsoleAttributes(Attr: WORD);
var
Coord: TCoord;
cnt: Cardinal;
begin
Coord.X := 0;
Coord.Y := 0;
FillConsoleOutputAttribute(OutH, Attr, MX*MY, Coord, cnt);
end;
{ *
Mahdolliset värit:
BACKGROUND_RED, BACKGROUND_GREEN, BACKGROUND_BLUE
FOREGROUND_RED, FOREGROUND_GREEN, FOREGROUND_BLUE
voidaan yhdistellä or:lla
esim.
FOREGROUND_RED or FOREGROUND_BLUE or BACKGROUND_GREEN
antaa liilaa tekstiä vihreällä tasutalla
* }
begin
if not Init then
begin
MessageDlg('Error setting up console window', mtError, [mbOk], 0);
Exit;
end;
Cls;
SetConsoleAttributes(BACKGROUND_RED);
SetConsoleTextAttribute(OutH, FOREGROUND_GREEN or BACKGROUND_RED);
GotoXY(34, 12);
WriteLn('Hello World!');
ReadLn;
end.Tämä oli vain esimerkki jossa on parantamisen varaa. Delphin ohjeet auttavat.
Aihe on jo aika vanha, joten et voi enää vastata siihen.