小编Rob*_*ove的帖子

与泛型的接口 - 设置为NIL

我试图在Delphi 2009中的以下示例代码中实现clear.

interface
...
  TFoo<T : IInterface> = class(TObject)
    FField : T;
    procedure Clear;
  end;
...
implementation
...
procedure TFoo<T>.Clear;
begin
  // Line Below Results In
  //  E2010 Incompatible types: 'T' and 'Pointer' 
  FField := nil;
end;
...
Run Code Online (Sandbox Code Playgroud)

如果"T"没有约束,我可以理解complie时间错误.但由于"T"必须是一个接口,我本以为这种语法会起作用.

有没有把FField设置为NIL,所以可以释放界面?

delphi generics delphi-2009

13
推荐指数
1
解决办法
1019
查看次数

试图找到SafeMM for Delphi

Mark Edington在DelphiLive会议上提到了名为SafeMM的内存管理器.

我无法在网上找到它,有人知道它可能在哪里.

delphi debugging memory-management

12
推荐指数
2
解决办法
1006
查看次数

从TIdHttp获取响应,错误代码为400

我一直在为StackApps API 编写Delphi库.

我遇到了Indy的问题.我正在使用Delphi 2010附带的版本.如果您将无效参数传递给其中一个StackApps API,它将返回HTTP错误代码400,然后在响应中它将包含一个包含更多详细信息的JSON对象.

通过访问Chrome浏览器中的http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose,您可以看到示例.IE和Firefox隐藏了JSON.

使用WireShark我可以看到使用下面的代码返回JSON对象,但是我无法使用Indy访问它.

对于此测试代码,我在表单上删除了一个TIdHttp组件,并在按钮单击中放置以下代码.

procedure TForm10.Button2Click(Sender: TObject);
var
 SS : TStringStream;
begin
  SS := TStringStream.Create;
  IdHTTP1.Get('http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose',SS,[400]);
  Memo1.Lines.Text := SS.DataString;
  SS.Free;
end;
Run Code Online (Sandbox Code Playgroud)

我通过了[400],因此它不会引起400异常.似乎Indy停止阅读回应.由于Memo1的内容为空.

我正在寻找一种获取JSON详细信息的方法.

delphi indy

9
推荐指数
1
解决办法
5991
查看次数

如何从BPL确定它是否只是设计时间

我们将所有包构建到同一个输出目录.

该目录包括设计时和运行时包.

看看生成的BPL是否有办法确定包只是设计时间?

我希望能够从我的部署列表中过滤掉这些内容,因为我正在构建运行时包.

在过去,我已经构建了运行时包的自定义列表.我正在寻找自动化这个过程.

如果有特定于版本的答案,我们正在使用Delphi XE.

delphi packages delphi-xe

9
推荐指数
1
解决办法
894
查看次数

LiveBindings - TList <TMyObject>绑定到TStringGrid

我有以下示例代码集,如何将Data列表元素绑定到TStringGrid使用LiveBindings.我需要双向更新,以便当网格中的列更改时,它可以更新底层TPerson.

我已经看到了如何使用TDataset基于绑定的示例,但我需要在没有的情况下执行此操作TDataset.

unit Unit15;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, System.Generics.Collections;

type
  TPerson = class(TObject)
  private
    FLastName: String;
    FFirstName: string;
  published
    property firstname : string read FFirstName write FFirstName;
    property Lastname : String read FLastName write FLastName;
  end;

  TForm15 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Data : TList<TPerson>;
  end;


var
  Form15: TForm15;



implementation …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2 livebindings

9
推荐指数
1
解决办法
5409
查看次数

可选的匿名方法

