标签: delphi-5

如何在非unicode Delphi版本中构建具有diacratic的WideString?

我正在尝试构建一个(测试)WideString:

á(U + 00E1小写字母拉丁文A,急性)

但使用它的分解形式:

拉丁文小写字母A(U + 0061)结合急性加速(U + 0301)

所以我有代码片段:

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)

delphi unicode delphi-5 unicode-string widestring

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

如何通过索引访问WideString的字符?

我有以下代码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

delphi delphi-5 widestring

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

两个字符串/集的交集

来自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)

delphi intersection set char delphi-5

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

如何暂停Windows关机

我需要在启动和关闭时将声卡静音/取消静音.

我已经找到了一些代码来完成这项工作,但是Windows通常会在关机时发出砰砰声并且声音永远不会被静音.

有人可以告诉我如何暂停关机足够长的时间让我的应用程序静音吗?我可以使用一个简单的TTimer来暂停应用程序足够长的时间来运行静音,然后让Windows继续关闭.

我如何告诉Windows等待?

我注意到,如果我让Firefox继续运行并尝试关机,Windows会停止并显示一条消息"这些程序阻止窗口关闭......"并需要单击以强制Firefox关闭.我需要找到.

delphi delphi-5 system-shutdown

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

如何使用Delphi 5创建Telnet客户端

如何在Delphi 5应用程序中创建Telnet客户端?

delphi client telnet delphi-5

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

Delphi:如何响应WM_SettingChange/WM_WinIniChange?

我需要知道我的应用程序什么时候收到一条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)

windows delphi winapi messages delphi-5

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

Delphi:如何获取事件变量的地址?

如何获取持有事件处理程序的变量的地址?

例如

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 debugging delphi-5 disassembly

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

将FindScanline汇编代码转换为purepascal

我试图将一些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 assembly delphi-5 delphi-xe7

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

Deplhi 5中的编译器指令SETPEFlags

我有一个使用Delphi 5.0构建的应用程序,工作正常,没有任何问题.但是当运行大型报表时,我的应用程序需要超过2 Gb的内存.做分析后发现,使用Compiler指令SETPEFlags我们可以将32位应用程序内存增加到4 GB.

我试图在我的程序中设置Delphi 5.0,但得到错误"无效的编译器指令".有人可以建议任何解决方法,而无需重建其他版本的应用程序.或者那些被添加到Delphi的版本?

提前致谢.

delphi delphi-5

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

如何在Delphi中生成GUID版本1?

有没有一种方法可以在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 uuid guid delphi-5

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