小编dur*_*ara的帖子

Delphi:像Python一样编码字符串

我想像Python那样对字符串进行编码.

Python代码是这样的:

def EncodeToUTF(inputstr):
  uns = inputstr.decode('iso-8859-2')
  utfs = uns.encode('utf-8')
  return utfs
Run Code Online (Sandbox Code Playgroud)

这很简单.

但是在Delphi中,我不明白,如何编码,先强制好字符集(无论我们拥有哪台计算机).

我试过这个测试代码来看转换:

procedure TForm1.Button1Click(Sender: TObject);
var
    w : WideString;
    buf : array[0..2048] of WideChar;
    i : integer;
    lc : Cardinal;
begin
    lc := GetThreadLocale;
    Caption := IntToStr(lc);
    StringToWideChar(Edit1.Text, buf, SizeOF(buf));
    w := buf;
    lc := MakeLCID(
        MakeLangID( LANG_ENGLISH, SUBLANG_ENGLISH_US),
        0);
    Win32Check(SetThreadLocale(lc));
    Edit2.Text := WideCharToString(PWideChar(w));
    Caption := IntToStr(AnsiCompareText(Edit1.Text, Edit2.Text));
end;
Run Code Online (Sandbox Code Playgroud)

输入是:"árvíztűrőtükörfúrógép",匈牙利口音测试词组.当地的lc是1038(hun),新的lc是1033.

但这次每次都会得到0个结果(相同的字符串),并且重音是相同的,我不会丢失ŐŰ这不是英语朗.

我做错了什么?我如何做与Python相同的事情?

感谢您的帮助,链接等:dd

delphi encode utf character-encoding

5
推荐指数
1
解决办法
3120
查看次数

PHP:PGSQL驱动程序和AutoCommit?

我在项目中使用pg_connect和pg_query.但我真的不确定是否使用AutoCommit模式的pg_connect?

这是一个重要的问题,因为我需要在事务下编写一些块,如果服务器忽略其中一个语句,那么数据库就会不一致......

还有一个有趣的问题,pg_query执行后提交?

例如:

pg_query('begin; update table1...; update table2...; commit');
Run Code Online (Sandbox Code Playgroud)

和...一样

pg_query('begin;');
pg_query('update table1...;');
pg_query('update table2...;');
pg_query('commit');
Run Code Online (Sandbox Code Playgroud)

而且是

pg_query('begin; update table1...; update table2...; commit');
Run Code Online (Sandbox Code Playgroud)

在AutoCommit模式下工作,所以开始和提交仍然是?

谢谢你的帮助:dd

php postgresql transactions autocommit

5
推荐指数
1
解决办法
3109
查看次数

如何阻止调试器进入Delphi提供的单元?

调试器在错误的源代码中步入(如同F7),但我想恢复正常工作模式,其中Delphi基本DCU(库)只编译到我的代码中,并且源不用于调试.

例如,在我的程序中出现错误时,调试器正在进入Controls.pas,进入TControl.Click.正常情况(安装后)是Delphi跨越这些方法的.

我应该在没有调试信息的情况下重新编译Controls.pas吗?如果是这样,怎么样?


我通过附加信息扩展这个主题,以便更好地理解:

我们使用Delphi6 Prof. Mouse有什么问题(系统错误代码5).因此,我们要重新编译为Controls.pas以替换Mouse Position getter代码.然后:

  1. 我为它创建了一个文件夹:"c:\ D\Common\Delphi_Patches\Delphi_6 \"
  2. 我将原始的Controls.pas放入其中.
  3. 我修改了Controls.pas,取代了位置getter代码.
  4. 我设置了Delphi的Library路径,将第一个文件夹设置为"c:\ D\Common\Delphi_Patches\Delphi_6 \"

通过这些步骤,我可以使用鼠标安全代码编译源代码.

好的,但随后德尔福每次都会在F7上进入Controls.pas,并且在任何例外情况下 - 这都是非常"愤怒"的事情.

