我正在使用Delphi并需要获取当前的Windows DNS服务器IP地址,以便我可以进行查找.我应该打电话找什么功能?我现在唯一的解决方案是使用ipconfig/all来获取它,这太可怕了.
如何将包含函数指针的变量的值与函数地址进行比较?
我正在维护一些代码,它在Delphi 2007中失败了.声明是:
var
EditorFrameWindow: Function: HWnd Of Object = Nil;
Run Code Online (Sandbox Code Playgroud)
在表单激活中,我有:
procedure TEditForm.FormActivate(Sender: TObject);
begin
EditorFrameWindow := GetFrameWindow;
end;
Run Code Online (Sandbox Code Playgroud)
在表格停用我有:
procedure TEditForm.FormDeactivate(Sender: TObject);
begin
if EditorFrameWindow = GetFrameWindow then
EditorFrameWindow := nil;
end;
Run Code Online (Sandbox Code Playgroud)
所以正在发生的事情是表单被停用了两次,并且因为没有其他任何东西被激活而失败.调用FormDeactivate,它匹配,并且EditorFrameWindow全局设置为(nil,nil)(根据调试器).然后再次调用它,并调用存储在变量中的函数,但当然没有存储的函数,因此它跳过nil并创建一个异常.
我应该怎么做才能阻止这种情况发生?(框架已更改为选项卡式系统,因此操作可能已更改.)
这不是一个主要的泄漏,但更多的是我认为整洁的好,但我发现我的Delphi XE代码可以泄漏一个字符串.这是因为它被定义为threadvar,因为它需要,但是当线程终止时,它显然没有整理这些变量.
有没有办法在线程终止时手动整理字符串?我只是为它分配一个空字符串,或将其设置为零或其他什么?
是否在任何地方发布了MonoTouch垃圾收集的详细信息?我很想知道它在iPhone上是如何工作的.我想知道:
这些信息将帮助我们理解应用程序日志中的堆栈和线程信息.
[编辑]我现在已经在Hans Boehm的网站上找到了这些信息,但这非常通用,列出了实施者的各种选项和选择,包括如何处理线程.具体的MonoTouch信息是我想要的.
在与LockFile API需要一个文件句柄.我通常使用TStream进行文件访问,所以我不确定如何获得适当的句柄,仅给出一个ANSIString文件名.我的目的是在进程中锁定文件(最初可能不存在),将一些信息写入其他用户,然后解锁并删除它.
我会很感激示例代码或指向它以使其可靠.
我有一个应用程序可以将文本和图像打印到打印机上的页面上。在页脚处,我们输出一个图像,该图像通过加载一次进行缓存,并存储在 TBitmap 中。在打印例程中,它创建一个新的 TBitmap,然后调用一个分配缓存位图的函数。然后它最终在该位图上调用 Canvas.StretchDraw 。
Function GetFooterGraphic(Var xBitmap : TBitmap) : boolean;
begin
// load cache here
if assigned(g_xFooterBitmap) then
begin
xBitmap.Assign(g_xFooterBitmap);
result := true;
end;
end
// Get bitmap, then:
xCanvas.StretchDraw(xDrawRect, xBitmap);
Run Code Online (Sandbox Code Playgroud)
问题是位图在达到一定数量的页面后无法工作。我只能想象这是一个驱动程序问题,但大多数打印机在不同时间都会发生这种情况。我可以通过每次重新加载位图来修复它,但我宁愿保留缓存。
查看了 VCL,xBitmap.Assign 实际上只是添加了对存储项的引用。我想做的就是拿一份完整的副本,这是最有效的方法。这就涉及到一个问题:
如何使 TBitmap 内容完全独立于任何其他引用?
我希望保持缓存的 TBitmap 内容完全独立,并返回完整的(深层)副本,以便打印不会影响缓存的版本,从而希望解决此问题。
Delphi 2007(如果相关)。
我正在使用TextOut()在TCanvas上绘制文本,但我想要更大的字体.
我能做什么?
是否有可能在Delphi中"擦除"字符串?让我解释:
我正在编写一个包含DLL来授权用户的应用程序.它会将加密文件读入XML DOM,在那里使用信息,然后释放DOM.
很明显,未加密的XML仍然存在于DLL的内存中,因此容易受到检查.现在,我不会过分保护 - 用户可以创建另一个DLL - 但我想采取一个基本步骤来防止用户名在内存中存放多年.但是,由于引用,我认为我无论如何都不能轻易擦除内存.如果我遍历我的DOM(这是一个TNativeXML类)并找到每个字符串实例,然后将它变成类似"aaaaa"的东西,那么它实际上不会将新的字符串指针分配给DOM引用,然后保留旧的字符串在内存中等待重新分配?有没有办法确定我要杀死唯一的原始副本?
或者在D2007中是否有一种方法可以告诉它从堆中擦除所有未使用的内存?所以我可以释放DOM,然后告诉它擦除.
或者我应该继续我的下一个任务而忘记这一点因为它真的不值得打扰.
我有一个Delphi应用程序,它有一个文档浏览器作为主要表单.当用户打开文档时,我们打开一个编辑器窗口.我们希望每个编辑器在任务栏上都有一个按钮,以及主窗体.我已经应用了常规代码来执行此操作(下面),但是当我在使用编辑器窗口后单击主窗体时,编辑器将保持在顶部,而焦点位于主窗体上.我无法解决导致此行为的原因.
舞台设置:我打开主表单和文档表单.
点击另一个应用程序,点击主表单,主表单保持专注.(按预期行事.)
单击文档表单,单击主表单,文档表单返回到前面,但显示为非活动状态.(图为结果)
替代文字http://www.matthew-jones.com/temp_xfer/titlebarfailure.jpg
第一步,这是Delphi 2007,我在项目中:
Application.MainFormOnTaskBar := True;
Run Code Online (Sandbox Code Playgroud)
对于主表单,我没有其他代码.
对于文件表格,我有
procedure TCommonEditForm.CreateParams(var params: TCreateParams);
begin
inherited;
params.WndParent := 0; // GetDeskTopWindow; no diff
end;
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚是否有消息使这种情况发生,但找不到合适的东西.我在代码中搜索了与"激活"有关的任何内容.线索欢迎!
如何以编程方式检查使用delphi或C#安装的WMI版本(Windows Management Instrumentation)?
提前致谢.
我正在为PowerPoint编写一个加载项,并希望从编辑窗口中的当前幻灯片中获取文本.以下情况有效,但仅在幻灯片选择器窗格中选择了幻灯片时才有效.
xSelection := PowerPointApp.ActiveWindow.Selection;
if xSelection.Type = ppSelectionSlides then
begin
xSlide := xSelection.SlideRange.Item(1);
end;
Run Code Online (Sandbox Code Playgroud)
我一直在MSDN上追逐我的尾巴试图找出找出当前幻灯片的正确方法.DocumentWindow似乎没有当前的幻灯片.
我正在使用Delphi.我想跟踪按下哪个键.我正在使用TForm的KeyDown事件.它工作正常,但问题是,如果我按下并小写字母,虽然它给了我这封信的大写.如何识别按下的键是小写还是大写?
我必须编写一个监视事件的Windows服务应用程序(没有GUI),如果它发生,将向应用程序发送标准的Windows消息.应用程序的句柄将由DLL释放给服务,然后卸载,因此Windows消息是我们希望使用的方式.
但问题是服务是否需要做任何特殊的事情才能将SendMessage用于窗口句柄,因为它可能位于不同的屏幕上或Vista中.这是可能的,如果可以的话,我该怎么办?
delphi ×11
windows ×2
c# ×1
case ×1
delphi-xe ×1
dns ×1
focus ×1
ipc ×1
keydown ×1
locking ×1
networking ×1
powerpoint ×1
ram-scraping ×1
security ×1
sendmessage ×1
textout ×1
vcl ×1
winapi ×1
wmi ×1
xamarin.ios ×1