假设我有一个Treeview,它包含带有Object指针的项目.如何从所选项目中确定对象是什么,以便我可以访问它?
下面是一些提供想法的类和代码的基本示例:注意:TChildObject1和TChildObject2继承自TMyObject.
type
TMyObject = class
private
FName: string;
public
property Name: string read FName write FName;
constructor Create(aName: string);
end;
type
TChildObject1 = class(TMyObject)
private
FSomeString: string;
public
property SomeString: string read FSomeString write FSomeString;
constructor Create(aName: string);
destructor Destroy; override;
end;
type
TChildObject2 = class(TMyObject)
private
FSomeInteger: integer;
public
property SomeInteger: integer read FSomeInteger write FSomeInteger;
constructor Create(aName: string);
destructor Destroy; override;
end;
Run Code Online (Sandbox Code Playgroud)
让我们说它们被创建并添加到TTreeview中,如下所示:
procedure NewChild1(aTreeView: TTreeView; aName: string);
var
Obj: TChildObject1;
begin
Obj := TChildObject1.Create(aName);
try
aTreeView.Items.AddObject(nil, …Run Code Online (Sandbox Code Playgroud) 我在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问题.
昨天我问如何使用 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) 我想做这样的事情,但它不会编译因为无法分配对.
var
MyDictionary: TDictionary<TGuid, TCustomRecord>;
Pair: TPair<TGuid, TCustomRecord>;
begin
// ... create and populate my dictionary ...
foreach Pair in MyDictionary do
begin
PairRef.Value.MyField := PairRef.Value.MyField + 1;
end;
end
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,我知道如何通过更多代码实现这一目标,我正在寻找简洁易读的东西.
我正在评估ServiceStack以确定它是否适用于通用REST服务器构建目的,并且我正在尝试扩展Northwind演示,我已在本地更新以使用ServiceStack的4.0.44.我调整的代码是到位桶这里,倾倒从GIT中汞,然后用我自己的变化增加.
我的代码和上游serviceStack.Examples northwind演示之间的区别是以下新增内容:
A .../date/Route已添加到Orders的ServiceModel.Operations对象:
namespace ServiceStack.Northwind.ServiceModel.Operations
{
...
[Route("/orders")]
[Route("/orders/date/{ByDate}")] // ADDED!
[Route("/orders/page/{Page}")]
[Route("/customers/{CustomerId}/orders")]
public class Orders
{
public int? Page { get; set; }
public DateTime? ByDate { get; set; } // ADDED!
public string CustomerId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后这个案例的处理程序被添加到服务中,它在运行时因奇怪的LINQ故障而爆炸: variable 'o' of type 'ServiceStack.Northwind.ServiceModel.Types.Order' referenced from scope '', but it is not defined...
Source = System.Core
namespace ServiceStack.Northwind.ServiceInterface
{
public class OrdersService : Service
{
private const int PageCount = 20; …Run Code Online (Sandbox Code Playgroud)