Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как в Pascal указать имя окна проги, его размер и цвет фона?

Саша Павлов Знаток (374), закрыт 11 лет назад
Вообще, по правилам, в начале проги пишется program и, как понимаю, её название. Но про откр. после компиляции в имени окна выводится целый адрес и (!) имя файла проги.
Лучший ответ
Миоко Таканава Гений (51590) 11 лет назад
Вы не указали реализацию Паскаля.
program в начале не во всех "паскалях" обязательно писать. В некоторых имя после program должно совпадать с именем pas-файла (и в результате совпадает с именем экзешника) , в некоторых может быть совершенно произвольным.
Также не понятно о каком "окне" идёт речь. Если это окно консоли в Windows, то так:

program N77679134;
uses Windows, crt;
const {Размеры консоли}
XSize = 40;
YSize = 10;
var
hStdOut: THandle;
Rect: TSmallRect;
Frame: TCoord;
begin
SetConsoleTitle('Имя программы');
hStdOut := GetStdHandle(STD_OUTPUT_HANDLE);
with Rect do
begin
Left := 0;
Top := 0;
Right := XSize - 1;
Bottom := YSize - 1;
end;
SetConsoleWindowInfo(hStdOut, True, Rect);
Frame.X := XSize;
Frame.Y := YSize;
SetConsoleScreenBufferSize(hStdOut, Frame);
TextBackGround(Blue); {Цвет фона}
clrscr;
writeln('Текст в консоли');
readln;
end.

Результат:


Если речь об окнах Windows, то так:

program N77679134;
uses Windows, Messages;
const
WndClass = 'Prog';
WndCaption = 'Имя программы';
{Размеры окна}
XSize = 200;
YSize = 100;
var
Wc: TWndClassEx;
Wnd, Lbl: HWND;
Msg: TMsg;

function WindowProc(Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
case Msg of
WM_DESTROY: begin
PostQuitMessage(0);
Result := 0;
end;
WM_CTLCOLORSTATIC: begin
SetTextColor(wParam, $C0C0C0);
SetBkColor(wParam, $800000);
Result := CreateSolidBrush($800000);
end
else
Result := DefWindowProc(Wnd, Msg, wParam, lParam);
end;
end;

begin
fillchar(Wc, SizeOf(Wc), 0);
with Wc do
begin
cbSize := SizeOf(Wc);
lpfnWndProc := @WindowProc;
hInstance := hInstance;
hbrBackground := CreateSolidBrush($800000); {Цвет фона}
lpszClassName := WndClass;
end;
RegisterClassEx(Wc);
Wnd := CreateWindowEx(0, WndClass, WndCaption, WS_OVERLAPPED or
WS_CAPTIОN or WS_SYSMENU or WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT, XSize, YSize, 0, 0, hInstance, nil);
Lbl := CreateWindowEx(0, 'STATIC', 'Текст в окне', WS_CHILD or WS_VISIBLE,
10, 10, 100, 25, Wnd, 0, hInstance, nil);
SendMessage(Lbl, WM_SETFONT, GetStockObject(ANSI_VAR_FONT), 0);
ShowWindow(Wnd, SW_SHOWNORMAL);

while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Halt(0);
end.

Результат:


P.S. Ничего не получится если
- у вас Turbo Pascal, т. к. программы MS DOS даже не подозревают о существовании Windows;
- у вас PascalABC, который даже компилировать не может.

P.P.S. В консольной программе используется модуль CRT. Если в вашем "паскале" его нет (например в Delphi), то придётся искать аналогичный или использовать соответствующие функции WinAPI.
В оконной программе удобнее использовать VCL (в Delphi), её аналог LCL (в Lazarus), KOL или виджеты. Но для этого сначала придётся познакомиться с ООП.

P.P.P.S. Всё, что сможет сделать программа al.ex, это сменить цвет фона в консоли.
Остальные ответы
al.ex Мыслитель (7901) 11 лет назад
program kakashka;

uses
crt;

begin
Window(10,10,10,10);
TextBackground(Red);
ClrScr;
end.
Похожие вопросы