小编jac*_*ate的帖子

Delphi中的Windows 7样式通知弹出窗口

关于Microsoft的通知区域建议,我正在寻找想法或Delphi组件来实现Notification Area Flyouts.

替代文字

第一个"自然"的想法是使用标准的Delphi表单,但我面临两个问题:

  1. 我无法使用标准的"BorderStyle"属性获取表单边框行为.尝试使用GlassFrame属性"模仿"边框,并将BorderStyle设置为bsNone,但是没有边框时没有GlassFrame(至少在Delphi 2007中).
  2. 当用户点击表单本身的任何地方时,我无法弄清楚如何使表单关闭.昨天我尝试了不同的消息,但没有人按预期工作.

我会感谢任何线索或组件来实现它:)

最好的祝福.

jachguate.

PS.在Win7(Delphi)中将通知区域图标转换为程序图标时存在相关问题.

更新[0] 我还在寻找建议.@skamradt答案看起来非常好,但遗憾的是在实践中效果不佳.

更新[1] 最后,在调用SetForegroundWindog强制弹出"激活"后,自动关闭行为正在使用WM_ACTIVATE消息

begin
  FlyoutForm.Show;
  SetForegroundWindow(FlyoutForm.Handle);
end;
Run Code Online (Sandbox Code Playgroud)

现在,我正在寻找建议来达到边界行为和视觉风格,因为最接近的行为是使用样式实现的WS_POPUP或WS_DLGFRAME,而最接近的视觉目标是将WSFOPUP或WS_THICKFRAME设置为样式.

delphi windows-7 notification-area

16
推荐指数
1
解决办法
4490
查看次数

是否可以在Delphi XE和DataSnap中使用Indy 10.5.8.0?

案子

我正在尝试将INDY更新为我的Delphi XE(Update 1)的最新版本,所以我从indy.fulgan.com/ZIP下载了最新的INDY10文件(Indy_4545.zip).

这些包成功编译,现在我甚至可以在about box对话框中看到新版本10.5.8.0,但是在IDE重启之后我收到一条消息说:

No se encuentra el punto de entrada del procedimiento @ Idhttp @ TIdCustomHTTP @ GetRequestHeaders $ qqrv en la bibliotecadevínculosdinámicosIndyProtocols150.bpl.

我免费翻译成英文:

在动态链接库IndyProtocols150.bpl上找不到过程@ Idhttp @ TIdCustomHTTP @ GetRequestHeaders $ qqrv的入口点.

在对新旧IdHTTP.pas进行快速比较后,我发现TIdCustomHttp类有很多变化,包括重命名一些方法

  • GetResponseHeaders到GetResponse
  • GetRequestHeaders到GetRequest
  • SetRequestHeaders to SetRequest

与此更改以及其他和类接口中已更改的公共/已发布方法公司一起.

更新后,我得到了很多无法加载的软件包,包括dclcxPivotGridOLAPD15.bpl,它依赖于dclDataSnapServer150.bpl,它遇到了bpl上缺少的方法.

AFAIK我无法重新编译dclDataSnapServer150.bpl(也许还有其他失败的软件包,我刚刚停在这里).

IDE上的DataSnap和DevExpress支持对我来说是必须的

问题

  1. 是否有安全的预先建立的路径来更新到最新的Delphi XE INDY?
  2. 如果没有,我是否安全,只需通过创建旧的公共方法并在实现部分调用新的方法来填充源代码?
  3. 我错过了其他的东西,还是我真的坚持使用INDY 10.5.7直到下一个Delphi次要/主要版本?

delphi indy indy10 delphi-xe

8
推荐指数
3
解决办法
9011
查看次数

如何在我的程序下次重启之前延迟文件删除?

我的应用程序需要删除一些文件,但这应该发生,直到下一次启动Windows.

我现在正在做的是在RunOnce注册表项中写入此字符串值:

Command.com /c del c:\some file.ext
Run Code Online (Sandbox Code Playgroud)

但我发现嵌入空间的路径存在问题.我不得不说我也试过这个:

Command.com /c del "c:\some file.ext"
Run Code Online (Sandbox Code Playgroud)

但这并不能解决问题,但最糟糕的是:不管删除任何文件,无论嵌入空间如何!

从我的程序中删除文件延迟到下次重启的正确方法是什么?

谢谢.

delphi delphi-7

6
推荐指数
1
解决办法
2170
查看次数

Inno安装RegAsm.exe错误

我正在尝试一体化构建32/64位安装程序.在32位与64位机器上唯一不同的是对RegAsm.exe的调用.对于64位机器,代码必须查看64位框架,而对于32位,它会查看标准框架.

32位:"C:\ windows\microsoft.net\framework"64bit:"C:\ windows\microsoft.net\framework64";

我有我的软件包设置来运行安装操作.对于我的64位操作,我有IsWin64的检查启用.

