Код:
Program Window;
uses exec, sysutils, utility, intuition,agraphics,diskfont;
procedure Paint(AWin:PWindow;x:SmallInt;y:SmallInt);
var
str:AnsiString;
begin
SetRast(AWin^.RPort,0);
str:='Amiga text';
SetAPen(AWin^.RPort,1);
SetDrMd(AWin^.RPort,JAM1);
GFXMove(AWin^.RPort,x,y);
GFXText(AWin^.RPort,PChar(str), Length(str));
end;
var
win:PWindow;
done:Boolean=False;
Msg:PMessage;
tatr:TTextAttr;
pfont:PTextFont;
fname:AnsiString;
key:Word;
x:SmallInt=50;
y:SmallInt=50;
begin
win:=OpenWindowTags(nil,
[WA_Width,AsTag(300),
WA_Height,AsTag(200),
WA_MaxWidth,AsTag(640),
WA_MaxHeight,AsTag(256),
WA_MinWidth,AsTag(100),
WA_MinHeight,AsTag(100),
WA_Title,AsTag('My Window'),
WA_DepthGadget,AsTag(True),
WA_SizeGadget,AsTag(True),
WA_DragBar,AsTag(True),
WA_Activate,ASTag(True),
WA_Flags,WFLG_Closegadget or WFLG_GIMMEZEROZERO,
WA_IDCMP,IDCMP_CLOSEWINDOW or IDCMP_REFRESHWINDOW or IDCMP_RAWKEY ,
TAG_END]);
fname:='topaz.font';
tatr.ta_Name:=PChar(fname);
tatr.ta_YSize:=8;
tatr.ta_Flags:=0;
tatr.ta_Style:=0;
//IF OpenDiskFont(@tatr)<>nil then write('OK!');
pfont:= OpenDiskFont(@tatr);
SetFont(Win^.RPort,pfont);
Paint(win,x,y);
repeat
key:=0;
//WaitPort(Win^.UserPort);
Msg:=GetMsg(Win^.UserPort);
if Msg<>nil then
begin
case PIntuiMessage(Msg)^.IClass of
IDCMP_CloseWindow:
begin
done:=True;
continue;
end;
IDCMP_REFRESHWINDOW:
Paint(Win,x,y);
IDCMP_RAWKEY:
key:= PIntuiMessage(Msg)^.Code;
end;
ReplyMsg(Msg);
end;
if (key<>0) and (key=$4F) or (key=$4E) then
begin
case key of
$4f:
x:=x-1;
$4E:
x:=x+1;
end;
Paint(Win,x,y);
end;
Until done;
CloseWindow(Win);
end.
В общем окно с текстом появилось. Заметил странность с обработкой событий для нажатия клавиш. После нажатия и удержания клавиши( стрелка влево или вправо) текст сразу смещается на один пиксель, а затем дальнейшее смещение текста происходит через паузу в одну секунду. Нет ли в ОС какой настройки автоповтора для клавиатуры? Если такая настройка есть, как поменять её программно?