Автор: UncoNNecteD
Дата сообщения: 04.08.2004 16:59
Я сделал вывод в цикле, причем на белом фоне черными буквами. Немного моргает, но тормозов не замечал, читабельность нормальная.
Код:
procedure TForm1.Timer_UAPIMessTimer(Sender: TObject);
begin
dec(GV_UAPIMCount);
Timer_UAPIMess.Enabled:=(GV_UAPIMCount>0);
UAPIMessageBoxOut;
end;
procedure UAPIMessageBoxOut;
var HForegW:HWND;
HForegDC:HDC;
begin
HForegW:=GetForegroundWindow;
HForegDC:=GetWindowDC(HForegW);
FillRect(HForegDC,GV_UAPIMRegion,0);
FrameRect(HForegDC,GV_UAPIMRegion,GV_UAPIMBrush);
FrameRect(HForegDC,GV_UAPIMRegionS,GV_UAPIMBrush);
SelectObject(HForegDC,GV_UAPIMFont);
DrawText(HForegDC,PChar(GV_UAPIMMessage),Length(GV_UAPIMMessage),GV_UAPIMRegionS,DT_CENTER+DT_VCENTER+DT_SINGLELINE);
end;
procedure UAPIMessageBox(mess:string;Left,Top,FrameCount:integer);
begin
GV_UAPIMBrush:=CreateSolidBrush(RGB(255,0,0));
GV_UAPIMFont:=CreateFont(30,10,0,0,FW_BOLD,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,PROOF_QUALITY,DEFAULT_PITCH,'Courier New');
GV_UAPIMRegion.Left:=Left;GV_UAPIMRegion.Top:=Top;
GV_UAPIMRegion.Right:=Left+length(mess)*11+30;GV_UAPIMRegion.Bottom:=Top+100;
GV_UAPIMRegionS.Left:=Left+3;GV_UAPIMRegionS.Top:=Top+3;
GV_UAPIMRegionS.Right:=GV_UAPIMRegion.Right-3;GV_UAPIMRegionS.Bottom:=GV_UAPIMRegion.Bottom-3;
GV_UAPIMCount:=FrameCount;
GV_UAPIMMessage:=mess;
Form1.Timer_UAPIMess.Enabled:=(GV_UAPIMMessage<>'');
end;