Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pascal: Delphi console kysymyksiä

HellRazor [17.01.2005 20:10:23]

#

Miten on mahdollista vaihtaa delphin console-applicationissa (turbo pascal) fontin väriä? Ja miten ohjelman saa laitettua fullscreeniksi?

Metabolix [17.01.2005 21:11:09]

#

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.

HellRazor [17.01.2005 21:44:58]

#

Siis delphin console-application on sama asia kuin turbo-pascal ohjelma.

Metabolix [17.01.2005 22:30:38]

#

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.

HellRazor [18.01.2005 15:05:15]

#

Kiitos valaistuksesta :)

zacura [18.01.2005 16:09:20]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta