标签: delphi-xe7

正在手动调用 SetLength(array, 0); 有缺点吗?

我总是将动态数组的初始化与终结器配对,形式为

finally 
  SetLength(Array, 0); 
end;
Run Code Online (Sandbox Code Playgroud)

确切地知道数组何时被“销毁”感觉更自然,并且如果需要的话,可以通过已经拥有“最终”可用的方式更平滑地从数组过渡到 TList。

然而这种方法使源代码更加缩进。这种方法有什么缺点吗——可读性、可维护性、可扩展性、性能、易出错性?

我写的示例代码:

var
  A1: array of Integer;
  A2: array on Boolean;
  A3: array of string;
begin
  SetLength(A1, 10);
  try
    ...
    SetLength(A2, 20);
    try
      ...
      SetLength(A3, 30);
      try
        ...
      finally
        SetLength(A3, 0);
      end;
    finally
      SetLength(A2, 0);
    end;
  finnally
    SetLength(A1, 0);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi finalization dynamic-arrays delphi-xe7

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

错误:未声明的标识符“DecimalSeparator”并且没有“StringReplace”的重载版本

您好,我一直在编码,到目前为止,在WinXP中的Delphi 2007中开发和编译没有问题,直到Win7中的Delphi XE7。

我不知道为什么会这样。

错误指向的行

....
if(tS<>'') then
begin
  Result:=StrToFloat(StringReplace(String(tS),'.',DecimalSeparator,[]));
  Invalid:=False;
end;
....
Run Code Online (Sandbox Code Playgroud)

错误:

1) [dcc32 Error] UtilNumString.pas(321): E2003 Undeclared identifier:     'DecimalSeparator'
2) [dcc32 Error] UtilNumString.pas(321): E2250 There is no overloaded version     of 'StringReplace' that can be called with these arguments   
Run Code Online (Sandbox Code Playgroud)

请亲指教。谢谢

delphi delphi-xe7

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

如何更改 Delphi Firemonkey XE7 中 Stringgrid 标题的字体大小?

我在 Delphi Firemonkey XE7 中为应用程序创建了一个 Stringgrid,并用我的 MySQL 数据库中的数据填充它。为了放大字体大小,我使用了以下代码:

procedure TFormSearchRecipient.sgRecipientDrawColumnCell(Sender: TObject;
  const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
  const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var b : TRectF; border: integer;
begin
  //following leaves in the end a border so that the marked item can be seen
  b := bounds;
  border:= 2;
  b.Top := b.Top + border;
  b.Left := b.Left - border;
  b.Height := b.Height - 2 * border;
  b.Width := b.Width - 2 * border; …
Run Code Online (Sandbox Code Playgroud)

delphi header firemonkey stringgrid delphi-xe7

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

为什么箭头键导航在 TWebBrowser 中不起作用?

TWebBrowser下面是一个在 VCL 应用程序中托管控件的简单程序:

Unit1.pas

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, 
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  Browser: TWebBrowser;
begin
  Browser := TWebBrowser.Create(Self);
  TOleControl(Browser).Parent := Self;
  Browser.Align := alClient;
  Browser.Navigate('http://www.bbc.co.uk/');
end;

end.
Run Code Online (Sandbox Code Playgroud)

单元1.dfm

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 587
  ClientWidth = 928
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = …
Run Code Online (Sandbox Code Playgroud)

delphi twebbrowser delphi-xe7

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

如何使用 Indy Mime 对二进制数据进行编码?

我有一个 Ansi 字符串,用于存储二进制数据 - 0-255 范围内的字节(我知道它应该是一个字节数组左右,但它们之间没有太大区别)。
我想通过 Indy MIME (TIdEncoderMIME.EncodeString / TIdDecoderMIME.DecodeString) 传递这个“二进制字符串”并获得人类可读的ANSI字符串。

我认为如果我使用 IndyTextEncoding_8Bit 编码,Encode/DecodeString 的输出将是一个仅包含 ANSI 字符的字符串。但是我错了!

那么,如何使用 Indy Mime 编码二进制数据(类似于application/octet-stream)?

delphi encoding mime indy delphi-xe7

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

设置动态数组的边界

静态数组允许定义它们的下限和上限:

StaticArray : array[5..7] of Integer;
Run Code Online (Sandbox Code Playgroud)

我不知道如何在运行时对动态数组做同样的事情。

例如,如果我需要从静态数组复制元素,保持相同的索引,我不知道如何将其下限设置为Low(StaticArray)和上限设置为High(StaticArray)

var
  StaticArray : array[5..7] of Integer;
  DynamicArray : array of Integer;
  i : integer;
begin
  //initializing static array
  StaticArray[5] := 1;
  StaticArray[6] := 2;
  StaticArray[7] := 3;

  //setting the same length and bounds to the dynamic array
  //?

  //copying elements
  i := 0;
  for i := Low(StaticArray) to High(StaticArray) do
    DynamicArray[i] := StaticArray[i];
end;
Run Code Online (Sandbox Code Playgroud)

有没有办法设置动态数组的下限/0上限,或者它们是否总是具有下限和Length(Array) - 1上限?

arrays delphi dynamic-arrays delphi-xe7

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

Firemonkey XE7应用程序无法在Android 5上运行

我有一个Firemonkey XE7安卓应用程序,它在Android 4.x上运行完美
但是我在Android 5上测试了它并且它打开了但是一段时间后它关闭了.
程序中唯一能做的就是一个简单ShowMessage();的文件.
我使用了这样的文件地址:

filePath := System.IOUtils.TPath.GetDocumentsPath + System.SysUtils.PathDelim;
Run Code Online (Sandbox Code Playgroud)

问题是我的文件路径ShowMessage()还是什么?

delphi firemonkey delphi-xe7

0
推荐指数
1
解决办法
925
查看次数

如何检测32/64平台?

我需要检测应用程序是否在Win32/64上运行.

更新:人们报告依赖[HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0]键并不是一个好主意.

delphi 32bit-64bit delphi-xe7

0
推荐指数
1
解决办法
2855
查看次数

ScrollBox不会滚动

我有一个ScrollBox对象,我在其中插入了一些对象:align:= TalignLayout.Bottom和parent:= scrollbox,对象插入成功,但滚动框不滚动或显示ScrollBars,任何类型的帮助将非常感激谢谢你的关心

delphi firemonkey delphi-xe7

0
推荐指数
1
解决办法
1470
查看次数

如何强制exe始终从内存加载

使用标志(基于这篇文章)

IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
Run Code Online (Sandbox Code Playgroud)

IMAGE_FILE_NET_RUN_FROM_SWAP
Run Code Online (Sandbox Code Playgroud)

当可执行文件位于LAN路径或可移动设备中时,可以将可执行文件加载到内存中.

即使exe在本地光盘上,有没有办法实现相同的目的?

我知道几乎没有性能提升,但要"摆脱光盘"这是一个想法.我没有在文档中找到这样的编译器选项.

delphi compiler-flags delphi-xe7

0
推荐指数
1
解决办法
394
查看次数