我想像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
我在项目中使用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
调试器在错误的源代码中步入(如同F7),但我想恢复正常工作模式,其中Delphi基本DCU(库)只编译到我的代码中,并且源不用于调试.
例如,在我的程序中出现错误时,调试器正在进入Controls.pas,进入TControl.Click.正常情况(安装后)是Delphi跨越这些方法的.
我应该在没有调试信息的情况下重新编译Controls.pas吗?如果是这样,怎么样?
我通过附加信息扩展这个主题,以便更好地理解:
我们使用Delphi6 Prof. Mouse有什么问题(系统错误代码5).因此,我们要重新编译为Controls.pas以替换Mouse Position getter代码.然后:
通过这些步骤,我可以使用鼠标安全代码编译源代码.
好的,但随后德尔福每次都会在F7上进入Controls.pas,并且在任何例外情况下 - 这都是非常"愤怒"的事情.
无论我从库路径中删除了"Controls.pas" - 然后调试器为它找到原始的"Controls.pas",然后打开它...... :-(
我们不在任何代码中使用"Use Debug DCU-s".
我试图从编译器选项中删除"Debug Information",但不管怎么说,Delphi打开原来的Controls.pas ...
所以我搜索到Delphi的方式不要进入"Controls.pas",但是使用我的dcu ......
我希望这能为解决问题提供更好的背景.
我用D6检查了FastMM4.当我使用"Forms"调试一个简单的应用程序时,我每次都有3行内存泄漏.
此应用程序已泄露内存.小块泄漏(不包括指针注册的预期泄漏):
13 - 20字节:TObjectList x 3,未知x 3 29 - 36字节:TWinHelpViewer x 1 37 - 52字节:THelpManager x 1
这是正常的吗?
哪件事导致了这个?
谢谢:dd
我想写一个简单的应用程序,输入一些字符串,并用它做一些事情.
我搜索类似于Delphi的InputBox或InputQuery的函数,从预定义的表单读取字符串.这就像MessageBox对于避免手工表单创建非常有用.
例如:
p1 := InputBox('Type the parameter', 'Parameter 1');
...
Run Code Online (Sandbox Code Playgroud)
但我没有发现任何功能.谁知道呢?
谢谢:dd
我想将元素复制到远程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"
我的问题是下一个:
我有自己的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
我有一个使用我自己的气球表格的应用程序.这是一种非边界的fsStayOnTop类型.
我用这段代码展示它:
ShowWindow(Handle, SW_SHOWNOACTIVATE);
Visible := True;
Run Code Online (Sandbox Code Playgroud)
今天我意识到,如果我激活另一个应用程序,那么气球不会出现!所以它正在失去它的顶级风格.
环境:Win7/x64 Delphi 6 Professional
我能用它做什么?
谢谢:dd
我可以将"任何"记录类型传递给我的程序吗?
我多次使用带有字符串的"记录".
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)
感谢您的每一个信息!
我遇到了有趣的问题.
我有一个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 ×9
forms ×2
ado ×1
autocommit ×1
balloon ×1
c# ×1
clear ×1
components ×1
date ×1
dbgrid ×1
dcu ×1
dde ×1
debugging ×1
default ×1
delphi-6 ×1
encode ×1
fastmm ×1
field ×1
finalize ×1
function ×1
input ×1
memory ×1
memory-leaks ×1
option ×1
php ×1
postgresql ×1
record ×1
sql-server ×1
string ×1
subprocess ×1
topmost ×1
transactions ×1
utf ×1
wait ×1
window ×1