以下子范围枚举声明有效:
type
TReceiptCode = 'A'..'F';
Run Code Online (Sandbox Code Playgroud)
这不是:
type
TReceiptCode = ' ','A'..'F', 'R';
Run Code Online (Sandbox Code Playgroud)
也没有
type
TReceiptCode = ' ','A','B','C','D','E','F','R';
Run Code Online (Sandbox Code Playgroud)
如何声明具有非连续值的子范围类型?
我正在寻找一个报告引擎来取代Delphi 5的QuickReports.
要求
我看过的一些事情:
我需要知道我的应用程序什么时候收到一条WM_SETTINGCHANGE消息(以前称为WM_WININICHANGE).
问题是TApplication中的消息泵在我有机会看到它之前将其发送到黑洞(默认处理程序):
procedure TApplication.WndProc(var Message: TMessage);
...
begin
Message.Result := 0;
for I := 0 to FWindowHooks.Count - 1 do
if TWindowHook(FWindowHooks[I]^)(Message) then Exit;
CheckIniChange(Message);
with Message do
case Msg of
WM_SETTINGCHANGE:
begin
Mouse.SettingChanged(wParam);
Default; <----------------------*poof* down the sink hole
end;
...
end;
...
end;
Run Code Online (Sandbox Code Playgroud)
该程序CheckIniChange()不会抛出我能处理的任何事件,也不会抛出Mouse.SettingChanged().
一旦代码路径到达Default,就会沿着DefWindowProc排水孔向下发送,永远不会再被看到(因为WndProc所做的第一件事就是设置Message.Result为零.
我希望为TApplicationEvents.OnMessage事件分配一个处理程序:
procedure TdmGlobal.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
case Msg.message of
WM_SETTINGCHANGE:
begin
// Code
end; …Run Code Online (Sandbox Code Playgroud) 如何获取持有事件处理程序的变量的地址?
例如
TExample = class(TObject)
private
FOnChange: TNotifyEvent;
end;
Run Code Online (Sandbox Code Playgroud)
我想要的地址的的FOnChange私有成员,事件处理函数,变量.
我试图找出谁FOnChange用垃圾覆盖我的处理程序变量.
我正在逐步完成代码:
if Assigned(FOnChange) then
FOnChange(Self);
Run Code Online (Sandbox Code Playgroud)
任何事件处理程序曾经分配,以及一段时间的FOnChange变量是nil在观察窗口:
@FOnChange: nil
Addr(FOnChange): nil
Run Code Online (Sandbox Code Playgroud)
但后来这个FOnChange变量变成了垃圾:
@FOnChange: $2C
Addr(FOnChange): $2C
Run Code Online (Sandbox Code Playgroud)
所以我想FOnChange在CPU窗口的数据窗格中观察变量,以便我可以从以下位置观看:
00410018 00000000
Run Code Online (Sandbox Code Playgroud)
至
00410018 0000002C
Run Code Online (Sandbox Code Playgroud)
除了我不知道的地址FOnChange; 我刚刚编造了$410018.
如何找到事件变量的地址?
观察名单
OnChange: nil
@OnChange: nil
@@OnChange: Variable required
@FOnChange: nil
Assigned(OnChange): False
Assigned(FOnChange): False
@@FOnChange: $253B588
addr(addr(FOnChange)): $253B588
Run Code Online (Sandbox Code Playgroud)
Alt …
在本文档中, http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx#paths
为了使 Windows 应用程序可以访问这些设备对象,设备驱动程序在 Win32 命名空间“Global??”中创建了一个符号链接(symlink),指向它们各自的设备对象。例如“Global??”下的COM0 和COM1 子目录只是指向 Serial0 和 Serial1 的符号链接,“C:”是指向 HarddiskVolume1 的符号链接,“Physicaldrive0”是指向 DR0 的符号链接,依此类推。如果没有符号链接,使用 Win32 命名空间约定的任何 Windows 应用程序将无法使用指定的设备“Xxx”,如前所述。但是,可以使用任何支持格式为“\Device\Xxx”的 NT 命名空间绝对路径的 API 打开该设备的句柄。
什么是 API?请让我知道一些这样的功能。
例如,我们可以在GLOBAL??命名空间中放置一个设备:
GLOBAL??\
COM227
Run Code Online (Sandbox Code Playgroud)
我们可以使用CreateFile以下方法成功打开此设备:
//Note: we have to prefix it with \\.\ in order to tell CreateFile that
//we want to open something from the Global device namespace.
//Otherwise it will try to open a file
HANDLE hdev = CreateFile("\\.\COM227", GENERIC_READ, 0, null, OPEN_EXISTING, 0, 0);
if (hdev …Run Code Online (Sandbox Code Playgroud) 问题:我想将两个类拆分为自己的文件,同时避免循环引用.
我有一个单元有一些类(和一些枚举和常量).任何人都会认出Click and Clack挺杆兄弟:
unit Cartalk;
interface
type
TSolution = (solTransmission, solBrakes, solGremlins);
TTappetBrother = class(TObject)
public
function GetSolution: TSolution; virtual; abstract;
end;
TClick = class(TTappetBrother)
public
function GetSolution: TSolution; override;
end;
TClack = class(TTapperBrother)
public
function GetSolution: TSolution; override;
end;
implementation
function TClick.GetSolution: TSolution;
begin
Result := solTransmission;
end;
function TClack.GetSoltution: TSolution;
begin
Result := solGremlins;
end;
end.
Run Code Online (Sandbox Code Playgroud)
现在显然是我的两个班级TClick并且TClick相当复杂.对于管理,我想分裂TClick和TClack出自己的单位而没有违反任何现有的外部代码.
我的第一个问题是:
unit Cartalk;
interface
uses
Cartalk_Click, Cartalk_Clack; …Run Code Online (Sandbox Code Playgroud) delphi refactoring circular-dependency delphi-5 circular-reference
btr,bts指令简单,可以锁定共享资源。
为什么该指令cmpxchg存在?这两个指令有什么不同?
我有一个通过WMI安装软件驱动程序的类.但是,我注意到在编写单元测试时,为了执行断言,我需要额外的辅助方法.例如,为了确保添加驱动程序,我需要确保驱动程序的数量增加了一个,这不是被测试类中的方法.
单元测试这是正常的,还是我做错了什么?我将采用所有这些辅助方法并将它们提取到静态类.
谢谢
我一直在调用一种方法:
t1, t2 = LSL:GetDiffItem(item)
Run Code Online (Sandbox Code Playgroud)
方法声明为:
GetDiffID(item, ignoreEnchant, ignoreGem, red, yellow, blue, meta, ignorePris)
Run Code Online (Sandbox Code Playgroud)
现在我想传递其他参数,跳过一些:
项目,ignoreEnchant,ignoreGem,红,黄,蓝,元,ignorePris
我试着跳过参数:
t1, t2 = LSL:GetDiffItem(item, ignore, ignore, , , , , ignore)
Run Code Online (Sandbox Code Playgroud)
但当然这不起作用:
'附近的意外符号'
那么,如何跳过Lua中的可选参数?
我想使用Oracle SQL Developer多次异步执行存储过程.
伪代码
var pStatus number
var pOraErrCd varchar2
var pOraErrMsg varchar2
for i 1 .. 1000 -- do async
loop
exec myproc('test',:pStatus ,:pOraErrCd ,:pOraErrMsg);
end loop;
Run Code Online (Sandbox Code Playgroud)
存储过程的目的是进行一些插入.对于测试,我只想异步执行存储过程很多次.我不关心任何返回值.
有一种"简单"的方法吗?
delphi ×5
delphi-5 ×3
winapi ×2
windows ×2
asynchronous ×1
debugging ×1
device ×1
disassembly ×1
enums ×1
filesystems ×1
locking ×1
lua ×1
messages ×1
nunit ×1
oracle ×1
pascal ×1
plsql ×1
range ×1
refactoring ×1
reporting ×1
sql ×1
unit-testing ×1
x86 ×1