文档章节

delphi的ActiveForm的开发几点总结

vga
 vga
发布于 2014/05/26 13:32
字数 803
阅读 873
收藏 0

delphi的ActiveForm的开发几点总结


delphi path login function parameters ie

1.打开多个包含控件的页面出错
在delphi7中开发的控件就有这个问题,原因出在本身开发环境的类库代码有问题。目前没有好的解决方法,官方给出过修改办法,我没有试验成功,使用delphi2007开发,到目前为止没有出现这类问题。

2.资源的释放
重载Destroy; override;函数,在IE6.0中,关闭窗口会调用到这个函数。但我拿到IE7.0看的时候却不行了,只会在跳转到另一个页面调用,直接点击IE右上角的关闭按钮时没用。
后来发现,点击关闭按钮时会产生“OnDestroy”事件,在它的调用代码中加入我们用来释放的资源,如
procedure TActiveFormX.DestroyEvent(Sender: TObject);
begin
  self.destroy_app();//用来释放资源
  if FEvents <> nil then FEvents.OnDestroy;
end;
可以解决问题。

3.调试
调试ActiveForm,不能直接点调试运行按钮,因为它不是一个可执行的程序。需要在这之前设定一下运行参数,在菜单run--parameters中“host application”设置ie程序的路径,一般为C:\Program Files\Internet Explorer\iexplore.exe,“parameters”设置包含控件的htm页的路径,如d:\finger\FingerProj1.htm,然后就可以设定断点开始调试。
还有一个地方需要注意,运行的时候ie会检测在C:\WINDOWS\Downloaded Program Files目录中是否已经有了该控件,如果有就会直接用该控件,新生成的控件不会被运行,所以最好在调试之前将C:\WINDOWS\Downloaded Program Files目录的该控件的旧有版本删除掉。

4.向javascript中传递事件
只能是如下形式
<script for="obj" event="onhello(arg)" language="jscript"></script>,“onhello”为事件名,arg为参数。
obj.onhello=function()
{}这种形式无效。

5.去除控件在网页中的虚框
由于安全的原因,默认情况下控件在页面中不能获得焦点,不能响应一些事件。解决的方法是使用document.write输出控件的标签代码。如:
function create_ck_webcamtest()
{
    document.write("<OBJECT id='ct_webcamtest' classid='clsid:CCCC7A66-B886-47F3-A2CD-09793F65DD1B' ");
    document.write("codebase='./twebcam.ocx' width=160 height=25 align=center hspace=0 vspace=0>");
    document.write("</OBJECT>");
}

6.压缩和签名
一般用delphi开发的控件比较大,只一个空白的ActiveForm就有500k左右。必须对它进行压缩,我用“aspack”,可以减少一半左右的大小,再可以打包成cab形似会更小。
签名也是必须的,不然IE会禁止控件的安装,使用微软提供的签名软件,前提是你要买一个证书,一年的费用1000多人民币。

7.将二进制文件传递给web服务器
//用户登陆示例
function TActiveFormX.User_Login(shop_id: Integer;
  const path: WideString): Integer;
var
IdHttp1:TIdHttp;
PostStream:TIdMultiPartFormDataStream;
ResponseStream:TIdStringStream;
ms:TMemoryStream;
login_path:string;
begin
   result:=-1;

   if not self.FIs_Scaned then
   begin
      result:=-11;
      exit;
   end;

   login_path:=trim(string(path));
   if login_path='' then
   begin
     result:=-12;
     exit;
   end;

   IdHttp1:=TIdHttp.Create(nil);
   PostStream:=TIdMultiPartFormDataStream.Create;
   ResponseStream:=TIdStringStream.Create('');
   ms:=TMemoryStream.Create;

   try
     ms.Write(self.fpimage.Bits^,self.fpimage.Width*self.fpimage.Height);
     ms.Position:=0;

     PostStream.AddFormField('shop_id',inttostr(shop_id));
     PostStream.AddFormField('fp_w',inttostr(self.fpimage.Width));
     PostStream.AddFormField('fp_h',inttostr(self.fpimage.Height));
     PostStream.AddObject('File1','image/fp_bmp',ms,'fp.bp');

     try
        IdHttp1.Request.ContentType:=PostStream.RequestContentType;
        IdHttp1.Post(login_path,PostStream,ResponseStream);

        result:=strtoint(trim(ResponseStream.DataString));
      except
         result:=-13;
      end;
   finally
      IdHttp1.Free;
      PostStream.Free;
      ms.Free;

      ResponseStream.Free;
   end;
end;

© 著作权归作者所有

vga

vga

粉丝 23
博文 366
码字总数 26645
作品 0
佳木斯
私信 提问
Delphi 编写ActiveForm窗体工程知识和样例(开发浏览器客户端应用程序)

Delphi 编写ActiveForm窗体工程知识和样例(开发浏览器客户端应用程序) 目录(?)[+] 一基础知识介绍 二 ActiveForm工程 一、基础知识介绍: 1、ActiveForm的基础知识介绍: 在Delphi中,Act...

vga
2014/03/06
672
0
​Delphi 开发ActiveX控件(非ActiveForm)

Delphi 开发ActiveX控件(非ActiveForm)   Q:为什么不采用ActiveForm工程?通过它可以快速开发带窗体控件,创建过程也非常简单(都不用考虑安全接口问题),很省事!   A:如果要实现的功能...

vga
2014/06/27
2.8K
0
桌面小程序开发使用什么语言

最近的情况是这样:单位主要从事的不是软件行业,有时举办某些活动的时候需要一些桌面小程序,所以这样的工作常交给我们来做。这些程序都是在Windows下运行。 我本来是一个半吊子的Java程序员...

明月_出天山
2013/09/27
30.8K
42
yii2 form表单

1、命名空间引用 use yiihelpersHtml; use yiiwidgetsActiveForm; 2、form表单的开始和结束 <?php $form = ActiveForm::begin([ 'action' =>'./admin.php?c=goods&a=add', 'method' => 'pos......

colin_86
2015/10/23
17
0
yii2超好用的日期组件和时间组件

作者:白狼 出处:http://www.manks.top/yii2datetimepicker.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权...

白狼栈
2016/05/05
216
0

没有更多内容

加载失败,请刷新页面

加载更多

一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器

一、前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 controll...

郑清
52分钟前
7
0
javascript-十六进制随机颜色

<script> // 编写一个函数,获得一个十六进制的随机颜色的字符串(如#20CD4F) // function randomColor(){ // var r = random(0,255).toString(16); // var g = random(0,255).toString(16......

ACKo
54分钟前
3
0
springBoot +mybatis 出现sql 语句在数据库可以查询到,但是赋值到实体类上就没有的情况?

1.不要老是反复查看自己是否写错了,为啥有的能出来有的出不来? 可以查看配置文件中是否配置全: 如果在application.yml 文件中是如下配置: mybatis: mapper-locations: classpath:mapp...

kuchawyz
今天
3
0
正则表达式

一、RegExp对象 进行验证和查找的API 1、创建对象: (1)用/创建(直接量):var reg=/正则/ig,表达式固定不变时使用 (2)用new创建:var reg=new RegExp(‘正则’,‘ig’),表达式需要...

wytao1995
今天
3
0
实战限流(guava的RateLimiter)

关于限流 常用的限流算法有漏桶算法和令牌桶算法,guava的RateLimiter使用的是令牌桶算法,也就是以固定的频率向桶中放入令牌,例如一秒钟10枚令牌,实际业务在每次响应请求之前都从桶中获取...

程序员欣宸
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部