文件名:{dotnet4064}\Regasm.exe; 参数:"""mydll.dll""/ codebase"; WorkingDir:{app}; StatusMsg:"注册加载项"; 标志:RunHidden; 检查:IsWin64;

错误之前的几行日志文件

2012-12-05 14:58:53.233   Installing the file.
2012-12-05 14:58:53.281   Successfully installed the file.
2012-12-05 14:58:53.281   -- Icon entry --
2012-12-05 14:58:53.281   Filename: C:\Documents and Settings\All Users\Start Menu\Programs\myprogram\my program\Uninstall  myprogram.lnk
2012-12-05 14:58:53.281   Creating directory: C:\Documents and Settings\All Users\Start Menu\Programs\myprogram\my program
2012-12-05 14:58:53.483   -- Icon entry --
2012-12-05 14:58:53.483   Filename: C:\Documents and Settings\All Users\Start Menu\Programs\myprogram\my program\myprogram.lnk
2012-12-05 14:58:54.224   -- Icon entry --
2012-12-05 14:58:54.224   Filename: C:\Documents and Settings\All Users\Desktop\myprogram.lnk
2012-12-05 14:58:54.281 …
Run Code Online (Sandbox Code Playgroud)

installation inno-setup

6
推荐指数
1
解决办法
3045
查看次数

为什么中断0x2A在x64中不起作用?

我使用此代码来获取系统时间:

procedure GetSystemUpTime(var Hour, Minute : integer);

function GetSysTime : dword;
  asm
    int $2a
  end;
begin
  Hour := GetSysTime() div 3600000;
  Minute := GetSysTime() mod 3600000 div 60000;
end;

procedure TForm1.Button1Click(Sender : TObject);
var
  H, M : integer;
begin
  GetSystemUpTime(H, M);
  Label1.Caption := IntToStr(H) + ':' + IntToStr(M);
end;
Run Code Online (Sandbox Code Playgroud)

我测试它win8 x86并且XP x86它可以工作,但是win7 x64 错误地输入了:

在此输入图像描述

我想知道如何在x64中获得系统中断,任何人都可以修复它吗?

windows delphi assembly

5
推荐指数
1
解决办法
597
查看次数

如何在TObject属性中存储Integer,然后向用户显示该值?

当然,这段代码不会编译.首先,我需要将一个TObject值转换为Integer.然后,将其作为字符串读取.我应该使用什么功能?

for i := 1 to 9 do begin
    cmbLanguage.Items.AddObject(Format('Item %d', [i]), TObject(i));
end;

cmbLanguage.ItemIndex := 2;

ShowMessage(cmbLanguage.Items.Objects[cmbLanguage.ItemIndex]);
Run Code Online (Sandbox Code Playgroud)

或者也许首先可以使用String而不是Integer?

delphi delphi-7

5
推荐指数
1
解决办法
8047
查看次数

如何以编程方式更改文件关联而不需要提升

如何在用户没有管理员/提升权限时以编程方式更改文件关联(Win XP,Vista,7)?关于如何解决这个问题的任何想法?基本上我想保持我的应用程序像现在一样精简(它不需要提升安装和运行的权限).目前我提供了一个GUI界面,用户可以在其中更改文件关联,但如果用户权限有限,那么它所做的只是显示一条消息,表明它无法执行此操作,并向其解释如何激活"运行此程序"作为管理员"框然后重新启动该程序.如果用户拥有权限,那么我只需更改关联.

有一种更好的方法来保持"精简"吗?

delphi registry file-association

4
推荐指数
1
解决办法
4654
查看次数

如何将Delphi Stream传递给ac/c ++ DLL

是否可以将Delphi流(TStream后代)传递给用c/c ++编写的DLL?DLL将用Microsoft c/c ++编写.如果那是不可能的,那么如果我们使用C++ Builder来创建DLL呢?或者,是否有可以在Microsoft C/C++和Delphi之间共享的Stream(FIFO)类?

谢谢!

c++ delphi stream

4
推荐指数
1
解决办法
1867
查看次数

使用Inno Setup安装正确版本的Firebird(32位或64位)

我有一个创新科技的脚本安装程序,让用户只安装火鸟的32位版本的选项.现在我有一台64位机器,并使用6位Firebird确认我的应用程序与它一起使用我希望我的安装程序在32位平台上显示32位Firebird安装程序,在64位平台上显示64位安装程序.

在"安装操作"部分中,我显示了Firebird安装程序的复选框,从而为用户提供了安装它的选项(如果未安装)或未运行Firebird安装(如果已安装).

这是我的脚本:

[Run]

Filename: {app}\Firebird-2.5.1.26351_1_x64.exe; Parameters: "/SILENT /NOCPL"; WorkingDir: {app}; Flags: postinstall skipifsilent 64bit; Check: Is64BitInstallMode; 

Filename: {app}\Firebird-2.5.1.26351_1_Win32.exe; Parameters: "/SILENT /NOCPL"; WorkingDir: {app}; Flags: postinstall skipifsilent 32bit; Check: "not Is64BitInstallMode"; 
Run Code Online (Sandbox Code Playgroud)

问题是,对话框窗体上只显示32位安装程序.

这两个文件都包含在内,以便在我的应用安装期间都可用:

[Files]

Source: ..\Firebird-2.5.1.26351_1_x64.exe; DestDir: {app}

Source: ..\Firebird-2.5.1.26351_1_Win32.exe; DestDir: {app}
Run Code Online (Sandbox Code Playgroud)

我怎样才能让我的安装程序,以显示在64位平台上的64位火鸟安装?

谢谢

installer inno-setup

4
推荐指数
1
解决办法
3058
查看次数

Inno Setup IDE和ISCC/ISPP传递定义

我想同时使用InnoIDE和ISCC/ISPP,区别在于我想传递一个参数,它会覆盖脚本中的#define.

在命令行中,我可以传递/ Dmyarg = myvalue.这与脚本中的"#define myarg myvalue"相同.

遗憾的是,该脚本优先于命令行值.我知道,正如我尝试的那样.我可以明显地在脚本中注释#define,命令行定义也可以,但是我将无法使用IDE来构建.

是否可以在项目的某个地方为InnoIDE设置#define,或者是否有一些方法可以让命令行#define优先?

inno-setup command-line-arguments

4
推荐指数
1
解决办法
2667
查看次数