Поставил компилятор fpc и решил скомпилить пример "Hello World" для GUI:
uses x,xlib,x11,xutil,strings; const WND_X=0; WND_Y=0; WND_WDT=100; WND_HGH=100; WND_MIN_WDT=50; WND_MIN_HGH=50; WND_BORDER_WDT=5; WND_TITLE='Hello!'; WND_ICON_TITLE='Hello!'; PRG_CLASS='Hello!'; (* * SetWindowManagerHints - процедура передает информацию о * свойствах программы менеджеру окон. *) procedure SetWindowManagerHints ( prDisplay : PDisplay; (*Указатель на структуру TDisplay *) psPrgClass : PChar; (*Класс программы *) argv : PPChar; (*Аргументы программы *) argc : integer; (*Число аргументов *) nWnd : TWindow; (*Идентификатор окна *) x, (*Координаты левого верхнего *) y, (*угла окна *) nWidth, nHeight, (*Ширина и высота окна *) nMinWidth, nMinHeight:integer; (*Минимальные ширина и высота окна *) psTitle : PChar; (*Заголовок окна *) psIconTitle : PChar; (*Заголовок пиктограммы окна *) nIconPixmap : TPixmap (*Рисунок пиктограммы *) ); var rSizeHints : TXSizeHints; (*Рекомендации о размерах окна*) rWMHints : TXWMHints; rClassHint : TXClassHint; prWindowName, prIconName : TXTextProperty; begin if ( XStringListToTextProperty (@psTitle, 1, @prWindowName )=0) or (XStringListToTextProperty (@psIconTitle, 1, @prIconName )=0 ) then begin writeln('No memory!'); halt(1); end; rSizeHints.flags := PPosition OR PSize OR PMinSize; rSizeHints.min_width := nMinWidth; rSizeHints.min_height := nMinHeight; rWMHints.flags := StateHint OR IconPixmapHint OR InputHint; rWMHints.initial_state := NormalState; rWMHints.input := True; rWMHints.icon_pixmap := nIconPixmap; rClassHint.res_name := argv[0]; rClassHint.res_class := psPrgClass; XSetWMProperties ( prDisplay, nWnd, @prWindowName, @prIconName, argv, argc, @rSizeHints, @rWMHints, @rClassHint ); end; (* *main - основная процедура программы *) //void main(int argc, char *argv[]) var prDisplay: PDisplay; (* Указатель на структуру Display *) nScreenNum: integer; (* Номер экрана *) prGC: TGC; rEvent: TXEvent; nWnd: TWindow; begin (* Устанавливаем связь с сервером *) prDisplay := XOpenDisplay ( nil ); if prDisplay = nil then begin writeln('Can not connect to the X server!'); halt ( 1 ); end; (* Получаем номер основного экрана *) nScreenNum := XDefaultScreen ( prDisplay ); (* Создаем окно *) nWnd := XCreateSimpleWindow ( prDisplay, XRootWindow ( prDisplay, nScreenNum ), WND_X, WND_Y, WND_WDT, WND_HGH, WND_BORDER_WDT, XBlackPixel ( prDisplay, nScreenNum ), XWhitePixel ( prDisplay, nScreenNum ) ); (* Задаем рекомендации для менеджера окон *) SetWindowManagerHints ( prDisplay, PRG_CLASS, argv, argc, nWnd, WND_X, WND_Y, WND_WDT, WND_HGH, WND_MIN_WDT, WND_MIN_HGH, WND_TITLE, WND_ICON_TITLE, 0 ); (* Выбираем события, обрабатываемые программой *) XSelectInput ( prDisplay, nWnd, ExposureMask OR KeyPressMask ); (* Показываем окно *) XMapWindow ( prDisplay, nWnd ); (* Цикл получения и обработки событий *) while ( true ) do begin XNextEvent ( prDisplay, @rEvent ); case ( rEvent.eventtype ) of Expose : begin (* Запрос на перерисовку *) if ( rEvent.xexpose.count <> 0 ) then continue; prGC := XCreateGC ( prDisplay, nWnd, 0 , nil ); XSetForeground ( prDisplay, prGC, XBlackPixel ( prDisplay, 0) ); XDrawString ( prDisplay, nWnd, prGC, 10, 50, 'Hello, world!', strlen ( 'Hello, world!' ) ); XFreeGC ( prDisplay, prGC ); end; KeyPress : begin (* Нажатие клавиши клавиатуры *) XCloseDisplay ( prDisplay ); halt ( 0 ); end; end; end; end.
Библиотека xlib вроде установлена а он говорит:
Fatal: Can't find unit X
Что посоветуйте?
Да и незнаете где можно скачать хороший учебник по fpc на русском языке?
Сообщение изменено: Gb|k (18 августа 2004 - 23:31 )