相关疑难解决方法(0)

课堂助手有什么好处?

Delphi(可能还有许多其他语言)都有类助手.这些提供了一种向现有类添加额外方法的方法.没有做一个子类.

那么,班主任的好用途是什么?

delphi class helper

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

如何快速清除简单类型的记录?

我有一个像这样定义的结构:

const
  MaxSignalRecords=255;
type
  TSignalRecord=record
   signal1  : integer;
   signal2  : integer;
   signal3  : integer;
   signal4  : integer;
   signal5  : integer;
   signal6  : integer;
   bsignal1 : Boolean;
   bsignal2 : Boolean;
   bsignal3 : Boolean;
   bsignal4 : Boolean;
   bsignal5 : Boolean;
   bsignal6 : Boolean;
  end;

TListSignals = Array[0..MaxSignalRecords-1] of TSignalRecord;
Run Code Online (Sandbox Code Playgroud)

此结构用于在如下算法中进行数千次计算:

for i:=1 to 900000 do
begin
  CleartheList(MyList);
  DotheMath(MyList);
  DotheChart(MyList);
end;
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种快速的方法来将我的值初始化TListSignals为0和false.

现在我用这个:

procedure ClearListSignals(var ListSignals:TListSignals);
var
  i :Integer;
begin
  for i := 0 to MaxSignalRecords - 1 do …
Run Code Online (Sandbox Code Playgroud)

delphi

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

我可以生成自定义编译器错误吗?如果是这样,怎么样?

这就是我想要做的.我有一个项目必须在某些版本的Delphi或更高版本中编译.我想使用条件编译器指令来测试Delphi版本,然后使用自定义消息生成自定义编译器错误.如果无法发生错误,能够生成自定义编译器警告或提示也是适当的.

当然,我可以在条件代码段中放入一些不可编辑的giberish,这很好.但我的问题是"我可以有条件地生成自定义编译器错误吗?"


谢谢Johan和Serg.

这是解决方案,以及有关该问题的更多详细信息.我有一个最初在Delphi 2007中构建的应用程序.它包括连接到Web服务的Internet Direct组件.这些使用SSL.我最近将我的SSL库升级到更高版本,而这些版本与Delphi 2007 Indy组件的搭配并不是很好.我现在添加了以下编译器指令,以确保不再使用Delphi 2007或更早版本编译此应用程序:

{$IF CompilerVersion <= 19.0} // Delphi 2007 = 19.0
   {$MESSAGE Error 'This project must be compiled in Delphi 2009 or later'}
{$IFEND}
Run Code Online (Sandbox Code Playgroud)

delphi

27
推荐指数
2
解决办法
2843
查看次数

"现在打包强制字节对齐记录"是什么意思?

Delphi XE2的新功能包含以下内容.

现在打包强制字节对齐记录

如果您的遗留代码使用打包记录类型,并且您想要与外部DLL或C++链接,则需要从代码中删除"packed"一词.packed关键字现在强制字节对齐,而在过去它不一定这样做.行为更改与Del​​phi 2009中的C++对齐兼容性更改有关.

我不明白这一点.我正在努力解决这一问题:而在过去,它并不一定会这样做.我无法调和的是,压缩总是导致记录的字节对齐,据我所知.任何人都可以给出一个非字节对齐的打包记录的例子吗?显然,这必须是早期版本.

为什么文档说"如果你想与外部DLL或C++链接,你需要删除代码中的单词"?如果外部代码使用了#pragma pack(1)那么如果打包是非限制我们该怎么办?

$ALIGN指令怎么样?是{$A1} and {$A-}相当于packed或者是有一些额外的意义与packed

我似乎错过了一些东西,如果有人能够解释这一点,我会很感激.或者文档真的很差?

更新

我有理由相信文档是指记录本身的对齐而不是记录的布局.这是一个小程序,它表明packed记录的使用强制记录的对齐为1.

program PackedRecords;
{$APPTYPE CONSOLE}
type
  TPackedRecord = packed record
    I: Int64;
  end;

  TPackedContainer = record
    B: Byte;
    R: TPackedRecord;
  end;

  TRecord = record
    I: Int64;
  end;

  TContainer = record
    B: Byte;
    R: TRecord;
  end;

var
  pc: TPackedContainer;
  c: TContainer;

begin
  Writeln(NativeInt(@pc.R)-NativeInt(@pc.B));//outputs 1
  Writeln(NativeInt(@c.R)-NativeInt(@c.B));//outputs 8
  Readln;
end.
Run Code Online (Sandbox Code Playgroud)

这在Delphi …

delphi delphi-xe2

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

Delphi中"严格私有"和"受保护"访问修饰符之间的区别?

