Delphi和Flash交互
flashtool强刷工具使用方法

flashtool强刷工具使用方法Flashtool是DELPHI公司自主研发的一款专门用于刷新Delphi 汽车电脑的应用软件。
下面是店铺为您带来的flashtool强刷工具使用方法,希望对大家有所帮助。
flashtool强刷工具使用方法1、首先将手机关机,但这时不要着急将手机与电脑连接,备好数据线待用。
2、将下载好的强刷工具解压,进入文件夹,如下图:3、双击exe文件,运行强刷软件,进入软件界面。
4、单击刷写按钮,出现菜单。
如下图所示。
5、在菜单的左侧选择你想要强刷的强刷包,这里小编就随便选择一个了。
选择完毕后右侧会出现这个强刷包中所有包含的刷机文件。
然后点击OK。
请等待。
出现的界面如下图。
6、等待一会儿,就会出现下一步操作提示。
如下图:7、此时拿出手机,千万不要开机。
按住“音量-”按键不放,再用数据线连接手机和计算机。
此时手机指示灯是常亮绿色。
如果是第一次使用计算机上会有提示安装驱动。
请按照帖子一开始的提示安装正确的驱动。
驱动安装错误会找不到设备。
请务必仔细安装。
8、当安装完驱动后,手机就开始自动刷写了。
刷写过程在flashtool主界面的最底部会有绿色进度条。
当走到最后面。
等一下主界面上会有提示“finished”和三句让你重启手机的提示。
9、把数据线从手机上拔掉,关闭flashtool工具。
给手机开机。
10、第一次开机会很慢,请不用担心。
第一次进入系统后建议恢复一次出厂设置。
需要说明的有一点,小编提供的软件下载与上文图中所示的有些不同,这是因为版本不同的原因,不过都可以正常使用。
以上就是安趣官网为大家带来的flashtool教程,帮助大家了解flashtool怎么用。
flashtool使用方法1、解压SP_Flash_T ool_Linux_v5.1336.00.100_Customer.zipsudo mkdir /opt/MTK/SP_Flash_T ool_Linux_v5.1336.00.100_Customer/ sudo cp SP_Flash_T ool_Linux_v5.1336.00.100_Customer.zip /opt/MTK/SP_Flash_T ool_Linux_v5.1336.00.100_Customer/ cd/opt/MTK/SP_Flash_T ool_Linux_v5.1336.00.100_Customer/ sudo unzip SP_Flash_T ool_Linux_v5.1336.00.100_Customer.zip2、配置驱动sudo gedit /etc/udev/rules.d/53-android.rules这个文件是用于adb调试的,在打开的文件中增加以下文本:SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"SUBSYSTEM=="usb", ATTR{idVendor}="0bb4", ATTR{idProduct}="0c03", SYMLINK+="android_adb"sudo gedit /etc/udev/rules.d/53-MTKinc.rules这个文件是用于下载的,在打开的文件中增加以下文本:SUBSYSTEM=="usb", SYSFS{idVendor}=="0e8d", MODE="0666"SUBSYSTEM=="usb", ATTR{idVendor}="0e8d", ATTR{idProduct}="2000", SYMLINK+="android_adb"KERNEL=="ttyACM*", MODE="0666"驱动重新加载:sudo chmod a+rx /etc/udev/rules.d/53-android.rulessudo chmod a+rx /etc/udev/rules.d/53-MTKinc.rulessudo /etc/init.d/udev restart备注:idVendor 与 idProduct的通过lsusb命令查看KERNEL=="ttyACM*", MODE="0666"是给flash_tool运行过程中生成的设备文件增加权限,这样不需要管理员权限即可运行。
推荐-Delphi 6程序设计及其应用开发第5章 多媒体与动画操作 精品