我想公开一个可以采用可选匿名方法的函数:

    type
      TParamsProc = reference to procedure(Params: TSQLParams);
      TFieldsProc = reference to procedure(Fields: TSQLResult);

      TDbController = class
        ...
      public
        procedure Select(const SQL: sting; ParamsProc: TParamsProc; FieldsProc: TFieldsProc);
      end;

    implementation

    procedure TDbController.Select(const SQL: sting; ParamsProc: TParamsProc; FieldsProc: TFieldsProc);
    var
      Q: TUIBQuery;
    begin
      Q := TUIBQuery.Create(nil);
      try
        Q.Database := FDatabase;
        Q.Transaction := FTransaction;
        Q.SQL.Text := SQL;
        ParamsProc(Q.Params);
        Q.Open;
        while not Q.Eof do
        begin
          FieldsProc(Q.Result);
          Q.Next;
        end;
      finally
        Q.Free;
      end;
    end;
Run Code Online (Sandbox Code Playgroud)

有时我没有传递给SQL查询的参数,我想让ParamsProc可选.

这段代码不起作用:

      if ParamsProc <> nil then ParamsProc(Q.Params);
Run Code Online (Sandbox Code Playgroud)

也不是这个:

      if @ParamsProc <> …
Run Code Online (Sandbox Code Playgroud)

delphi anonymous-methods delphi-2010

7
推荐指数
1
解决办法
324
查看次数

如何确定从服务器使用的Oracle Client版本

使用Oracle 10g.(10.2.0.4)

可能通过查看日志或系统表,有一种方法可以确定每个连接使用的oracle客户端版本.

我们的系统最初拥有8.1.7客户端,然后是9.X客户端.

我们尝试手动查找具有旧客户端的所有计算机,并将其升级到10.2客户端.

我们正在寻找一种方法来审核(从服务器)我们是否成功升级了所有客户机.

oracle oracle10g

6
推荐指数
1
解决办法
1943
查看次数

用于创建和交互图形布局的Javascript框架(节点和箭头)

有没有支持创建交互式节点和箭头的javascript框架?

我希望能够定义节点(带有一些grahics和文本)和(定向)箭头连接它们,箭头本身(或靠近它)也有文本.

我希望节点能够基于箭头的最小交叉点和可能的其他类型的提示来渲染它们,例如向每个节点提供数字并且具有较低数字的节点在显示器中位于更高(或更低)的位置.

如果自动布局机制还支持修复某些节点的位置并仅布置非固定节点的能力,那么它也会很好.

根据需要,节点和箭头应该是可选择的可拖动和可点击的触发事件.

如果我找不到更好的东西,我会使用raphael.但很乐意为自己节省一些编码时间.

javascript layout graph javascript-framework

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

如何使用组合框获取面板的图像

我需要捕捉面板的图像.

我遇到的问题是,如果Panel包含TCombobox,则不会出现Text.

procedure AssignPanelImageToPicture(Panel : TPanel;Image : TImage);
var
 B : TBitmap;
begin
 B := TBitmap.Create;
 try
   B.Width := Panel.Width;
   B.Height := Panel.Height;
   B.Canvas.Lock;
   Panel.PaintTo(B.Canvas.Handle,0,0);
   B.Canvas.Unlock;
   Image1.Picture.Assign(B);
  finally
    B.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

使用此代码,我放下一个带有TCombobox的面板.然后在Text Property中输入一个值.我也放了一个TImage接下来的两个.然后我添加一个按钮来调用上面的代码.

结果如下:

面板绘画问题的成像

有没有更好的方法来捕捉面板的真实图像.

delphi image-capture delphi-xe

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

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

Dunit控制台模式 - 执行测试两次

我有一个dunit测试项目,我试图在控制台模式下运行它.当我执行项目时,它运行两次(它只打开一个控制台窗口,我看到它执行了两次测试),并且执行时也比在GUI模式下运行时花费更多时间.有谁知道如何只运行一次dunit控制台测试?

DPR源代码:

var  
  R: TTestResult;  

begin  
  Application.Initialize;  
  if IsConsole then begin  
    with TextTestRunner.RunRegisteredTests(rxbHaltOnFailures) do begin  
      R := TextTestRunner.RunRegisteredTests;  
      ExitCode := R.ErrorCount + R.FailureCount;  
      Free;  
    end  
  end  
  else begin  
    GUITestRunner.RunRegisteredTests;  
  end;  
end.
Run Code Online (Sandbox Code Playgroud)

delphi dunit

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