无论我从库路径中删除了"Controls.pas" - 然后调试器为它找到原始的"Controls.pas",然后打开它...... :-(

我们不在任何代码中使用"Use Debug DCU-s".

我试图从编译器选项中删除"Debug Information",但不管怎么说,Delphi打开原来的Controls.pas ...

所以我搜索到Delphi的方式不要进入"Controls.pas",但是使用我的dcu ......

我希望这能为解决问题提供更好的背景.

delphi debugging dcu

5
推荐指数
2
解决办法
5409
查看次数

FastMM4,Delphi6,TApplication泄漏?

我用D6检查了FastMM4.当我使用"Forms"调试一个简单的应用程序时,我每次都有3行内存泄漏.

此应用程序已泄露内存.小块泄漏(不包括指针注册的预期泄漏):

13 - 20字节:TObjectList x 3,未知x 3 29 - 36字节:TWinHelpViewer x 1 37 - 52字节:THelpManager x 1

这是正常的吗?

哪件事导致了这个?

谢谢:dd

forms memory delphi memory-leaks fastmm

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

C#是否有一些函数用表格输入字符串?

我想写一个简单的应用程序,输入一些字符串,并用它做一些事情.

我搜索类似于Delphi的InputBox或InputQuery的函数,从预定义的表单读取字符串.这就像MessageBox对于避免手工表单创建非常有用.

例如:

p1 := InputBox('Type the parameter', 'Parameter 1');
...
Run Code Online (Sandbox Code Playgroud)

但我没有发现任何功能.谁知道呢?

谢谢:dd

c# delphi string input function

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

Delphi 6,ADO,MS数据库"Date"字段与ftWideString相同

我想将元素复制到远程MS-SQL数据库.我有转换错误.

当我检查ADOTable结构时,我看到了MS字段

WHENCREATED DATE [NULL]
Run Code Online (Sandbox Code Playgroud)

转换为

ftWideString 10
Run Code Online (Sandbox Code Playgroud)

Hmmmmm ....

这是正常的吗?或者我可以设置一些日期字段来自TDateTime?

提供者是"SQLOLEDB.1"

sql-server delphi field ado date

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

Delphi:DBGrid选项没有保存?

我的问题是下一个:

我有自己的DBGrid,基于TDBGrid.

因为在很多地方更好地看到Selection,我认为我将它设置为Create,如果我稍后将其设置为False,属性编辑器将保存Options属性.所以构造函数创建它:

constructor TMyDBGrid.Create(aOwner: TComponent);
begin
    inherited Create(aOwner);
    Options := Options + [dgAlwaysShowSelection];
end;
Run Code Online (Sandbox Code Playgroud)

好吧,我认为没关系,因为我把它设置为True,创建一开始就是True,但是在Loaded上Delphi会将它改为好的值(False).

但经验表明,这现在不起作用!

我不知道为什么.

我把自己的dbgrid放在Form1上.ASS选项已启用.我把它设置为假.

我开始申请.而现在这又是重中之重.当我在LOaded上显示Option的值时,我得到了True值.因此,不会根据需要加载该值.

我不知道为什么会发生这种情况,但我认为这是基于"默认"??? 可能默认为False,因此如果我将其设置为False,则不将值保存到DFM中...

那么在没有这种效果的情况下保存值的可能方法是什么?

谢谢你的帮助:dd

delphi components default dbgrid option

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

Delphi:带有fsStayOnTop的Balloon表单在Win7中不起作用

我有一个使用我自己的气球表格的应用程序.这是一种非边界的fsStayOnTop类型.

我用这段代码展示它:

ShowWindow(Handle, SW_SHOWNOACTIVATE);
Visible := True;
Run Code Online (Sandbox Code Playgroud)

今天我意识到,如果我激活另一个应用程序,那么气球不会出现!所以它正在失去它的顶级风格.

环境:Win7/x64 Delphi 6 Professional

我能用它做什么?

谢谢:dd

forms delphi window balloon topmost

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

如何完成通过函数的无类型参数传递的记录?

我可以将"任何"记录类型传递给我的程序吗?

我多次使用带有字符串的"记录".

type 
  TR = record
    a: string;
    b: string;
  end;
Run Code Online (Sandbox Code Playgroud)

要清除它们,我需要写:

Finalize(R);
FillChar(R, SizeOf(R), #0);
Run Code Online (Sandbox Code Playgroud)

问题是如何通过任何类型的记录来清除它?

为此我得到了这个提示:"表达式不需要初始化/完成".

procedure ClearRecord(var R);
begin
  Finalize(R);
  FillChar(R, SizeOf(R), #0);
end;
Run Code Online (Sandbox Code Playgroud)

感谢您的每一个信息!

delphi record finalize clear delphi-6

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

Delphi:CreateProcess + WaitForSingleObjects + DDE = 15秒延迟

我遇到了有趣的问题.

我有一个DDE客户端,从DDE服务器读取一些值.当我从Delphi启动此客户端时,或者在exec上启用dblclick时,会立即显示结果.

但是:当我从Indy TCPServer的线程或主应用程序启动它时,我有15秒的延迟.

我用这段代码启动子进程:

function StartAndWaitProcess
  (CmdLine : string='';
  CmdShow : integer = SW_SHOW;
  TimeOut : longint = -1) : Int64;
var
  SInfo: TStartupInfo;
  PInfo: TProcessInformation;
  ExitCode : Cardinal;
begin
    Result := -1;
    FillChar(SInfo,SizeOf(TSTartupInfo),0);
    with SInfo do begin
        cb := sizeof(TStartupInfo);
        dwFlags := STARTF_USESHOWWINDOW;
        wShowWindow := CmdShow;
    end;
    if not CreateProcess(nil, PChar(CmdLine),nil,nil,False,
        NORMAL_PRIORITY_CLASS,nil,nil,SInfo,PInfo) then Exit;
    if TimeOut > 0 then begin
        if WaitForSingleObject(PInfo.hProcess, TimeOut) <> WAIT_OBJECT_0 then begin
            TerminateProcess(PInfo.hProcess, 0);
            Exit;
        end
    end else begin
        WaitForSingleObject(PInfo.hProcess, INFINITE);
    end;
    GetExitCodeProcess(PInfo.hProcess, …
Run Code Online (Sandbox Code Playgroud)

delphi subprocess dde wait

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