小编Jer*_*dge的帖子

为什么在访问对象之前我不应该使用"if Assigned()"?

这个问题是stackoverflow上人们特别评论的延续,我现在已经看过几次不同的时间了.我和教我Delphi的开发人员一样,为了保证安全,if assigned()在释放对象之前,以及在做其他各种事情之前总是先做检查.但是,我现在被告知我应该添加此支票.我想知道如果我这样做,应用程序编译/运行的方式是否存在任何差异,或者它是否会对结果产生影响...

if assigned(SomeObject) then SomeObject.Free;
Run Code Online (Sandbox Code Playgroud)

假设我有一个表单,我在表单创建时在后台创建一个位图对象,并在完成后释放它.现在我想我的问题是,当我试图访问可能在某些时候可能已经免费的对象时,我已经习惯了对我的很多代码进行检查.即使没有必要,我也一直在使用它.我喜欢彻底......

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FBitmap: TBitmap;
  public
    function LoadBitmap(const Filename: String): Bool;
    property Bitmap: TBitmap read FBitmap;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FBitmap:= TBitmap.Create;
  LoadBitmap('C:\Some Sample Bitmap.bmp');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if assigned(FBitmap) then begin //<-----
    //Do some routine to close file …
Run Code Online (Sandbox Code Playgroud)

delphi

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

马尔可夫链和隐马尔可夫模型有什么区别?

马尔可夫链模型和隐马尔可夫模型有什么区别?我在维基百科上读过,但无法理解这些差异.

markov-chains markov hidden-markov-models

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

Delphi中绝对路径和相对路径之间的转换

是否有标准函数在Delphi中执行绝对的< - >相对路径转换?

例如:

  • '基地'路径是 'C:\Projects\Project1\'
  • 相对路径是 '..\Shared\somefile.pas'
  • 绝对路径是 'C:\Projects\Shared\somefile.pas'

我正在寻找这样的东西:

function AbsToRel(const AbsPath, BasePath: string): string;
// '..\Shared\somefile.pas' =
//   AbsToRel('C:\Projects\Shared\somefile.pas', 'C:\Projects\Project1\')  
function RelToAbs(const RelPath, BasePath: string): string;
// 'C:\Projects\Shared\somefile.pas' =
//   RelToAbs('..\Shared\somefile.pas', 'C:\Projects\Project1\')  
Run Code Online (Sandbox Code Playgroud)

delphi path

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

SQL Server @@ SERVERNAME返回旧机器名?

我在我的SQL Server 2008 R2中偶然发现了一个问题 - 当我打电话时@@SERVERNAME,它正在返回我的OLD计算机的机器名,而不是当前的机器名.为什么是这样?我该如何解决?SQL Server以某种方式记住旧机器名称.

sql-server sql-server-2008-r2

31
推荐指数
2
解决办法
6万
查看次数

设计时包无法构建 - 找不到文件:'Graphics.dcu'

在Delphi XE2中,我在一对设计/运行时包中有一个控件.最初,一切都很好.我已经多次建造了它们.突然间没有任何警告,设计时间包开始在我的一个单位抱怨Graphics我建造时单元缺失.Graphics是一个标准单位,但在这一个地方找不到.我甚至没有对这个单位做过任何改动,据我所知,任何可能影响这个的变化.

这里只是本单元顶部(界面)的用途:

uses
  Graphics, ColorConv, Classes, Dialogs, ZLib;
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它是一个非常简单的单元,我只对这个项目进行了非常简单的更改.有什么可以让它开始抱怨这一点?

奇怪的是,如果我安装它,一切正常,它只是不构建.

有相当多的代码,我不想发布整个事情.

delphi scope custom-controls delphi-xe2

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

如何更改RAD Studio(2010及更高版本)IDE格式化代码的方式?

begin当我使用该Format Source选项时,如何配置RAD Studio IDE以使用相同行或下一行格式化我的代码?

最常见的偏好之一是begin- 在同一条线上或它自己的线上的位置.如何设置Delphi begin在Delphi XE2中使用一行或另一行格式化源代码?这是指当你去Edit>时Format Source

delphi code-formatting delphi-xe2

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

有没有更简单的方法来进行布尔转换?

我在几乎所有的项目中都多次使用过这个场景,当我进行某种数据转换时,当涉及到布尔值时,我觉得在简单化方面有点迷失.下面的声明就像我的代码中的一个痛苦的拇指:

if BoolVal then
  StrVal:= 'True'
else
  StrVal:= 'False';
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更简单的方法来执行此评估?或许有些使用Case我不了解的陈述?我的实际实现比仅仅更复杂,StrVal但它确实包括返回两个不同的值,具体取决于它是True还是False.例如,这里有一些真正的代码......

if fsBold in Can.Font.Style then
  ConvertTo(AddSomeOtherText + 'True')
else
  ConvertTo(AddSomeOtherText + 'False');
Run Code Online (Sandbox Code Playgroud)

这只是为了强调我希望有多简单.我想知道我是否可以按照以下方式做点什么:

ConvertTo(AddSomeOtherText + BoolToStrCase((fsBold in Can.Font.Style), 'True', 'False'));
Run Code Online (Sandbox Code Playgroud)

我确信这不是一个真正的命令,但我在一条线上寻找那种简单性.

delphi boolean type-conversion delphi-xe2

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

如何在一个地方为多个应用程序定义应用程序版本?

我们有一个由众多应用程序组成的系统.所有应用程序的版本都同时更改.目前,当我们发布新版本时,我们必须手动打开每个应用程序的项目选项并逐个更改版本.有没有办法在同一版本上编译所有应用程序,例如,将其保存在全局文件中并在编译时,读取此文件并将该版本分配给项目?我只是想消除太多步骤,因为我们计划更频繁地更改版本号.我想在一个地方改变它.可以这样做吗?如何?

delphi msbuild compilation version delphi-xe2

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

IIS抱怨使用LDAP身份验证进行身份模拟

我按照教程在ASP.NET/C#4.0 Web应用程序中实现LDAP身份验证.我在Visual Studio 2010中这样做了.该站点在调试模式下通过Visual Studio运行良好,但是当我在IIS7中发布此站点时,它失败并出现以下错误:

HTTP错误500.24 - 内部服务器错误检测到的ASP.NET设置不适用于集成管理管道模式.

最可能的原因:

  • system.web/identity@impersonate设置为true.

实际上,本教程的一部分要求我将其添加到配置文件中...

<identity impersonate="true"/>
Run Code Online (Sandbox Code Playgroud)

那么为什么我会收到此错误,我该如何解决?

c# asp.net authentication ldap .net-4.0

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

Delphi XE2数据模块只需要数据库组件吗?

在Delphi的早期版本中,我使用数据模块(TDataModule)作为保留非可视组件的地方,以避免使主表单混乱.在Delphi XE2中,当我创建一个新的数据模块时,它只允许我在其中放置与数据库相关的组件(例如TADOConnectionTDataSource).这是为什么以及如何将其他组件放入其中?还有其他选择吗?

delphi datamodule delphi-xe2

18
推荐指数
2
解决办法
3146
查看次数