小编War*_* P的帖子

如何正确地使接口支持迭代?

我如何从接口公开这个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 generics interface list

5
推荐指数
1
解决办法
2942
查看次数

将脚本集成到delphi中

如何在Delphi中执行外部脚本(如wsh,vbs,bat ...)并获取结果?我想将它们作为线程中的任务启动其他事情,当结果准备好时,脚本本身将通知将在主线程中接收它的应用程序.怎么实现呢?

delphi

5
推荐指数
1
解决办法
1893
查看次数

如何在共享中央服务器上轻松发布新的Mercurial存储库或子存储库?(推克隆)

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中做到这一点,我想知道它.

相关问题:

在共享主机上设置mercurial

具有多重性的多重中央存储库

python mercurial cgi hgweb

5
推荐指数
1
解决办法
1022
查看次数

如何制作包含delphi exe和其他文件的安装文件

我在delphi 5 professional中编写了一个实用程序,它在执行时需要一些文件.我想制作一个安装文件,安装我的实用程序以及其他所需的文件.

delphi installer inno-setup

5
推荐指数
2
解决办法
3225
查看次数

从任何文件中获取缩略图,甚至是不在thumbs.db中的缩略图

我需要从文件夹中的文件中提取缩略图.我试过这个例子,但它并不总是有用.它为我提供了图像和PDF文件的缩略图,但没有Word,Excel,Text,OpenOffice等文件.

编辑:我的意思是"它不起作用"是"它不会返回我期望的图像.它返回用于打开文件的应用程序的图标.

编辑2:Windows资源管理器确实显示我提到的"不工作"(.xls,.doc ,, .ppt,.odt,.ods)文件的缩略图

delphi api thumbnails

5
推荐指数
1
解决办法
2152
查看次数

新的Delphi XE2自动生成的内部版本号是否链接到1.1.2000 00:00:00?

在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实现的详细信息,请参阅此链接:艰难地确定构建日期

如果可以依靠这种方式保持这种方式,那么现在我们有更好的方法来确定编译时间而不是

  1. 使用IDE插件

  2. 使用PE Headers hacks

问题不在于如何返回旧的自动增量版本号功能.

问题 XE2是否确实使用了上面显示的日期和时间,从2010年1月1日开始,在Build和Release数字中添加了几天和几秒?

delphi parsing auto-versioning compilation-time delphi-xe2

5
推荐指数
1
解决办法
2366
查看次数

如何在Delphi中打印表单?

在网上搜索了大约半个小时后,我决定寻求帮助.目前我正在使用此代码:

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)

打印整个表单.表单包括按钮,文本,标题和编辑框等.

唯一的问题是打印输出是计算机窗口的缩放; 这太小了.它也卡在页面的左上角.有没有办法让它填满整页/大部分页面?

printing delphi

5
推荐指数
1
解决办法
7332
查看次数

在VCL中禁用DbGrids.pas中键盘布局的自动更改

我使用ActivateKeyboardLayout(HKL_NEXT, KLF_ACTIVATE);Delphi XE2来加载波斯语键盘布局,但有时我点击TextBox或DbGrid控件键盘会自动更改为英文布局.

如何禁用键盘布局的自动更改?

delphi keyboard-layout delphi-xe2

5
推荐指数
1
解决办法
1851
查看次数

如何将SQL BACKUP命令的结果输出到Delphi程序中?

从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类的天真尝试更好,这种尝试无法正常工作:

  • 创建TADOCommand和TADOConnection.
  • 执行命令.
  • 获取信息消息.

我在自己的编码尝试中遇到的问题是,我的第一个命令是"use dbname",我在代码中遍历的唯一记录集是"use dbname"命令的结果,而不是我执行的第二个命令.下面接受的答案遍历从执行ADO命令返回的所有记录集,因此它工作得更好.由于我在后台线程中做了所有这些,我实际上认为最好还是创建原始的Com Objects,并避免在我的线程中出现任何VCL纠缠.如果有人感兴趣,下面的代码可能是一个很好的组件,让我知道,我可能会创建一个开源的"SQL备份为Delphi"组件.

sql-server delphi ado

5
推荐指数
1
解决办法
4016
查看次数

什么是Delphi/AppMethod BindSourceDB范围映射以及如何使用它们?

我正在使用Delphi/AppMethod XE6,并将Firemonkey Mobile HD表单添加到空白项目中.

在表单上,​​我删除了一个BindSourceDB组件,并在结构窗口中查看它,在那里,我可以看到一个ScopeMappings子属性.我还可以ScopeMappingsObject 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 bindingsource delphi-xe6 appmethod

5
推荐指数
1
解决办法
814
查看次数