关于Microsoft的通知区域建议,我正在寻找想法或Delphi组件来实现Notification Area Flyouts.
第一个"自然"的想法是使用标准的Delphi表单,但我面临两个问题:
我会感谢任何线索或组件来实现它:)
最好的祝福.
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设置为样式.
案子
我正在尝试将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类有很多变化,包括重命名一些方法
与此更改以及其他和类接口中已更改的公共/已发布方法公司一起.
更新后,我得到了很多无法加载的软件包,包括dclcxPivotGridOLAPD15.bpl,它依赖于dclDataSnapServer150.bpl,它遇到了bpl上缺少的方法.
AFAIK我无法重新编译dclDataSnapServer150.bpl(也许还有其他失败的软件包,我刚刚停在这里).
IDE上的DataSnap和DevExpress支持对我来说是必须的
问题
我的应用程序需要删除一些文件,但这应该发生,直到下一次启动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)
但这并不能解决问题,但最糟糕的是:不管删除任何文件,无论嵌入空间如何!
从我的程序中删除文件延迟到下次重启的正确方法是什么?
谢谢.
我正在尝试一体化构建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) 我使用此代码来获取系统时间:
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中获得系统中断,任何人都可以修复它吗?
当然,这段代码不会编译.首先,我需要将一个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?
如何在用户没有管理员/提升权限时以编程方式更改文件关联(Win XP,Vista,7)?关于如何解决这个问题的任何想法?基本上我想保持我的应用程序像现在一样精简(它不需要提升安装和运行的权限).目前我提供了一个GUI界面,用户可以在其中更改文件关联,但如果用户权限有限,那么它所做的只是显示一条消息,表明它无法执行此操作,并向其解释如何激活"运行此程序"作为管理员"框然后重新启动该程序.如果用户拥有权限,那么我只需更改关联.
有一种更好的方法来保持"精简"吗?
是否可以将Delphi流(TStream后代)传递给用c/c ++编写的DLL?DLL将用Microsoft c/c ++编写.如果那是不可能的,那么如果我们使用C++ Builder来创建DLL呢?或者,是否有可以在Microsoft C/C++和Delphi之间共享的Stream(FIFO)类?
谢谢!
我有一个创新科技的脚本安装程序,让用户只安装火鸟的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位火鸟安装?
谢谢
我想同时使用InnoIDE和ISCC/ISPP,区别在于我想传递一个参数,它会覆盖脚本中的#define.
在命令行中,我可以传递/ Dmyarg = myvalue.这与脚本中的"#define myarg myvalue"相同.
遗憾的是,该脚本优先于命令行值.我知道,正如我尝试的那样.我可以明显地在脚本中注释#define,命令行定义也可以,但是我将无法使用IDE来构建.
是否可以在项目的某个地方为InnoIDE设置#define,或者是否有一些方法可以让命令行#define优先?