小编Mit*_*tch的帖子

如何使用Delphi RTTI获取和设置记录值

我试图在Delphi XE或更高版本中使用增强的RTTI功能来读取和写入XML对象.到目前为止,我已成功使用整数,浮点数,字符串,枚举类型,集合和类,但无法正确输出或读取记录.问题似乎是获取记录属性的实例(指针).

//Outputs Properties To XML
procedure TMyBase.SaveToXML(node: TJclSimpleXMLElem);
var
  child , subchild : TjclSimpleXMLElem ;
  FContext : TRttiContext ;
  FType    : TRttiType ;
  FProp    : TRttiProperty ;
  Value    : TValue ;
  MyObj    : TMyBase ;
  FField   : TRttiField ;
  FRecord  : TRttiRecordType ;
  Data     : TValue ;
begin
  FContext := TRttiContext.Create ;
  FType := FContext.GetType ( self.ClassType ) ;
  Child := node.Items.Add ( ClassName ) ;
  for FProp in FType.GetProperties do begin
    if FProp.IsWritable then begin
      case FProp.PropertyType.TypeKind of …
Run Code Online (Sandbox Code Playgroud)

delphi rtti delphi-xe

11
推荐指数
2
解决办法
9214
查看次数

使用PNG的效率与使用大文件的BMP的效率

我在Delphi中编写了一个映射程序,用户可以在后台加载我存储在内存中的光栅图像.在一个案例中,用户成功加载了44MB BMP但程序运行缓慢,当他们打印时(我平铺输出)他们得到了Out Of Resources错误.我将BMP转换为PNG(3MB),程序执行得更好,打印作业也成功.

由于PNG必须扩展到相同大小的DIB,为什么会出现性能/资源差异?如果有什么需要更多的工作和内存分配来加载PNG.我错过了什么?

由于似乎没有任何明显的答案我会写一个小的演示项目,所以我可以进一步研究.

delphi graphics png bmp

8
推荐指数
1
解决办法
1950
查看次数

WYSIWIG与Unicode

我在Delphi中编写了一个Windows程序,它使用GetCharWidth和Em-Square非常精确地将文本放置到屏幕和打印机上.这适用于ANSI文本,您只需要检索和计算255个字符的宽度,但是当您使用65535个字符转到Unicode时,它太慢了.由于必须创建2个宽度数组,一个用于普通数组,一个用于粗体数,因此问题变得更严重.

 //Setup a reference canvas for measuring purposes
  RefDC := CreateCompatibleDC ( FCanvas.Handle ) ;
  DPI := GetDeviceCaps ( RefDC , LOGPIXELSY ) ;

  //find EmSquare
  GetOutlineTextMetrics ( RefDC , sizeof(otm) , @otm[0] ) ;
  EmSq := otm[0].otmEmSquare ;

  //calc NORMAL char sizes
  GetObject ( FCanvas.Font.Handle , SizeOf ( lf ) , @lf ) ;

  lf.lfHeight := -EmSq ;
  lf.lfWidth  := 0 ;
  lf.lfWeight   := FW_NORMAL ;

  hf := CreateFontIndirect ( lf ) ;
  hold := SelectObject ( RefDC , …
Run Code Online (Sandbox Code Playgroud)

windows delphi unicode wysiwyg

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

动态阵列存储器分配策略

我用动态数组写了一个32位程序来存储一个未知计数的三角形列表.我目前的策略是估计非常多的三角形,然后在创建所有三角形时修剪列表.在某些情况下,我只会在其他情况下分配一次内存,我需要添加到分配中.

对于一个非常大的数据集,当我的应用程序的内存使用量大约为1.2GB时,我的内存不足,而且由于分配步骤太大,我觉得我可能会破坏内存.

看看FastMM(内存管理器)我看到这些常量会建议其中一个是增量的好大小.

ChunkSize = 64 * 1024;
MaximumSmallBlockSize = 32752;
LargeBlockGranularity = 64 * 1024;
Run Code Online (Sandbox Code Playgroud)

其中一个是增加阵列大小的最佳尺寸吗?

最终这个程序将成为64位,但我们还没有为这一步做好准备.

delphi

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

标签 统计

delphi ×4

bmp ×1

delphi-xe ×1

graphics ×1

png ×1

rtti ×1

unicode ×1

windows ×1

wysiwyg ×1