标签: delphi-xe2

FillRect不会在Delphi XE2中绘制完整的TStringGrid单元格

FillRect不会TStringGrid在Delphi XE2中绘制完整的单元格.默认颜色左侧有3个像素的间隙(BiDiMode设置为bdLeftToRight).在我之前使用过的Delphi 6中不存在这个问题.

procedure TShapeline.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  Stringgrid1.Canvas.Brush.Color:=$00FF80FF;
  StringGrid1.Canvas.FillRect(Rect);
end;
Run Code Online (Sandbox Code Playgroud)

我试图更改所有属性(包括DrawingStyle)和不同的画笔样式,绘制的矩形不会填充整个单元格.

delphi tstringgrid delphi-xe delphi-xe2

15
推荐指数
2
解决办法
4927
查看次数

游标上的完整类不起作用

我在2010年和XE2中广泛使用Delphi中的游标完全类.最近,在为XE2安装Update 4之后,Cursor的Complete Class停止工作.经过一番研究后,我发现卸载"AQTime"可以解决这个问题.所以我这样做了(不得不重新安装Delphi只是为了删除它)并确定它再次开始工作.

除了今天,它突然再次停止.没有安装AQTime,我在IDE中根本没有做任何事情(据我所知)可能导致这种情况.我没有安装/卸载任何软件包,更改了任何库路径,甚至没有更改任何设置.它突然停止了我的开发工作.工作一分钟,而不是下一分钟.我重新启动了Delphi,重启了我的电脑,甚至尝试了一个全新的项目.它将不再起作用.

有谁知道为什么停止工作?我该如何让它再次运作?这是我一直使用的非常有用的工具.

ide delphi aqtime code-completion delphi-xe2

15
推荐指数
2
解决办法
5114
查看次数

我如何修补delphi类的私有方法?

我已经阅读了这些问题和答案

如何更改外部声明的函数的实现(绕行)

在delphi中调用例程调用

但我不能弄清楚如何修补位于其他单元中的类的私有方法.

检查此示例我想修补Bar程序.

Unit ThidParty;
Interface
   Type
      TFoo =Class
        private
           procedure Bar;
       end;
Run Code Online (Sandbox Code Playgroud)

我认为关键是找到一种方法来获取私有方法的地址.

那么,我如何修补delphi类的私有方法?

delphi delphi-xe2

15
推荐指数
1
解决办法
4780
查看次数

Delphi TImageList位图更改

我正在使用Delphi XE2 Update 3. Update 4与我们的某些第三方组件不兼容,因此我们尚未更新.

我在我的应用程序中使用TImageList.我已经注意到很多次从源视图切换到窗体视图(F12)时,突然之前未修改的单元将被修改.如果我保存按F12导致的更改,我可以查看源代码控制并看到TImageList.Bitmap属性的几个字节已更改.这是TortoiseHg Workbench中的一个例子:

