我在prolog中很生疏,但我不确定为什么这样的事情会失败:
frack(3).
frack(X) :- frack(X-1).
Run Code Online (Sandbox Code Playgroud)
所以,如果我评估frack(4).从交互式提示中定义了上述事实,我希望它不应该无休止地递归,因为4-1 = 3.但是我在SWI-Prolog中得到了这个错误:
ERROR: Out of global stack
Run Code Online (Sandbox Code Playgroud) 最近我被要求自动化一个小程序,该程序提供一系列数据记录和四个潜在按钮中的任意两个,供用户在看到记录分析后选择.老板说,让用户看到分析是在浪费时间,因为用户总是选择按钮列表中的头号选项,他准备住我的猜测,除了最好的用户.因此,他希望添加一系列新按钮,以自动处理,手动处理和处理Case by Case.最后一个按钮只运行已有的代码.第二个按钮基本上什么都不做,只是退出.第一个按钮?嗯,这就是问题.
我决定做的是使用几个标志然后让自动路径根据分析模拟点击任何子按钮是最好的.问题是调用Button1Click(Sender)是不可能的,因为运行Analysis的过程称为RunAnalysis,并且没有附加到特定对象以传递TObject.我最终将Button1Click方法的内容重构为Button1Pressed,然后从Button1Click调用THAT.因此,我能够从RunAnalysis中调用Button1Pressed.
避免的路径是调用Button1Click(Nil).我没有尝试过,因为我有一个简单的解决方案(顺便说一句,感谢Modelmaker).但我的问题是,零参考是否有效或是否会造成灾难.我可以调用一个更高的函数(随机吗?)确实有一个发送者,JUST在过程调用中有一个发送者对象?如果我不使用任何实际参考发件人的东西,那么发件人对象有多重要?
系统详细信息:用于Windows XP的Win 7编程环境中的Delphi 7.
感谢GM,任何智慧
任何人都可以为我提供通过参数将任意数量的字节传递给dll函数的工作示例吗?
我想在没有任何额外内存单元的情况下完成它,只需要在基本的Windows类型上运行.
我需要每次调用"发送"大约300 kb的数据.
客户端分配的内存是否也应该在客户端免费?
我知道如何使用python的时间将"1328834615"转换为日期.
>>> import time
>>> time.ctime(1328834615)
'Fri Feb 10 08:43:35 2012'
Run Code Online (Sandbox Code Playgroud)
如何使用Delphi进行操作?
我试图让所有者在报告模式下使用4列绘制列表视图控件OnCustomDrawItem.
当我尝试更改Canvas.font.color时,我就是这样,我没有问题.
如果我设置canvas.font.size,我发现控件绘制的文本大小没有变化.
如果我试图从OnCustomDrawItem中接管文本的绘画,我发现我做不到.我知道如何使用OnCustomDraw在背景区域绘制,但我想自定义绘制listview ITEM,以便我可以设置文本的颜色和字体名称以及字体大小.
我知道在ListView所有者绘制的上下文中使用Canvas存在一些问题,以及在ListView中可以执行的操作的一些限制.
procedure TForm1.MyListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
Sender.Canvas.Font.Size := 13; // NO effect.
Sender.Canvas.Font.Color := clRed; // WORKS.
Sender.Canvas.Font.Style :=Sender.Canvas.Font.Style + [fsBold]; // WORKS!
end;
Run Code Online (Sandbox Code Playgroud) 前段时间我问过帮助在Delphi中进行持续集成工作.对于使用巡航控制,一个侧面答案有部分不完整(不适合我)的信息[这里] [2].
我已经让Jenkins/Hudson工作了,关于它的简单部分是(使用Delphi)配置完全通过Web浏览器完成.然而,使用CruiseControl.net设置起来要困难得多.
我想看一个示例ccnet.config,它将使用来自CruiseControl的MSBUILD构建一个hello-world delphi项目(Project1.dproj),并在每次修改subversion(或mercurial)上游源时自动重建.
到目前为止,我有:
ccnet.config这是我的ccnet.config,最初是我的,<exec>并按照以下建议更改为<msbuild>:
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
<!-- CRUISECONTROL.NET Server configuration -->
<project name="Project1">
<tasks>
<msbuild>
<projectFile>project1.dproj</projectFile>
</msbuild>
</tasks>
</project>
</cruisecontrol>
Run Code Online (Sandbox Code Playgroud)
更新:我原本无法c:\builds\ccnet.config从ccnet.exe 读取它,但我发现我可以使用命令行参数运行ccnet.exe(非服务模式),这让我找到了我的ccnet.config问题.
请在标记为重复之前阅读.
我正在创建一组依赖智能卡进行身份验证的应用程序.到目前为止,每个应用程序都单独控制了智能卡读卡器.几周后,我的一些客户将同时使用多个应用程序.所以,我想也许创建一个控制身份验证过程的服务应用程序会更实际.我希望我的桌面应用程序告诉他们对身份验证过程感兴趣的服务应用程序,然后服务应用程序会向他们提供有关当前用户的信息.这个部分很容易使用named pipes.难的是,如何能服务告知已发生的事件的桌面应用程序(UserLogIn,UserLogOut,PermissionsChanged,...仅举几例).到目前为止,我有两种方法.CallBack功能,和Messages.有没有人有更好的主意?我确定有人.
在Win2008R2上的PowerShell 2.0中,如果我想从注册表项获得相同的输出,"REG QUERY"将以可读的格式提供给我,使用来自特定注册表项的值,如下所示:
reg query hkcu\Software\Microsoft\CharMap
HKEY_CURRENT_USER\Software\Microsoft\CharMap
Advanced REG_DWORD 0x0
CodePage REG_SZ Unicode
Font REG_SZ Arial
Run Code Online (Sandbox Code Playgroud)
我如何使用PowerShell做到这一点?PowerShell的行为再一次使我神秘.
Get-ItemProperty示例:
Get-ItemProperty HKCU:\Software\Microsoft\CharMap
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft\CharMap
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft
PSChildName : CharMap
PSDrive : HKCU
PSProvider : Microsoft.PowerShell.Core\Registry
Advanced : 0
CodePage : Unicode
Font : Arial
Run Code Online (Sandbox Code Playgroud)
在我上面的设计示例中,我希望看到"高级","CodePage"和"字体",但不是任何PowerShell元数据(以PS开头的名称).遗憾地过滤名称"PS"对我来说不起作用,因为我并不真正尝试阅读MS Windows字符映射设置,我只是选择它们作为一个注册表项,可能每个人都有Windows,所以每个人都可以看到完全如此不同于使用PowerShell的经验是看一下注册表,相比之下说该REG.EXE程序.有理由说任何人可能想要从注册表项中获取注册表值而不获取任何元数据,并且任何在PowerShell中编写工具的人都可能想要执行这个简单的任务.
我希望输出类似REG QUERY但仍然是原生PowerShell格式,而不仅仅是扁平化为文本.我用谷歌搜索并搜索到了,似乎无法解决这个问题.
我希望能够做到这一点:
$all = GetRealRegistryKeysFrom( HKCU:\Software\Microsoft\CharMap )
for ($item in $all) { ... }
Run Code Online (Sandbox Code Playgroud)
更新使用下面的功能,效果很好....
例 Get-RegistryKeyPropertiesAndValues -path HKCU:\Software\.....
昨天我问如何使用 minidom用子节点替换节点上的文本。
今天我也试图<node/>用 <node>text</node>
不幸的是,我觉得我的结果是一个可怕的黑客:
import xml.dom.minidom
from xml.dom.minidom import Node
def makenode(text):
n = xml.dom.minidom.parseString(text)
return n.childNodes[0]
def setText(node, newText):
if node.firstChild==None:
str = node.toxml();
n = len(str)
str = str[0:n-2]+'>'+newText+'</'+node.nodeName+'>' #DISGUSTINGHACK!
node.parentNode.replaceChild( makenode(str),node )
return
if node.firstChild.nodeType != node.TEXT_NODE:
raise Exception("setText: node "+node.toxml()+" does not contain text")
node.firstChild.replaceWholeText(newText)
def test():
olddoc = '<test><test2/></test>'
doc=xml.dom.minidom.parseString(olddoc)
node = doc.firstChild.firstChild # <test2/>
print "before:",olddoc
setText(node,"textinsidetest2")
newdoc = doc.firstChild.toxml()
print "after: ", newdoc
# desired result:
# newdoc='<test><test2>textinsidetest2</test2></test>' …Run Code Online (Sandbox Code Playgroud) 我有一个专为多个显示器设计的应用程序.它启动了,我们试图避免激活不需要激活的窗口,因为用户只在一个地方进行键盘输入,每次我们在辅助监视器上激活一个新表单时,它会抓住键盘焦点,这是我们的事情.希望避免.
我们的内部基础TForm类有一个这样的方法,它直接使用Win32 ShowWindow函数,避免了VCL框架的内部可见性变化系统,它抓住了焦点:
procedure TOurForm.ShowWithoutActivate;
begin
ShowWindow(Self.Handle, SW_SHOWNOACTIVATE);
Self.Visible := true;
end;
Run Code Online (Sandbox Code Playgroud)
如果我这样做,它会抓住焦点:
Self.Visible := true; // TWindow.Visible = true, will grab focus, plus make window visible.
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我希望能够做的下一件事是设置最大化状态,以便表单在当前打开的监视器上最大化.我们如何将它放到特定的显示器上?通过修改Form的Left和Top属性,它始终以相同的方式工作.我们必须注意,如果我们在表单上存储Left/Top/Width/Height,然后将其恢复,那么当我们重新加载它时结果仍然有效.那不是我要问的.
我现在特别询问如何使用上面的自定义函数"显示"它来最大化表单.一个黑客攻击另一个黑客.这是我走过这个兔子洞的距离:
是否有可能使这个表单可见并使其处于我希望它不需要激活的窗口状态?如果我不能这样做,那么当我在辅助监视器上显示此表单时,用户将失去键盘焦点,这是我真正想要避免的.
我尝试使用Win32 ShowWindowAPI执行以下操作SW_SHOWMAXIMIZED:
ShowWindow(Self.Handle, SW_SHOWMAXIMIZED);
Run Code Online (Sandbox Code Playgroud)
以上似乎抓住焦点(激活).