//以下てすとコード
Memo1は使っていません。
ボタンのみでテストしてます。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Memo1: TMemo;
procedure BitBtn1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses tvif;
procedure wait_command(wait_val:integer);
begin
while tvifGetStatus() <> wait_val do
begin
end;
end;
(*
static void help(void)
{
printf("ボブクロック\n2つの割り込みを使用したサンプルプログラムです。\nこのプログラムはオートリジュームオフで動作しています。\n");
}
*)
function FileSizeEx(const FileName: String): Integer;
var
R: TSearchRec;
begin
if FindFirst(FileName, faAnyFile, R) = 0 then Result := R.Size
else Result := -1;
FindClose(R);
end;
function read_script(filename:string;var script:Pchar):boolean;
var FS:TFileStream;
ByteA:TByteArray;
PByteA:^TByteArray;
begin
result:=False;
if FileExists(filename) then
begin
FS:=TFileStream.Create(filename,fmOpenRead);
FS.Read(ByteA,FileSizeEx(filename));
script:=@ByteA;
result:=True;
FS.Free;
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var script:Pchar;
begin
tvifInit(0,TVIF_DEFAULT_SCRIPT_LINE,TVP_ON);
// オートリジュームをオンに設定
tvifAutoResumScript(TVP_OFF);
// CGモデルを常駐させる。
tvifModelStationed(TVP_ON);
tvifSetWindowPosition(0,0);
// スクリプトが停止したときの状態の指定
// tvifSetStopTypeで指定される状態に切り替えない場合は下記のように指定する。
// ディフォルトはTVP_ON。
tvifSetStopMode(TVP_OFF);
// プレイヤーの起動
if (tvifSetCommand(TVP_EXECUTE) = TVP_OK) then
wait_command(TVP_STOP); // showmessage('test'); //
//if read_script('bobclock.tvml',script) then
if read_script('kaiwa.tvml',script) then
begin
tvifSetScript(script);
// メインスクリプトの更新
tvifSetCommand(TVP_UPDATE_SCRIPT);
// プレイヤーの更新を待つ
wait_command(TVP_UPDATE_SCRIPT);
// 再生
if tvifSetCommand(TVP_PLAY) = TVP_OK then
wait_command(TVP_PLAY);
end;
// スクリプト再生が停止したら(ここでは、割り込み&メインスクリプト共に監視する。)
repeat
until tvifGetStatus = TVP_STOP;
tvifSetCommand(TVP_SHUTDOWN);
tvifExit();
end;
end.
|