False False
dtAutoSelect
Display
OleContainer1
TimeFormat
TfMilliSeconds
Visible
False
图5-6 Mediaplayer1控件布尔 值设置
图5-7 Mediaplayer1可播 放的设备类型
表5-7 TimeFormat部分取值及意义
向前跳过一帧
btBack
向后跳过一帧
btRecord 开始录音
btEject
弹出媒体文件(比如说弹出光盘)
表5-6 MediaPlayer1的属性设置
属性
属性值
AutoEnase
AutoRewind
True
EnableButtons. btRecord EnableButtons. btEject
返回本节
5.2 多媒体控件MediaPlayer的使用
5.2.1 多媒体控件MediaPlayer功能简介 5.2.2 使用MediaPlayer控件制作一个VCD
播放程序
返回本章首页
5.2.1 多媒体控件MediaPlayer功能简介
MediaPlayer控件不仅可以播放AVI文件,还可 以通过MCI播放很多媒体文件,比如WAV, MIDI,CD音乐文件和DAT文件。它位于控 件板的System页中,如图5-3所示。
图5-1 Animate控件的位置
返回本节
5.1.2 使用Animate控件实现动画播放的实例程序
1.向设计窗体中添加控件
如图5-2所示,在窗体的上半部分添加三个 TGroupBox控件、一个TOpenDialog控件、七 个TButton控件、三个TLabel控件、三个 TSpinEdit控件,在窗体下半部分添加一个 TListBox控件和一个Animate控件。其中, Animate控件的位置应根据运行程序时,需 要出现的位置来放置。
Delphi程序与Html界面的交互方法

Delphi程序与Html界面的交互方法Delphi程序与Html界面的交互方法在用Delphi、Visual Basic等可视化快速开发工具编写Windows 应用程序时,常会遇到这样几个问题:1) 希望程序界面美观。
在Delphi中,开发人员通常使用各种控件来实现界面的风格化,但缺点是造成应用程序体积较大,且在升级时常会被控件版本与Delphi版本不兼容带来的问题所困扰。
2) 希望应用程序在功能不变的情况下具有不同的界面风格。
这常常通过换“皮肤“的技术来实现,但一般实现“换肤“功能的控件体积都较大,且界面反应速度比较慢,而且“皮肤“的制作比较麻烦。
3) 程序界面的维护困难。
为了使界面与代码实现相分离而获得“换肤“等灵活性,通常要用到一些设计模式的技术,这对于不熟悉设计模式的开发人员来说比较困难。
微软在 Windows xp 之后的产品,包括 Vista, Windows 7 的应用程序的结构及部署将有重大变革,其中一项就是应用程序的界面完全以XML的一个扩展集XAML语言来描述,以便达到界面的高度可定制性。
其中Silverlight 就是一个典型的应用。
从中或许我们可以得到一些启示。
在Delphi 中类似的解决方案就是使用浏览器控件加载HTML 页面。
微软的网页浏览器 Internet Explorer 的核心被设计为可以嵌入到应用程序中重用的ActiveX组件,它有极强的可编程能力和与容器交互的能力,使得开发人员能够快速地开发出功能强劲的应用程序。
我们平常运行的 iexplorer.exe 其实只是一个外壳程序,真正的浏览网页、记录历史等工作是由嵌入其窗口的封装在shdocvw.dll 中的WebBrowser Control 来完成的。
Shdocvw.dll 的功能则是调用 mshtml.dll 来解析网页,以及在它的窗口中嵌入其它活动文档组件(如Microsoft Office、Adobe Acrobat 等应用程序的文档都可以嵌入到浏览器窗口中查看)。
js与flash交互 Word 文档

