我正在尝试构建一个(测试)WideString:
但使用它的分解形式:
所以我有代码片段:
var
test: WideString;
begin
test := #$0061#$0301;
MessageBoxW(0, PWideChar(test), 'Character with diacratic', MB_ICONINFORMATION or MB_OK);
end;
Run Code Online (Sandbox Code Playgroud)
除了它似乎不起作用:

这可能是一个错误MessageBox,但我会继续说,它更可能是我的代码中的错误.
我尝试过的其他一些变化:
test := WideString(#$0061#$0301);
const
SmallLetterLatinAWithAcuteDecomposed: WideString = #$0061#$0301;
test := SmallLetterLatinAWithAcuteDecomposed
test := #$0061+#$0301; (Doesn't compile; incompatible types)
test := WideString(#$0061)+WideString(#$0301); (Doesn't compile; crashes compiler)
test := 'a'+WideString(#$0301); (Doesn't compile; crashes compiler)
//Arnauld's thought:
test := …Run Code Online (Sandbox Code Playgroud) 我有以下代码snippit将无法编译:
procedure Frob(const Grob: WideString);
var
s: WideString;
begin
s :=
Grob[7]+Grob[8]+Grob[5]+Grob[6]+Grob[3]+Grob[4]+Grob[1]+Grob[2];
...
end;
Run Code Online (Sandbox Code Playgroud)
德尔福5抱怨Incompatible types.
我尝试将其简化为:
s := Grob[7];
Run Code Online (Sandbox Code Playgroud)
哪个有效,并且:
s := Grob[7]+Grob[8];
Run Code Online (Sandbox Code Playgroud)
没有.
我只能假设WideString[index]没有返回WideChar.
我试图强迫事情WideChars:
s := WideChar(Grob[7])+WideChar(Grob[8]);
Run Code Online (Sandbox Code Playgroud)
但那也失败了:
不兼容的类型
5:Delphi 5来自python我在delphi5中寻找与此python代码(sets)相当的东西:
>>> x = set("Hello")
>>> x
set(['H', 'e', 'l', 'o'])
>>> y = set("Hallo")
>>> y
set(['a', 'H', 'l', 'o'])
>>> x.intersection(y)
set(['H', 'l', 'o'])
Run Code Online (Sandbox Code Playgroud) 我需要在启动和关闭时将声卡静音/取消静音.
我已经找到了一些代码来完成这项工作,但是Windows通常会在关机时发出砰砰声并且声音永远不会被静音.
有人可以告诉我如何暂停关机足够长的时间让我的应用程序静音吗?我可以使用一个简单的TTimer来暂停应用程序足够长的时间来运行静音,然后让Windows继续关闭.
我如何告诉Windows等待?
我注意到,如果我让Firefox继续运行并尝试关机,Windows会停止并显示一条消息"这些程序阻止窗口关闭......"并需要单击以强制Firefox关闭.我需要找到.
如何在Delphi 5应用程序中创建Telnet客户端?
我需要知道我的应用程序什么时候收到一条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 …
我试图将一些Delphi 5代码转换为Delphi XE7-x64,我仍然坚持以下代码:
function FindScanline(Source : Pointer; MaxLen : Cardinal;
Value : Cardinal) : Cardinal; assembler;
asm
PUSH ECX
MOV ECX,EDX
MOV EDX,EDI
MOV EDI,EAX
POP EAX
REPE SCASB
MOV EAX,ECX
MOV EDI,EDX
end;
Run Code Online (Sandbox Code Playgroud)
据我所知,发生了以下事情:
push the contents of ECX register(Value) onto the stack move contents of EDX register(MaxLen) into ECX register. now ECX holds (MaxLen) move contents of EDI register into EDX register. now EDX holds (EDI) move contents of EAX register into EDI register. now EDI holds (Source) …
我有一个使用Delphi 5.0构建的应用程序,工作正常,没有任何问题.但是当运行大型报表时,我的应用程序需要超过2 Gb的内存.做分析后发现,使用Compiler指令SETPEFlags我们可以将32位应用程序内存增加到4 GB.
我试图在我的程序中设置Delphi 5.0,但得到错误"无效的编译器指令".有人可以建议任何解决方法,而无需重建其他版本的应用程序.或者那些被添加到Delphi的版本?
提前致谢.
有没有一种方法可以在Delphi 5中生成GUID v1(基于时间)?我发现了这个功能...
unit ComObj;
function CreateClassID: string;
Run Code Online (Sandbox Code Playgroud)
但是我不确定它是否生成基于时间的GUID。我也知道这一点...
SysUtils.CreateGUID(newGUID);
Run Code Online (Sandbox Code Playgroud)
...,它调用CoCreateGUID产生GUID版本4(随机)的Windows API 。
delphi ×10
delphi-5 ×10
widestring ×2
assembly ×1
char ×1
client ×1
debugging ×1
delphi-xe7 ×1
disassembly ×1
guid ×1
intersection ×1
messages ×1
set ×1
telnet ×1
unicode ×1
uuid ×1
winapi ×1
windows ×1