在调试时我总是希望Delphi在第二个监视器中打开我的应用程序,但它总是在第一个监视器中打开,我知道我可以在关闭之前保存应用程序放置,但我希望它在调试模式下始终在第二个监视器中打开.
有没有办法配置delphi 2009来做到这一点?
将项目从Delphi 2007升级到Delphi 2009后,我收到了一个未知的内存泄漏,到目前为止我一直在尝试使用fastMM来跟踪它,这是fastMM堆栈跟踪报告:
A memory block has been leaked. The size is: 20
This block was allocated by thread 0x111C, and the stack trace (return addresses)
at the time was:
40339E [System.pas][System][@GetMem][3412] 534873 [crtl][_malloc]
56D1C4 [canex.cpp][MidasLib][DllGetDataSnapClassObject][3918]
56D316 [canex.cpp][MidasLib][DllGetDataSnapClassObject][3961]
56D5EE [canex.cpp][MidasLib][DllGetDataSnapClassObject][4085]
562D48 [DBCommon.pas][DBCommon][TFilterExpr.PutExprNode][1583]
408E46 [System.pas][System][DynArraySetLength][20464]
56D5EE [canex.cpp][MidasLib][DllGetDataSnapClassObject][4085]
408E92 [System.pas][System][@DynArraySetLength][20486]
528C1B [Forms.pas][Forms][TCustomForm.DoCreate][3260]
171A1A [GetRawStackTrace]
The block is currently used for an object of class: Unknown
The allocation number is: 302844
Run Code Online (Sandbox Code Playgroud)
有时我得到这个:
A memory block has been leaked. The size is: 20
This …Run Code Online (Sandbox Code Playgroud) 以下XAML(下面)定义了资源中的自定义集合,并尝试使用自定义对象填充它;
<UserControl x:Class="ImageListView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="300" Height="300"
xmlns:local="clr-namespace:MyControls" >
<UserControl.Resources>
<local:MyCustomCollection x:Key="MyKey">
<local:MyCustomItem>
</local:MyCustomItem>
</local:MyCustomCollection>
</UserControl.Resources>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
问题是我在'类型'的设计者中遇到错误.MyCustomCollection'不支持直接内容'.我已经尝试在MSDN中建议设置ContentProperty,但无法弄清楚要将其设置为什么.我使用的自定义集合对象如下,非常简单.我已经尝试了Item,Items和MyCustomItem,并且无法想到还有什么可以尝试.
<ContentProperty("WhatGoesHere?")> _
Public Class MyCustomCollection
Inherits ObservableCollection(Of MyCustomItem)
End Class
Run Code Online (Sandbox Code Playgroud)
我将非常感激地收到关于我出错的任何线索.还提示如何深入了解WPF对象模型以查看在运行时公开的属性,我也可以通过这种方式来理解它.
问候
瑞安
我正在比较DUnit中的一些货币值,但它在我的机器上根本不起作用(在其他机器上工作,但在我的机器上不工作).
一个例子:
CheckEquals(16.65, SomeCurrencyFieldValue);
Run Code Online (Sandbox Code Playgroud)
举:
expected: <16,65> but was: <16,65>
Run Code Online (Sandbox Code Playgroud)
如果做以下比较然后工作:
var
Temp: Currency;
begin
Temp := 16.65;
CheckEquals(Temp, SomeCurrencyFieldValue);
Run Code Online (Sandbox Code Playgroud)
问题是:当我将值直接传递给CheckEquals方法时,为什么比较不起作用?
我有很多常量相关的常量,在某些时候我需要配对它们,像这样:
const
key1 = '1';
key2 = '2';
key3 = '3';
value1 = 'a';
value2 = 'b';
value3 = 'c';
Run Code Online (Sandbox Code Playgroud)
我想避免这样做:
if MyValue = key1 then Result := value1;
Run Code Online (Sandbox Code Playgroud)
我知道如何使用字符串列表:
MyStringList.Add(key1 + '=' + value1);
Result := MyStringList.Values[key1];
Run Code Online (Sandbox Code Playgroud)
但是,有没有更简单的方法呢?
这是否意味着我无法在delphi 2007和2009之间共享表格?
我正在克隆一个TClientDataSet,我想将所有字段复制到克隆(这是一个新的DataSet),我知道我可以循环遍历Fields并复制信息,或者创建我的类的2个实例,然后克隆光标,但有更好的方法吗?像创建一个新的DataSet并分配字段信息?
编辑:
以下类助手方法适用于我:
procedure TDataSetHelper.CopyFieldDefs(Source: TDataSet);
var
Field, NewField: TField;
FieldDef: TFieldDef;
begin
for Field in Source.Fields do
begin
FieldDef := FieldDefs.AddFieldDef;
FieldDef.DataType := Field.DataType;
FieldDef.Size := Field.Size;
FieldDef.Name := Field.FieldName;
NewField := FieldDef.CreateField(Self);
NewField.Visible := Field.Visible;
NewField.DisplayLabel := Field.DisplayLabel;
NewField.DisplayWidth := Field.DisplayWidth;
NewField.EditMask := Field.EditMask;
if IsPublishedProp(Field, 'currency') then
SetPropValue(NewField, 'currency', GetPropValue(Field, 'currency'));
end;
end;
Run Code Online (Sandbox Code Playgroud)
有人有更好的方法吗?
为什么StrToInt('X5')在Delphi中返回5?X是一些科学记数法还是类似的东西?是否还有一些其他字符也将转换为Integer?
我想禁用所有外键约束并在之后重新启用它们,有没有办法做到这一点?
我知道SQLServer允许这样做,但是Firebird呢?
我最近发现,Fast Report的PDF导出过滤器导出的PDF在Mac OSX,iOS和Android设备中无法正确显示.
Fast Report告知他们的pdf实现仅支持Windows,他们无法说明他们正在开发的新实现何时可用.
我也尝试使用Gnostice导出过滤器,但他们的演示安装程序在Delphi XE中不起作用,当我联系他们时,他们用了15天时间向我发送了一些附带的dcus,但也没有用.所以我正在寻找另一种选择.
如果您知道或使用适用于快速报告的PDF导出过滤器,请告诉我.
2015年11月:快速报告现在具有PDF/A支持,启用此选项后,所有平台上的PDF都可以正常使用.
2014年10月 - 快速报告5似乎仍然生成"仅限Windows"的 PDF.考虑到Fast Report是与Delphi捆绑在一起的报告生成器,针对此问题的生产就绪解决方案将为跨平台开发人员带来好处.
以下是使用Fast Reader 5演示生成的新示例,在Android 4.4上使用Adobe Reader 11显示:

在Windows上:

delphi ×8
delphi-2009 ×3
constraints ×1
delphi-2007 ×1
designer ×1
dunit ×1
fastmm ×1
fastreport ×1
firebird ×1
firebird2.1 ×1
memory-leaks ×1
pdf ×1
sql ×1
wpf ×1