我已经开始在Delphi 2010中使用泛型,但在编译这段代码时我遇到了问题:
TThreadBase = class( TThread )
...
end;
TThreadBaseList<T: TThreadBase> = class( TObjectList<T> )
...
end;
TDataProviderThread = class( TThreadBase )
...
end;
TDataCore = class( TInterfacedObject, IDataCore )
private
FProviders: TThreadBaseList<TDataProviderThread>;
...
end;
Run Code Online (Sandbox Code Playgroud)
然后我有一些嵌套的过程:
procedure MakeAllThreadsActive(aThreads: TThreadBaseList<TThreadBase>);
begin
...
end;
Run Code Online (Sandbox Code Playgroud)
最后我想在TDataCore类的代码中调用这个嵌套过程:
MakeAllThreadsActive(FProviders);
Run Code Online (Sandbox Code Playgroud)
但编译器不想编译它,它说('<>'括号被'()'替换):
[DCC错误] LSCore.pas(494):E2010不兼容类型:'TThreadBaseList(TThreadBase)'和'TThreadBaseList(TDataProviderThread)'
虽然TDataProviderThread是TThreadBase的后代,但我不明白它.
我不得不通过艰难的类型转换来修复它:
MakeAllThreadsActive(TThreadBaseList<TThreadBase>(FProviders));
Run Code Online (Sandbox Code Playgroud)
有人知道为什么编译器会说这个错误吗?
我想设计一个图表并设置一个样本的颜色.与Excel中的相同:

是否有某种公式或算法可以从给定的阴影或颜色生成下一个颜色?
如何比较多个项目?例如,我想检查所有变量A,B和C是否等于char'X'或者所有三个都等于'O'.(如果其中两个是X而一个是O则应该返回false.)
我试过了:
if (A, B, C == 'X' || A, B, C == 'O')
{
//Do whatever
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.做这个的最好方式是什么?
我试图使用ShellExecute从Delphi XE2中的另一个应用程序'one.exe'执行EXE'two.exe'.
ShellExecute(0, 'open', 'two.exe', nil, nil, SW_NORMAL);
Run Code Online (Sandbox Code Playgroud)
它工作正常,但每当我从任务管理器的进程选项卡终止应用程序'one.exe'(父应用程序)时,使用"结束进程树"选项,应用程序'two.exe'也会被终止.
如何阻止我的ShellExecuted应用程序像这样终止?
Delphi长期以来支持一些基本的数字类型,我想知道它们是如何相互关联的.
在Delphi 2007中,我发现了这些声明(有些是冲突的,有些只是别名):
Types.pas:
DWORD = LongWord;
Largeint = Int64;
Run Code Online (Sandbox Code Playgroud)
getmem.inc:
DWORD = Integer;
Run Code Online (Sandbox Code Playgroud)
Windows.pas:
DWORD = Types.DWORD;
SHORT = Smallint;
UINT = LongWord;
ULONG = Cardinal;
LONGLONG = Int64;
TLargeInteger = Int64;
ULONGLONG = UInt64;
Run Code Online (Sandbox Code Playgroud)
这让我想到基本签名数字类型是SmallInt,Integer和Int64.无符号,有Byte,WORD和UInt64.但Cardinal和LongWord有什么区别?(顺便说一下,这些类型的原始和预期外壳是什么?)
是否有一个有符号8位整数(Int8)的类型?
// Int8 = ?unknown?;
UInt8 = Byte;
Int16 = SmallInt;
UInt16 = Word;
Int32 = Integer;
UInt32 = LongWord;
// Int64 already exists
// UInt64 already exists
Run Code Online (Sandbox Code Playgroud)
最后,我应该如何定义Int和UInt,特别是关于C/C++兼容性以及将来切换到其他平台(可能还有64位)?(当然,一个相关的问题是如何在64位Delphi中定义各种数字类型?)
我想在我的代码中禁用特定警告(W1035),因为我认为编译器对此警告是错误的:
function TfrmNagScreen.Run: TOption;
begin
if ShowModal = mrOk then
Result := TOption(rdgAction.EditValue)
else
Abort
end;
Run Code Online (Sandbox Code Playgroud)
因为Abort投掷,结果不可能是未定义的EAbort.
我试过了:
{$WARN 1035 Off}:显然这仅适用于某些特定错误(请参阅文档){$W-1035}:什么都不做我知道我可以在项目选项中全局关闭警告,或使用{$WARNINGS OFF},但这不是这里的意图.
编辑:我现在已经将QC作为#89744了.
当我在代码中使用Delphi指令时,例如:
{$IFDEF something}
.
.
.
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
我在哪里为项目分配"某事"这个词?我在一些地方试过项目选项,但它没有用.猜猜我找不到正确的.
我有一个从右到左的HTML页面.当我不使用任何doctype时,我的数字是阿拉伯语/波斯语,但是当我使用严格模式时,他们会转向英语.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">
Run Code Online (Sandbox Code Playgroud)
在添加doctype之前:

添加doctype后:

我也将这些元标记添加到我的页面:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Language" content="fa" />
Run Code Online (Sandbox Code Playgroud)
那么如何在具有严格doctype的页面中查看阿拉伯数字(在IE中,因为Firefox无论如何都不显示阿拉伯数字)?
假设我有一个TList类的实例(BDS 2006,所以这是一个指针类型列表).我放入列表的每个指针都引用New()函数分配的内存.因此,当我想清除列表时,我必须遍历它并处理每个项目,对吧?但如何正确地做到这一点?我是否必须将每个处理过的物品投射到它的实际类型?
type
TMyRec = record
Field1: string;
Field2: integer;
end;
PMyRec = ^TMyRec;
...
var
MyList: TList;
MyRecPointer: PMyRec;
begin
...
New(MyRecPointer);
...
MyList.Add(MyRecPointer);
...
for i := 0 to MyList.Count - 1 do
Dispose(PMyRec(MyList[x]));
MyList.Clear();
end;
Run Code Online (Sandbox Code Playgroud)
请查看最后的for循环.我将每个项目投射到PMyRec以处置内存.这有必要吗?我知道Dispose()函数有一个Pointer参数,所以在这种情况下,转换似乎很愚蠢,但我仍然不确定.因为Dispose()函数如何知道在获得一般指针类型时要处理多少内存?
这是第二种方法(没有类型转换):
for i := 0 to MyList.Count - 1 do
Dispose(MyList[x]);
Run Code Online (Sandbox Code Playgroud)
如果有人解释我该怎么做以及为什么,我将不胜感激.非常感谢.
delphi ×8
arabic ×1
c++ ×1
casting ×1
colors ×1
delphi-2007 ×1
delphi-2009 ×1
delphi-2010 ×1
delphi-xe2 ×1
dispose ×1
doctype ×1
generics ×1
html ×1
numbers ×1
pointers ×1
types ×1