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.