小编gab*_*abr的帖子

Delphi中的.NET"Type"类替代方案

我想用Delphi(2009 - 所以我有通用字典类)写一些类似于C#代码的东西:

Dictionary<Type, Object> d = new Dictionary<Type, Object>();
d.Add(typeof(ISomeInterface), new SomeImplementation());
object myObject = d[typeof(ISomeInterface)];
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

提前致谢,

斯托伊奇

delphi delphi-2009

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

在Delphi 2009中投射匿名程序

以下代码(仅用于演示问题)构建并在Delphi 2010中工作.在Delphi 2009中,编译器失败并显示"E2035实际参数不足".

program Project50;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TMyProc = reference to procedure(param: integer);

var
  a: TProc;
  b: TMyProc;

begin
  b := procedure (param: integer)
    begin
    end;
  a := TProc(b); // <-- [DCC Error] Project50.dpr(19): E2035 Not enough actual parameters
end.
Run Code Online (Sandbox Code Playgroud)

我发现只有一个非常难看的黑客来解决这个问题(a:TProc绝对b).有没有人知道这个编译器缺陷的更好的解决方法?

[TProc字段实际上隐藏在可以存储各种'可执行'代码的记录中 - TProcedure,TMethod和TProc.Casting用于将特定的匿名proc存储到此字段中.]

delphi anonymous-methods delphi-2009

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

4
推荐指数
1
解决办法
2万
查看次数

Windows 7上的Microsoft Access Text ODBC驱动程序

我创建了一个Delphi应用程序,它利用ODBC数据源访问csv格式的文本文件.该驱动程序是"Microsoft Access文本驱动程序".但是当我在Windows 7计算机上部署我的应用程序时它不起作用,因为这个驱动程序不可用(odbcad32中只有两个可用:sql native client和sql server)

我该如何安装这个驱动程序?我曾尝试安装MDAC,但它没有做任何事情.没有错误或anythinig,但它只是显示一个快速滚动条,就是这样.我听说在Windows 7上已经被WDAC取代了MDAC.

编辑:我应该添加这是Windows 7 Home,而不是Professional.

windows delphi odbc

4
推荐指数
1
解决办法
1万
查看次数

Delphi代码生成

我需要加快编码速度,加快工作量,所以我需要能够生成代码.任何工具,任何想法?

delphi code-generation

3
推荐指数
2
解决办法
3944
查看次数

TToolBar在非主题Windows上绘制错误

最近我注意到我们的一个应用程序在非主题Windows上绘制错误.

工具栏是由嵌套在TToolbar中的TSpeedButtons构建的,而TToolbar又存在于页面控件中.

在主题Windows上一切都很好看.嗯,不好,但还可以.

主题Windows上的TToolbar

但是,在非主题的Windows上,按钮内部会出现奇怪的垂直线条.

非主题Windows上的工具栏

我已经四处搜索,但找不到任何有关此类问题的报告.(最有可能只是我的搜索功夫糟透了.)有人知道这个问题的描述,或者更好的是,修复?

delphi toolbar

3
推荐指数
1
解决办法
2722
查看次数

用于存储匿名方法的容器

我有以下定义.

type
  TOmniTaskDelegate = reference to procedure(const task: IOmniTask);
Run Code Online (Sandbox Code Playgroud)

我应该使用什么类型的容器(应该在D2009中支持)来存储TOmniTaskDelegate实例的列表?目前我正在使用,array of TOmniTaskDelegate但我对此并不满意.

delphi containers anonymous-methods

3
推荐指数
1
解决办法
416
查看次数

从Delphi访问BcdStore

我正在尝试将此代码片段转换为Delphi,而我却陷入困境for each objWBL in colObjects.

if not objBcdStore.EnumerateObjects( &h10200003, colObjects ) then
    WScript.Echo "ERROR objBcdStore.EnumerateObjects( &h10200003 ) failed."
    WScript.Quit(1)
end if

for each objWBL in colObjects
    WScript.Echo ""
    WScript.Echo "Windows Boot Loader"
    WScript.Echo "-------------------"

    WScript.Echo "identifier              " & GetBcdId( objWBL.Id )

    If objWBL.Id = current then

      if not objWBL.GetElement(BcdOSLoaderInteger_NumberOfProcessors, objElement ) then
          WScript.Echo "ERROR WBL GetElement for " & Hex(BcdOSLoaderInteger_NumberOfProcessors) & " failed."
          WScript.Quit(1)
      end if
      WScript.Echo "numproc              " & objElement.Integer

      if not objWBL.GetElement(BcdOSLoaderBoolean_UseBootProcessorOnly, objElement ) then
          WScript.Echo …
Run Code Online (Sandbox Code Playgroud)

delphi wmi bcdstore

3
推荐指数
1
解决办法
1122
查看次数

Smart Mobile Studio中的正则表达式

如何在Smart Mobile Studio中使用正则表达式?例如,我如何在Object Pascal中编写以下示例?

var re = /\w+\s/g;  
var str = "fee fi fo fum";  
var myArray = str.match(re);  
console.log(myArray);
Run Code Online (Sandbox Code Playgroud)

javascript regex delphi smart-mobile-studio

3
推荐指数
1
解决办法
293
查看次数

找不到TThread.Queue过载

这个简单的程序无法编译.[用XE5和D10测试.]

program Project10;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.Classes;

function MakeProc: TThreadProcedure;
begin
  Result := procedure begin end;
end;

begin
  TThread.Queue(nil, MakeProc);
end.
Run Code Online (Sandbox Code Playgroud)

编译器报告错误

[dcc32错误] Project10.dpr(16):E2250没有可以使用这些参数调用的'Queue'的重载版本

TThread.Queue通话中.

TThread实现了两个Queue重载.

class procedure Queue(const AThread: TThread; AMethod: TThreadMethod); overload; static;
class procedure Queue(AThread: TThread; AThreadProc: TThreadProcedure); overload; static;
Run Code Online (Sandbox Code Playgroud)

我很确定我的代码应该匹配第二个重载.

我能找到的唯一解决方法是:

TThread.Queue(nil, procedure begin MakeProc; end);
Run Code Online (Sandbox Code Playgroud)

我做错了什么或这是编译错误?有没有比我丑陋的黑客更好的解决方法?

delphi

3
推荐指数
1
解决办法
163
查看次数