但是我学习编程,在用Pascal语言进行结构化编程之后,我开始用Delphi学习OOP.

所以,我真的不明白strict private指令和那个指令之间的区别protected.所以这是我的代码,它是关于"包"的创建,它只是我的Delphi课程的介绍,老师告诉我们如何创建对象:

    uses
  SysUtils;

Type

  Tbag= class (Tobject)                                                          
    strict private                                                                
      FcontenM : single;
      Fcontent : single;
    protected
      function getisempty : boolean;
      function getisfull: boolean;
    public
      constructor creer (nbliters : single);
      procedure add     (nbliters : single);
      procedure clear   (nbliters : single);
      property contenM : single read FcontenM;
      property content : single read Fcontent;
      property isempty : boolean read getisempty;
      property isfull : boolean read getisfull;
    end;


function Tseau.getisempty;
  begin
    result := Fcontent = 0;
  end;

function …
Run Code Online (Sandbox Code Playgroud)

delphi access-modifiers

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

Delphi支持哪些类型的运算符重载?

我想知道什么样的操作符重载是可能的(以及什么版本的Delphi)?感谢Hallvard对运算符重载的精彩描述,我知道:

  • 添加(左,右:类型):类型(对于'+'运算符)
  • 减(左,右:类型):类型(对于' - '运算符)
  • 乘(左,右:类型):类型(对于'*'运算符)
  • 除(左,右:类型):类型(对于'/'运算符)
  • 隐式(aValue:Type):AnotherType和
  • 隐式(aValue:AnotherType):类型(对于隐式赋值:a:= b)
  • 显式(aValue:Type):AnotherType和
  • 显式(aValue:AnotherType):Type(用于'casts'的显式assignmetns:a:= Type(b)

但是,我不知道的是'=','<=','<','<>','>'和'> ='运算符的名称.这些存在,我可以使用Delphi版本吗?

PS:我现在仍然使用Delphi 2009,所以如果2010年提供这些,我会有另一个强大的升级论据;-)

delphi operator-overloading

16
推荐指数
2
解决办法
4277
查看次数

无证的内在惯例

Delphi有这个列表:Delphi内在例程
但该列表不完整.

哪些无证的内在函数存在,因为它们的目的何时和目的是什么?

delphi documentation intrinsics

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

我应该何时在Delphi中使用增强记录类型而不是类?

Delphi 2006引入了新的记录功能,使其更加"面向对象".

在哪种情况下,记录类型更适合于设计而不是类类型?使用这些记录类型有哪些优势?

delphi oop class record delphi-2006

15
推荐指数
3
解决办法
5252
查看次数

为什么Delphi中的类没有运算符重载?

我总是想知道这一点,但为什么运算符重载不适用于Delphi中的类?

我记得在跑步时读了一次答案,它说它会与某些东西发生冲突,但我记不起来了.据我所知,只有隐式运算符可能会导致一些问题,因为类存储在堆上并且赋值实际上是堆地址的副本(基本上是复制指针).

delphi class operator-overloading

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

delphi XE多单元命名空间问题

我正在阅读Delphi XE中的RAD Studio Documentaion.这里有一些文字.

[Delphi参考 - > Delphi语言指南 - >程序和单元 - >使用命名空间 - >搜索命名空间 - >多单元命名空间]

多单元命名空间

如果单元声明引用相同的命名空间,则多个单元可以属于同一命名空间.例如,可以使用以下单元声明创建两个文件unit1.pas和unit2.pas:

// in file 'unit1.pas' 
unit MyCompany.ProjectX.ProgramY.Unit1 

// in file 'unit2.pas' 
unit MyCompany.ProjectX.ProgramY.Unit2 
Run Code Online (Sandbox Code Playgroud)

在此示例中,命名空间MyCompany.ProjectX.ProgramY逻辑上包含unit1.pas和unit2.pas中的所有接口符号.

命名空间中的符号名称必须是唯一的,跨命名空间中的所有单元.
在上面的示例中,Unit1和Unit2都定义了一个名为mySymbol的全局接口符号,这是一个错误

我测试了这个.代码如下.

----------------------------------------------------------------- 
program Project1; 

{$APPTYPE CONSOLE} 

uses 
  SysUtils, 
  Lib.A in 'Lib.A.pas', 
  Lib.B in 'Lib.B.pas'; 

begin 
  WriteLn ( TestValue ) ; 
  ReadLn ; 
end. 
----------------------------------------------------------------- 
unit Lib.A; 

interface 
  const TestValue : Integer = 10 ; 
implementation 

end. 
----------------------------------------------------------------- 
unit Lib.B; 

interface 
  const TestValue : Integer = 10 ; …
Run Code Online (Sandbox Code Playgroud)

delphi namespaces delphi-xe

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