js与flash交互一js与flash交互操作//flash里传送值'<param name="flashvars" value="' + this.getFlashVars() + '" />'//flash里获取值this.uploadURL=root.loaderinfo.parameters.uploadURLSWFUpload.prototype.getFlashVars = function () {// Build a string from the post param objectvar paramString = this.buildParamString();var httpSuccessString = this.settings.http_success.join(",");// Build the parameter stringreturn ["movieName=", encodeURIComponent(this.movieName),"&uploadURL=", encodeURIComponent(this.settings.upload_url),"&useQueryString=", encodeURIComponent(e_query_string),"&requeueOnError=", encodeURIComponent(this.settings.requeue_on_error),"&httpSuccess=", encodeURIComponent(httpSuccessString),"&assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout),"&params=", encodeURIComponent(paramString),"&filePostName=", encodeURIComponent(this.settings.file_post_name),"&fileTypes=", encodeURIComponent(this.settings.file_types),"&fileTypesDescription=", encodeURIComponent(this.settings.file_types_description),"&fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit),"&fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit),"&fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit),"&debugEnabled=", encodeURIComponent(this.settings.debug_enabled),"&buttonImageURL=", encodeURIComponent(this.settings.button_image_url),"&buttonWidth=", encodeURIComponent(this.settings.button_width),"&buttonHeight=", encodeURIComponent(this.settings.button_height),"&buttonT ext=", encodeURIComponent(this.settings.button_text),"&buttonT extTopPadding=", encodeURIComponent(this.settings.button_text_top_padding),"&buttonT extLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding),"&buttonT extStyle=", encodeURIComponent(this.settings.button_text_style),"&buttonAction=", encodeURIComponent(this.settings.button_action),"&buttonDisabled=", encodeURIComponent(this.settings.button_disabled),"&buttonCursor=", encodeURIComponent(this.settings.button_cursor)].join("");};//js调用flash中的方法SWFUpload.prototype.callFlash = function (functionName, argumentArray) {argumentArray = argumentArray || [];var movieElement = this.getMovieElement();var returnValue, returnString;// Flash's method if calling ExternalInterface methods (code adapted from MooTools). try {returnString = movieElement.CallFunction('<invoke name="' + functionName +'" returntype="javascript">' + __flash__argumentsT oXML(argumentArray, 0) + '</invoke>');returnValue = eval(returnString);} catch (ex) {throw "Call to " + functionName + " failed";}// Unescape file post param valuesif (returnValue != undefined && typeof returnValue.post === "object") {returnValue = this.unescapeFilePostParams(returnValue);}return returnValue;};//调用SWFUpload.prototype.getStats = function () {return this.callFlash("GetStats");};SWFUpload.prototype.getFile = function (fileID) {if (typeof(fileID) === "number") {return this.callFlash("GetFileByIndex", [fileID]);} else {return this.callFlash("GetFile", [fileID]);}};SWFUpload.prototype.addFileParam = function (fileID, name, value) {return this.callFlash("AddFileParam", [fileID, name, value]);};SWFUpload.prototype.getMovieElement = function () {if (this.movieElement == undefined) {//this.movieName就是flash object的id this.movieElement = document.getElementById(this.movieName);}if (this.movieElement === null) {throw "Could not find Flash element";}return this.movieElement;};二JS-和 flash 交互(参考资料)1) JS 中往SWF中传值:在HTML中嵌入SWF时就通过get方式传入:$str = "chatOnline.swf". "?psd=".$psd."&myid=".$id."&otherid=".$otherid."&flag=".$flag;<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"codebase="/pub/shockwave/cabs/flash/swflash.cab#version=8, 0,0,0" width="900" height="600" id="chatOnline" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="movie" value="<?=$str?>" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="<?=$str?>" quality="high" bgcolor="#ffffff" width="900" height="600" name="chatOnline" align="middle" allowScriptAccess="never" allowNetworking="internal" autostart="0" type="application/x-shockwave-flash"pluginspage="/go/getflashplayer" /></object>2) SWF 调用JS 事件:a: getURL();这个方法实际上是在SWF中打开一个新的窗口;传入的是窗口的URL.但我们知道在游览器的地址栏中可以如下调用JS事件:javascript:alert(3);所以我们也可以在SWF中这样调用: getURL("javascript:showDetail('3');");b: call();import flash.external.*;ExternalInterface.call("up", value1,value2);<script>function up(val1,val2){//do someThing!}</script>3) JS 调用SWF 事件;转到的帧数:<input type="text" id="gotoFrame"onKeyUp="javascript:sample.GotoFrame(this.value)"/>传递给Flash的值:<input type="text" id="setVari"onKeyUp="javascript:sample.SetVariable('myvar',this.value);"/><a href="javascript:sample.Play();">播放</a><a href="javascript:sample.Stop();">停止</a><a href="javascript:sample.Rewind();">返回第一帧</a><a href="javascript:sample.Zoom(50);">放大</a><a href="javascript:sample.Zoom(200);">缩小</a><script type="text/javascript">function F(){showFrame.innerHTML="播放帧数:"+sample.CurrentFrame()+"/"+sample.TotalFrames; isPlaying.innerHTML="是否处于播放状态:"+sample.IsPlaying();}setInterval(F,100);</script><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"codebase="/pub/shockwave/cabs/flash/swflash.cab#version=8, 0,0,0" width="400" height="140" id="sample" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="movie" value="sample.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="sample.swf" quality="high" bgcolor="#ffffff" width="400" height="140" name="sample" align="middle" allowScriptAccess="never" allowNetworking="internal" autostart="0" type="application/x-shockwave-flash"pluginspage="/go/getflashplayer" /></object>在sample.swf 内的舞台上有一文本框,它的属性里的Var值是:myvar三JS与flash交互遇到的问题一、由于嵌入标记以及浏览器等原因,导致JS无法调用FLASH中的方法使用swfobject来嵌入你的FLASH它的优点有:•简单简洁,再也不那COPY那一大段的标记了•支持指定FLASH版本,如果版本不够可自动升级二、FLASH调用JS的时候,JS对象还不存在由于大部分脚本是放到页面最底部的(这样做的原因是让浏览器先渲染出界面,因为载入脚本时会停止渲染页面),所以如果在脚本导入之前就嵌入了FLASH,并且FLASH尝试调用JS 方法,此时可能JS对象所在的脚本还未执行。
Delphi调用外部程序详解[宝典]
![Delphi调用外部程序详解[宝典]](https://img.taocdn.com/s3/m/d397bf39dc36a32d7375a417866fb84ae45cc311.png)
Delphi调用外部程序详解Delphi调用外部程序详解(Shellexecute,Winexec)2008-10-0411:27Delphi调用外部程序详解WinExec主要运行EXE文件。
如:WinExec(’Notepad.exe Readme.txt’, SW_SHOW);ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。
首先必须引用shellapi.pas单元:uses ShellAPI;1.标准用法ShellExecute函数原型及参数含义如下:function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;●hWnd:用于指定父窗口句柄。
当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。
例如,可以将其设置为应用程序主窗口句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。
●Operation:用于指定要进行的操作。
其中“open”操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件夹;“print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。
当参数设为nil时,表示执行默认操作“open”。
●FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。
●Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。
●Directory:用于指定默认目录。
●ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。
delphi tms 用法

delphi tms 用法Delphi是一种面向对象的编程语言,TMS是一套广泛使用的Delphi组件库。
本文将逐步介绍Delphi TMS组件库的用法,帮助您更好地理解如何使用它们来开发强大的应用程序。
第一步:安装和设置TMS组件库首先,我们需要下载和安装TMS组件库。
您可以在TMS软件官方网站上找到最新版本的组件库,并按照他们的安装向导进行安装。
安装完成后,启动Delphi集成开发环境(IDE)。
接下来,我们需要在Delphi IDE中设置TMS组件库。
打开Delphi IDE,点击“Tools”菜单,选择“TMS Web Update”选项。
在弹出的对话框中,点击“Add”按钮,然后选择您安装TMS组件库的目录。
点击“Close”按钮保存设置。
第二步:添加TMS组件到窗体现在,我们可以将TMS组件添加到我们的窗体上。
打开一个新的窗体,确保“Form Designer”处于活动状态。
在IDE中,可以在“Tool Palette”工具箱中找到TMS组件。
单击鼠标右键,选择“Add/Remove Items”选项,然后在弹出的对话框中选择“TMS Software”选项卡。
选择您所需的TMS组件,并点击“OK”按钮。
一旦您添加了TMS组件到工具箱中,您可以在工具箱中找到它们,并将其拖放到窗体上。
TMS组件将自动与窗体相关联,并显示在“Object Inspector”属性窗口中,您可以在这里设置它们的属性和事件。
第三步:使用TMS组件进行界面设计TMS组件库提供了许多强大的组件,例如TAdvStringGrid、TAdvSmoothListBox、TAdvSmoothSlider等。
您可以使用这些组件来创建交互式的用户界面。
拖放组件到窗体上时,您可以调整它们的大小和位置,以适应您的设计需求。
在“Object Inspector”窗口中,您可以设置组件的属性,例如外观、行为和数据绑定等。
通过设置这些属性,您可以定制组件的外观和行为,以满足您的特定需求。
Delphi实现窗体内嵌其他应用程序窗体

Delphi实现窗体内嵌其他应用程序窗体[代码]Delphi实现窗体内嵌其他应用程序窗体实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄),这样就达成了内嵌的效果。
本文实现的是内嵌一个记事本程序,如下图:在实现细节上需要注意几点:1.为了美化程序的嵌入效果,需要隐藏其标题栏2.在外部窗体大小变化时,需要内嵌的窗体也随之变化大小3.外部程序退出时,内嵌的程序也要退出下面是例子程序。
新建窗体,上面放置一个Panel控件,名为pnlApp,然后按下面代码编写:unit frmTestEmbedApp;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls;typeTForm1 = class(TForm)pnlApp: TPanel;procedure FormCreate(Sender: TObject);procedure FormClose(Sender: TObject; var Action: TCloseAction);procedure FormResize(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;hWin: HWND = 0;implementation{$R *.dfm}type// 存储窗体信息PProcessWindow = ^TProcessWindow;TProcessWindow = recordProcessID: Cardinal;FoundWindow: hWnd;end;// 窗体枚举函数function EnumWindowsProc(Wnd: HWND; ProcWndInfo: PProcessWindow): BOOL; stdcall;varWndProcessID: Cardinal;beginGetWindowThreadProcessId(Wnd, @WndProcessID);if WndProcessID = ProcWndInfo^.ProcessID then beginProcWndInfo^.FoundWindow := Wnd;Result := False; // 已找到,故停止EnumWindowsendelseResult := True; // 继续查找end;// 由 ProcessID 查找窗体 Handlefunction GetProcessWindow(ProcessID: Cardinal): HWND;varProcWndInfo: TProcessWindow;beginProcWndInfo.ProcessID := ProcessID;ProcWndInfo.FoundWindow := 0;EnumWindows(@EnumWindowsProc,Integer(@ProcWndInfo)); // 查找窗体Result := ProcWndInfo.FoundWindow;end;// 在 Panel 上内嵌运行程序function RunAppInPanel(const AppFileName: string; ParentHandle: HWND; var WinHandle: HWND): Boolean;varsi: STARTUPINFO;pi: TProcessInformation;beginResult := False;// 启动进程FillChar(si, SizeOf(si), 0);si.cb := SizeOf(si);si.wShowWindow := SW_SHOW;if not CreateProcess(nil, PChar(AppFileName), nil, nil, true,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi) then Exit;// 等待进程启动WaitForInputIdle(pi.hProcess, 10000);// 取得进程的 HandleWinHandle := GetProcessWindow(pi.dwProcessID);if WinHandle > 0 then begin// 设定父窗体Windows.SetParent(WinHandle, ParentHandle);// 设定窗体位置SetWindowPos(WinHandle, 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOZORDER);// 去掉标题栏SetWindowLong(WinHandle, GWL_STYLE, GetWindowLong(WinHandle, GWL_STYLE)and (not WS_CAPTION) and (not WS_BORDER) and (not WS_THICKFRAME));Result := True;end;// 释放 HandleCloseHandle(pi.hProcess);CloseHandle(pi.hThread);end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin// 退出时向内嵌程序发关闭消息if hWin > 0 then PostMessage(hWin, WM_CLOSE, 0, 0);end;procedure TForm1.FormCreate(Sender: TObject);constApp = 'C:\Windows\Notepad.exe';beginpnlApp.Align := alClient;// 启动内嵌程序if not RunAppInPanel(App, pnlApp.Handle, hWin) then ShowMessage('App not found');end;procedure TForm1.FormResize(Sender: TObject);begin// 保持内嵌程序充满 pnlAppif hWin <> 0 then MoveWindow(hWin, 0, 0, pnlApp.ClientWidth, pnlApp.ClientHeight, True);end;end.这种方式也存在几个问题:问题1:如果程序有Splash窗体先显示,则实际窗体无法内嵌,因为仅将Splash窗体的父窗体设定为本程序的控件句柄,后续窗体无法设定。
flash与vc交互

利用flash可以作出很漂亮的动画,想不想让自己的程序也有这样漂亮的界面呢?^_^,其实,要做到这点也不难。
在这里将介绍怎样把falsh制作的界面嵌入到自己的程序中,并让flash动画和自己的程序进行交互。
我们分为两步来走:一、将flash动画嵌入自己的程序中,这一点比较简单,使用shockwave flash object控件就可以实现。
这个控件在安装flash的时候就装到你的系统上了,flash5.0以下的文件名是swflash.ocx,5.0以上版本的名字是flash.ocx,在系统目录里面应该可以找得到;二、在flash动画和自己的程序中传递消息进行交互。
这一点也是要通过控件来实现,不过得在flash动画和自己的程序中做些处理。
下面我们来具体说明操作过程:一、将flash动画嵌入自己的程序中。
所有在windows平台上的支持ocx控件的软件开发工具都可以做到这一点。
我使用的是vc++6.0,就以这个的做法来介绍。
1、检查你的系统上是否有shockwave flash object控件并已注册。
如果你的系统上装有flash,则就有这个控件,否则的话,可以到网上下载一个过来安装。
2、新建一个MFC对话框应用程序,假设命名为PlayFlash。
3、添加shockwave flash object控件。
建立对话框应用程序后,在主菜单里选择“工程->添加工程->components and controls”菜单选项,这时会弹出一个components and controls gallery文件选择对话框,里面有两个文件夹,一个是registered activex controls,一个是visual c++components。
选择第一文件夹后会出现一系列系统上已注册过的activex控件。
在里面选择shockwave flash object(如果你系统上没这个控件,这里面就找不到了,可以去download个下来安装),点击insert将它插入工程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
delphi与flash通信交互的文本简单实现
2008-05-02 16:54
delphi与flash通信交互的文本简单实现
delphi与flash交互通信的优点在于:开发delphi应用程序时充分发挥flash表现力强的特点,只要运用得当,flash开发的色彩斑斓的界面就会出现在delphi应用程序当中,且无需delphi程序员去堆放大量浪费资源的控件。
delphi与flash交互具体存在两个问题:
1、如何能让delphi应用程序接收到flash发来的消息,并处理;
2、怎样能从delphi应用程序向flash传递命令,控制.swf文件的运行。
以下逐一解决
注:我使用的时delphi 7+flash 8, 控件使用原生的TShockwaveFlash(此控件的安装,请参见其它资料),
一、flash向delphi发送消息:
flash向delphi发送消息其实很简单,只需要运用flash中自带的fscommand命令即可,此命令在作者能见到的各版flash中都存在,
尽管后期版本从安全角度考虑不提倡使用它,但在这里此命令我们仍可以大加利用。
例如(在qqp_528flash.swf中):
//flash中的代码
on (click){
fscommand("qqp_528","flash向delphi程序发消息了");
}
------------------
OK,以上代表flash中某一元件的单击事件会触发fscommand命令了,其中参数“qqp_528”是命令,后面的就是命令的值。
以下为在delphi中使用的接收代码:
procedure TFrmMain.Flash1FSCommand(Sender: TObject; const command,
args: WideString);
begin
If Command='qqp_528' Then
Begin
ShowMessage(args);
End;
end;
简单吧,在TShockwaveFlash控件中已经存在了专门接收命令的事件了"OnFSCommand",其它的就很清楚了。
二、delphi向flash传递指令:
delphi方面,执行代码如下:
Flash1.SetVariable('qqp_528toflash','这是delphi向flash传的');
从这一句代码可见,被执行的flash中必需存在变量名为"qqp_528toflash"的元件,应为文本元件(必须),后面是传递的内容。
执行后会在flash中名为qqp_528toflash的文本元件中显示传入的“这是delphi向flash传的”这段内容。
另外注意,以上只是代码的片段,在执行以上代码之前千万别忘了在delphi应用程序中播放flash呀,
播放代码为:
Flash1.LoadMovie(0,'qqp_528flash.swf');
Flash1.Play;
flash与delphi间的通信
2008-07-02 23:39:08| 分类:Flash | 标签:|字号大中小订阅
Author:luhui PublishTime:2005-09-02
flash与delphi间的通信
flash的优势在于图形表现方面,但他不能对系统进行直接的底层操作。
delphi能,但他的界面一般都是灰突突的,想要开发出玫慕缑妗U媸且恍倪垦呐丁?
尤其是在善变的客户面前。
如果两者结合呢?自己想吧。
首先我们还是考虑怎样实现,原理的东西你在delphi中搞懂了,在vb,c#等是一样的。
(1)在delphi中安装控件
swflash.ocx,要能在其他环境中运行flash,一定少不了他。
你可以
在Win98的$Windows\System\Macromed \Flash中或在Win2000中的$Winnt\System32\
Macromed\Flash中找到它。
运行Delphi后,选择选单Component→Import ActiveX Control,找到SWFlash.OCX 文件进行安装。
安装完成后,ActiveX面板里出现TShockwaveFlash控件,这是Delphi对SWFlash.OCX的封装.使你能够在delphi环境中使用delphi的语言控制flash.相关截图:
图片如下:
图片如下:
图片如下:
(2)flash调用delphi
安装好后,你可以把flash控件放到窗体上,做好了把?好,现在讨论怎样通过flash调用delphi中的代码?在flash中有一个函数fscommand()他的说明是这样的:使SWF 文件能够与Flash Player 或承载Flash Player 的程序(如Web 浏览器)进行通讯。
还可使用fscommand 动作将消息传递给Macromedia Director,或者传递给Visual Basic、Visual C++ 和其它可承载ActiveX 控件的
程序。
呵呵,也就是说可以向包含swflash.ocx的外部程序传递参数。
图片如下:
fscommand("mycommand", "msg");中的两个参数可以任意修改,然后你在delphi中判断。
具体代表什么意思只有你知道。
(3)delphi调用flash
可以利用SetVariable('myinfo','val')函数,第一个参数是flash中主场景第一桢可见的变量,第二个参数是你要为变量附的值。
在delphi中如下,设置flash中的一个名为myinfo的变量值为字符串“val”
self.ShockwaveFlash1.SetVariable('myinfo','val');
这个有一个问题需要注意:
当向flash附值的时候,flash怎样知道变量的值已经改变了呢?
一般的做法是通过一个循环不断的检测变量值是否已经改变,这个显然效率很低。
一个更好的做法是
var myval = "";
this.onmyvalchange = function(prop, oldval, newval, userData) {
trace("delphi为myval附的新值为:"+newval);
};
_root.watch("myval", this.onmyvalchange);
利用变量的监视,如上。
(4)其他
开发过程中可能还会遇到很多问题,比如屏蔽右键菜单,在delphi中改变窗体大小flash不能自动刷新等,
//设_root下info变量
sf.SetVariable( '_ ', edtInfo.Text);
//调用_root第1帧这代码,可在其代码中设置值使起作用
sf.TCallFrame( '_root ', 0);
...
或者,edtText为动态文件变量名可试。