我如何从接口公开这个TList,IEnumerator或者IEnumerator<IFungibleTroll>?我正在使用Delphi XE.
这是我有多远:
unit FungibleTrollUnit;
interface
uses
Windows, Messages, SysUtils,
Variants, Classes, Graphics,
Controls, Forms,
Generics.Collections;
type
IFungibleTroll = interface
['{03536137-E3F7-4F9B-B1F5-2C8010A4D019}']
function GetTrollName:String;
function GetTrollRetailPrice:Double;
end;
TFungibleTrolls = class (TInterfacedObject,IEnumerable<IFungibleTroll>)
protected
FTrolls:TList<IFungibleTroll>;
public
// IEnumerable
function GetEnumerator:IEnumerator<IFungibleTroll>;//
// function GetEnumerator:IEnumerator; overload;
// find/search app feature requires searching.
// this
function FindSingleItemByName(aName:String;patternMatch:Boolean):IFungibleTroll;
function FindMultipleItemsByName(aName:String;patternMatch:Boolean):IEnumerable<IFungibleTroll>;
function FindSingleItemByIdentifier(anIdentifer:String):IFungibleTroll;// use internal non-visible identifier to find an app.
constructor Create;
property Trolls:TList<IFungibleTroll> read FTrolls; // implements IEnumerable<IFungibleTroll>;??
private
end;
implementation
{ …Run Code Online (Sandbox Code Playgroud) 如何在Delphi中执行外部脚本(如wsh,vbs,bat ...)并获取结果?我想将它们作为线程中的任务启动其他事情,当结果准备好时,脚本本身将通知将在主线程中接收它的应用程序.怎么实现呢?
Mercurial的大量出版选择包括HgWeb(以及之前的HgWebDir),它几乎完全满足我的需求.HgWeb 1.6支持多个存储库,包括集合.
所以hgweb.config可能包含这样的东西:
[collections]
/home/user/collection1 = /home/user/collection1
/home/user/collection2 = /home/user/collection2
Run Code Online (Sandbox Code Playgroud)
因此,上述文件夹(collection1,collection2)可能在上述位置中包含大约10-20个存储库(作为子文件夹).
我的问题是,是否有任何hg扩展或配置技术允许我将克隆推送到由hgweb提供的集合?
我在Linux上的常用方法是使用SSH远程登录,然后执行hg clone我的开发人员工作站副本,我暂时使用`hg serve'提供.我发现我和一些精通Linux的开发人员一起工作,他们没有任何问题,并且可以使用hg进行操作.但Windows用户(a)没有grok ssh,并且(b)不了解Linux命令行环境,并希望采用IDE版本控制插件,GUI工具或CGI页面(由我编写)在python中),远程拉动克隆,有效地为他们提供了一种方法,可以将他们的HG存储库推送或发布到中央存储库,而无需使用任何ssh访问远程服务器系统.在奇怪的情况下,集中的mercurial服务器在Windows上运行,你甚至可能无法通过ssh进入远程服务器.
在我看来答案是"不,你不能这样做",除非我为hgweb编写我自己的扩展,我将要做的.但如果有一种方法可以在hg中做到这一点,我想知道它.
相关问题:
我在delphi 5 professional中编写了一个实用程序,它在执行时需要一些文件.我想制作一个安装文件,安装我的实用程序以及其他所需的文件.
我需要从文件夹中的文件中提取缩略图.我试过这个例子,但它并不总是有用.它为我提供了图像和PDF文件的缩略图,但没有Word,Excel,Text,OpenOffice等文件.
编辑:我的意思是"它不起作用"是"它不会返回我期望的图像.它返回用于打开文件的应用程序的图标.
编辑2:Windows资源管理器确实显示我提到的"不工作"(.xls,.doc ,, .ppt,.odt,.ods)文件的缩略图
在Delphi XE2中,自动生成的构建号功能现在使用某种日期和时间生成的值,如下所示:
2.4.4386.838
每次构建时最后两个数字都会更改,并且基于当前日期和时间:
Major = 2 (user defined)
Minor = 4 (user defined)
Release = 4386 (number of days since Jan 1 2000)
Build = 838 (number of seconds since 00:00:00)
Run Code Online (Sandbox Code Playgroud)
我想这个发布和构建数字的新格式是从.NET实现中借用的,它实现了非常相似的功能.在.net中,最后一个数字(Build)等于自当地时间午夜以来的秒数除以2.有关.net实现的详细信息,请参阅此链接:艰难地确定构建日期
如果可以依靠这种方式保持这种方式,那么现在我们有更好的方法来确定编译时间而不是
使用IDE插件
使用PE Headers hacks
问题不在于如何返回旧的自动增量版本号功能.
问题是 XE2是否确实使用了上面显示的日期和时间,从2010年1月1日开始,在Build和Release数字中添加了几天和几秒?
在网上搜索了大约半个小时后,我决定寻求帮助.目前我正在使用此代码:
procedure TViewSalesActivity.btnPrintClick(Sender: TObject);
begin
with TPrintDialog.Create(nil) do
ViewSalesActivity.PrintScale:= 1.5
try
if Execute then
ViewSalesActivity.Print;
finally
Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
打印整个表单.表单包括按钮,文本,标题和编辑框等.
唯一的问题是打印输出是计算机窗口的缩放; 这太小了.它也卡在页面的左上角.有没有办法让它填满整页/大部分页面?
我使用ActivateKeyboardLayout(HKL_NEXT, KLF_ACTIVATE);Delphi XE2来加载波斯语键盘布局,但有时我点击TextBox或DbGrid控件键盘会自动更改为英文布局.
如何禁用键盘布局的自动更改?
从SQL Server Management Studio以交互方式运行SQL命令的用户可以看到的sql命令输出与从执行ADO命令或ADO查询对象返回的输出不同.
USE [DBNAME]
BACKUP DATABASE [DBNAME] TO
DISK = 'C:\SqlBackup\Backup.mdf'
Run Code Online (Sandbox Code Playgroud)
成功完成输出如下:
Processed 465200 pages for database 'DBNAME', file 'filename' on file 2.
Processed 2 pages for database 'DBNAME', file 'filename_log' on file 2.
BACKUP DATABASE successfully processed 465202 pages in 90.595 seconds (40.116 MB/sec).
Run Code Online (Sandbox Code Playgroud)
当我使用如上所述的CommandText或SQL集执行TADOCommand或TADOQuery时,我没有得到任何这样的输出.如何从执行SQL命令中读取此"辅助输出"?我希望通过一些原始的ADO操作,我可能能够执行命令并获取上面的信息,以获得成功,以及执行Sql备份时的任何错误.
更新:下面的答案对我来说比使用普通Delphi TADOCommand和TADOConnection类的天真尝试更好,这种尝试无法正常工作:
我在自己的编码尝试中遇到的问题是,我的第一个命令是"use dbname",我在代码中遍历的唯一记录集是"use dbname"命令的结果,而不是我执行的第二个命令.下面接受的答案遍历从执行ADO命令返回的所有记录集,因此它工作得更好.由于我在后台线程中做了所有这些,我实际上认为最好还是创建原始的Com Objects,并避免在我的线程中出现任何VCL纠缠.如果有人感兴趣,下面的代码可能是一个很好的组件,让我知道,我可能会创建一个开源的"SQL备份为Delphi"组件.
我正在使用Delphi/AppMethod XE6,并将Firemonkey Mobile HD表单添加到空白项目中.
在表单上,我删除了一个BindSourceDB组件,并在结构窗口中查看它,在那里,我可以看到一个ScopeMappings子属性.我还可以ScopeMappings在Object Inspector窗口中看到该属性,它显示了它的TScopeMappings类型.
对于我的生活,我无法弄清楚这个属性是什么/做什么,以及ScopeMappings到底是什么.
我从Embarcadero文档中找到的全部内容如下:http: //docwiki.embarcadero.com/Libraries/XE6/en/Data.Bind.DBScope.TBindSourceDB.ScopeMappings
Data.Bind.DBScope.TBindSourceDB.ScopeMappings
ScopeMappings属性指定一个拥有的集合,其元素是范围映射.ScopeMappings用于添加可以由引用此源组件的表达式引用的名称/值对.
显然,这不是非常有用.
我在网上到处搜索,包括这里的SO,找不到任何东西.请帮忙.
delphi ×9
delphi-xe2 ×2
ado ×1
api ×1
appmethod ×1
cgi ×1
delphi-xe6 ×1
generics ×1
hgweb ×1
inno-setup ×1
installer ×1
interface ×1
list ×1
mercurial ×1
parsing ×1
printing ×1
python ×1
sql-server ×1
thumbnails ×1