@@ -830,7 +830,7 @@
     Left = 760
     Top = 480
     Bitmap = {
-      494C01010200E402E40210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C01010200E802E80210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
                   ^^  ^^  <-- two bytes changed
Run Code Online (Sandbox Code Playgroud)

有时会有其他微小的变化,但它总是仅限于TImageList.Bitmap数据中的几个孤立点.当我没有做出任何有意的改变时,不断将这些微不足道的变化推向源代码控制是一件非常痛苦的事情.

有谁知道为什么Delphi在源视图和表单视图之间切换时更改TImageList.Bitmap数据?有没有办法解决这个限制?

delphi version-control delphi-xe2 timagelist

15
推荐指数
1
解决办法
1116
查看次数

如何在Delphi XE2中解析嵌套的JSON对象?

我是JSON的新手,我手上有这个项目,需要我解析一个JSON并在ListView中显示它的一些内容.问题是我现在阅读的文档处理的是包含JSON数组的JSON对象,而我的案例涉及处理嵌套对象.简而言之,这里是摘要:我正在使用带有DBXJSON的Delphi XE2.我将一些值发布到服务器,并使用看起来像这样的JSON对象进行回复:

    {
    "products": {
        "Men's Sneakers": {
            "instock": false,
            "size": "423",
            "manufacturer": "Adidas",
            "lastcheck": "20120529"
        },
        "Purse": {
            "instock": true,
            "size": "not applicable",
            "manufacturer": "Prada",
            "lastcheck": "20120528"
        },
        "Men's Hood": {
            "instock": false,
            "size": "M",
            "manufacturer": "Generic",
            "lastcheck": "20120529"
       }
    },
   "total": 41,
   "available": 30
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是将每个项目(即Purse)解析并添加为listview中的标题,以及一个子项目(制造商).我创建了一个以JSON字符串作为参数的过程,创建了JSON对象,但我不知道如何进一步解析嵌套对象.

procedure TForm1.ParseString(const AString: string);
var
  json          : TJSONObject;
  jPair         : TJSONPair;
  jValue        : TJSONValue;
  jcValue       : TJSONValue;
  l,i           : Integer;
begin
    json    := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(AString),0) as TJSONObject;
  try
    //get the pair to evaluate …
Run Code Online (Sandbox Code Playgroud)

delphi json nested delphi-xe2

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

致命错误:无法创建输出文件"project1.exe"

所以有一段时间我一直有这个问题:

在Windows 7(64位)上,使用Delphi 7和Delphi XE2,如果来自IDE,我编译程序,运行它,停止它,更改它并重新运行它我收到此错误消息:

[致命错误]无法创建输出文件"project1.exe"

我不清楚导致这种情况的原因.我用谷歌搜索了更多信息,但我找不到解决方案.

有两种解决方法:要么等一两分钟,要么手动删除project1.exe.不用说,这是行不通的.

我没有病毒扫描程序,也没有病毒.拥有相关文件夹的完全访问权限 以管理员身份运行一切

那是什么原因导致的?我该怎么做才能解决这个问题?

delphi delphi-7 windows-7 delphi-xe2

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

打开Delphi项目文件 - 打开DPR而不是现有DPROJ文件的任何缺点?

默认情况下,.DPR和.DPROJ的文件扩展名描述是相同的,因此在资源管理器中打开具有相同基本名称的项目文件时,两个文件描述都列为"Delphi项目文件"这为开发人员提供了一个选择 - 要打开哪个文件?

我通常打开列出的第二个文件,假设它是DPROJ.

当存在相应的DPROJ文件时,是否有打开DPR的缺点?IDE是否正常处理?

我有时打开列出的第一个文件,我没有注意到任何问题,但这是其中一个尚未得到答复的好奇心.我查看了帮助,找不到任何东西.

delphi delphi-xe2

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

如何在对象字段值更改时定义断点?

作为一个例子,给定下面的代码提取,我想定义一个断点,当对象字段值发生变化时触发该断点,并且可选地,在条件(FalseTrue在这种情况下)中断.

type
  TForm1 = class(TForm)
    EnableButton: TButton;
    DisableButton: TButton;
    procedure EnableButtonClick(Sender: TObject);
    procedure DisableButtonClick(Sender: TObject);
  private
    FValue: Boolean; // <== Would like to define a breakpoint here whenever FValue changes.
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DisableButtonClick(Sender: TObject);
begin
  FValue := False;
end;

procedure TForm1.EnableButtonClick(Sender: TObject);
begin
  FValue := True;
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2

15
推荐指数
1
解决办法
4422
查看次数

我如何用接口的safecall函数方法进行RTTI调用?

我有这个测试程序https://gist.github.com/real-mielofon/5002732

  RttiValue := RttiMethod.Invoke(RttiInstance, [10]);
Run Code Online (Sandbox Code Playgroud)

和带接口的简单单元:

unit Unit163;

interface

type
{$M+}
  ISafeIntf = interface
    function TestMethod(aI: integer): integer; safecall;
  end;
{$M-}
 type
   TSafeClass = class(TInterfacedObject, ISafeIntf)
   public
     function TestMethod(aI: integer): integer; safecall;
   end;

implementation

function TSafeClass.TestMethod(aI: integer): integer;
begin
  result := aI+1; // Exception !!
end;

end.
Run Code Online (Sandbox Code Playgroud)

我有kaboom

result := aI+1;
Run Code Online (Sandbox Code Playgroud)

如果它是程序或不安全,那么它没关系:-(

delphi rtti delphi-xe2 delphi-xe3

15
推荐指数
1
解决办法
774
查看次数

为什么64位Delphi应用程序计算的结果与32位构建不同?

我们最近开始创建64位构建的应用程序.在比较测试期间,我们发现64位构建的计算方式不同.我有一个代码示例,演示了两个版本之间的差异.

var
  currPercent, currGross, currCalcValue : Currency;
begin

  currGross := 1182.42;
  currPercent := 1.45;
  currCalcValue := (currGross * (currPercent * StrToCurr('.01')));
  ShowMessage(CurrToStr(currCalcValue));
end;
Run Code Online (Sandbox Code Playgroud)

如果您在32位版本中逐步执行此操作,则使用17.1451计算currCalcValue,而使用17.145返回64位版本.

为什么64位构建不计算额外的小数位?所有变量都定义为4个十进制货币值.

delphi 32bit-64bit delphi-xe2

15
推荐指数
1
解决办法
949
查看次数