捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
Delphi程序启动技术概要
关键字:Delphi程序 启动 Splash Flash 多重实例
来 自:原创
平 台:Win9x,Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:初级 完成时间:2005/11/17
发布者:shadowrain 发布时间:2005/11/18
编辑器:DELPHI7 语  种:简体中文
分 类:窗体 下载浏览:3784/17600
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
本文讲解了在Delphi程序启动时的两种技术。
第一,避免多重实例;第二,启动画面,即Splash,在最后还谈到了利用Flash制作的Splash。
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
Delphi程序启动技术概要
shadowrain 2005/11/18 下+3784/浏+17601 评+13
Flash作的启动画面 (类似QQ启动)
zerohk 2005/3/7 下+3489/浏+15398 评+4
用Flash做程序界面的示例
tresss 2005/2/4 下+3315/浏+16032 评+6
相关评论
共有评论13条 当前显示最后6条评论
newshenliang 2005/11/23 10:15:30
to liumazi:
  看了你推荐的网址,应该就是这个问题,因为我的程序中也用到了包来共享内存和全局变量。结果获取类所在模块名取到了vcl70.bpl而不是EXE,看了你写的三个函数,想尝试改一下,但是水平太低,没改出来!还请帮忙改一下上面的函数!

  同时帖出shadowrain调用部分的代码,想不透为什么获取当前模块名时取到的是EXE,是正确的?

  最后还是要感谢shadowrain、liumazi,向你们学习!

    {20 获取当前模块名 }
    SetLength(ModuleName, 200);
    GetModuleFileName (HInstance, PChar(ModuleName), Length (ModuleName));
    ModuleName := PChar(ModuleName); // 调整长度
    ShowMessage(ModuleName);  {这里获取到的模块是EXE,是正确的}
    {30 列表最初实例的窗口 }
    EnumWindows(@EnumWndProc, 0);
    if FoundWnd <> 0 then
    begin
      {40 最后显示最初实例的窗口 }
      if not IsWindowVisible(FoundWnd) then
        PostMessage(FoundWnd, wm_App, 0, 0);
      SetForegroundWindow(FoundWnd);
    end;
shadowrain 2005/11/23 15:38:12
to newshenliang:
    真的是非常抱歉,这几天没有时间上来看,非常感谢大家关心这个小例子。
    对于运行时包我想说几句。第一,在运行时包下编译后的程序和正常情况下编译后的程序的运行方式是完全不一样的。做个实验:随便编译一个程序,在Application.Initialize处设断点,然后查看CPU窗口的第三行,你会发现Application调用Initialize方法是完全不同的,正常情况是直接调用Call TApplication.Initialize,在运行时包是通过方法的地址调用。第二,由于执行流程不一样,所以在列举窗口的回调函数里的这一句的
WinInstance := GetWindowLong(hwnd, GWL_HINSTANCE);  //注意那个hwnd这个句柄是Application的句柄
在运行包时是Application这个对象的句柄,Application全局对象存在于vcl70.bpl中的,所以取模块长文件名会取到vcl70.bpl的路径。
    第三,我本人也是刚入门,没学过多少东西,都是瞎写写。我不太理解为什么要运行时包,特别是当你勾选了运行时包后,你必须同时发布在编辑框里所有的bpl包,甚至vcl7?0.bpl等等一大堆。你可以试一下,一个Hello World的程序在选运行包的情况下编译,单独把EXE文件放到干净的环境中运行,看能否正常运行?请有哪位朋友给解释解释。
    以上只是问题的原因讨论,解决方案我现在还没有时间弄。不过我简单看了一下刘麻子的方法,可能照猫画虎差不多吧。
    现在要干活了,希望有兴趣的朋友与我保证沟通、讨论。
    QQ:50038490
    MSN:shadowrain2008@hotmail.com
newshenliang 2005/11/24 9:05:32
to shadowrain:
  我理解在项目中使用运行期包主要有几点好处:
  可以使用自己创建的包实现EXE和DLL之间共享内存、类、对象和公共全局变量等,这样为实现插件式开发提供了很多方便,这是使用运行期包的最主要原因。
  使用运行期包也可以大大减小EXE和DLL的大小,只需要发布特定的几个包,这样使多DLL构成的程序发布和更新方便很多!
yuqing2099 2005/12/7 22:43:44
直接转换居然通过了!
TApplication(WinInstance).ExeName
340340 2006/2/7 8:55:51
感谢你的开源精神,向你们学习。
legend888888 2008/7/7 14:43:34
very good
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表