您可以使用 unDelphiX 来获取执行 DirectX 的 Delphi 包。
你可以在这里下载包:http: //www.micrel.cz/Dx/
它完全是最新的,使 DirectX 几乎像标准 GDI 一样工作。
无闪烁绘图
消除闪烁的技巧是绘制到屏幕外表面,并在完成后“翻转”屏幕外表面。
翻转可以与 VerticalSync 同步,因此也没有撕裂。
演示
有一个演示,以毫秒为单位显示当前时间,没有任何闪烁。
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, DXClass, DXDraws;
type
TMainForm = class(TDXForm)
DXDraw: TDXDraw;
DXTimer: TDXTimer; //Precision timer.
procedure DXDrawFinalize(Sender: TObject);
procedure DXDrawInitialize(Sender: TObject);
procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
end;
var
MainForm: TMainForm;
implementation
uses MMSystem;
{$R *.DFM}
procedure TMainForm.DXDrawInitialize(Sender: TObject);
begin
DXTimer.Enabled := True;
end;
procedure TMainForm.DXDrawFinalize(Sender: TObject);
begin
DXTimer.Enabled := False;
end;
procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);
var
formattedDateTime: string;
begin
if not DXDraw.CanDraw then exit;
DXDraw.Surface.Fill(0);
with DXDraw.Surface.Canvas do //Draw to offscreen surface.
begin
Brush.Style := bsClear;
Font.Color := clWhite;
Font.Size := 30;
DateTimeToString(formattedDateTime, 'hh:nn:ss.zzz', Now);
Textout(30, 30, formattedDateTime);
Release; { Indispensability }
end;
DXDraw.Flip; //Flip the offscreen surface to screen, no flicker :=)
end;
end.
在 XE2 中安装 unDelphiX
为了在 Delphi XE2 中安装软件包,我必须添加DesignIDE
到requires
dpk 的子句中。像这样:
这将修复DesignIntf.dcu
未找到的错误。
显示全屏
如果你想做全屏,你可以在 DXDraw 的设置中启用它,但是注意:
如果您在doFullScreen
未启用的情况下启用doSelectDriver
,则会出现interface not supported
错误。启用它们,一切都会好起来的。
见: http: //www.micrel.cz/Dx/history.rtf </p>
不要忘记听按键并退出应用程序ESC或其他东西,否则您将陷入全屏模式。