我需要从字符串中删除所有非标准文本characers.我需要删除所有非ascii和控制字符(换行/回车除外).
使用delphi 7:
AddObject?将一个整数添加到stringlist项的对象部分?我试图以递归方式删除文件夹及其所有子文件夹,但它根本不起作用,所以有人可以检查代码并告诉我这里做错了什么吗?
我在Windows XP下通过D7运行此代码
if FindFirst (FolderPath + '\*', faAnyFile, f) = 0 then
try
repeat
if (f.Attr and faDirectory) <> 0 then
begin
if (f.Name <> '.') and (f.Name <> '..') then
begin
RemoveDir(FolderPath +'\'+ f.Name);
end
else
begin
//Call function recursively...
ClearFolder(FolderPath +'\'+ f.Name, mask, recursive);
end;
end;
until (FindNext (f) <> 0);
finally
SysUtils.FindClose (f)
end;
end;
Run Code Online (Sandbox Code Playgroud) 在我的服务器上有几个文件的修改日期31/DEC/1979(不要问我原因).所以FileExists返回false.
Sysutils.FileExists 看起来像这样:
function FileAge(const FileName: string): Integer;
var
Handle: THandle;
FindData: TWin32FindData;
LocalFileTime: TFileTime;
begin
Handle := FindFirstFile(PChar(FileName), FindData);
if Handle <> INVALID_HANDLE_VALUE then
begin
Windows.FindClose(Handle);
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
begin
FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
LongRec(Result).Lo) then Exit;
end;
end;
Result := -1;
end;
function FileExists(const FileName: string): Boolean;
begin
Result := FileAge(FileName) <> -1;
end;
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么功能首先取决于FileAge?以下行不够吗?:
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
// Yes the file exists!
Run Code Online (Sandbox Code Playgroud)
甚至基于文件属性:
function …Run Code Online (Sandbox Code Playgroud) 是否可以从代码中设置"版本信息"设置?我想在不使用项目选项对话框的情况下设置版本编号和"注释"属性的值.
我正在使用Delphi 7,我想创建一个自定义警告消息(将在编译时显示),因此我可以警告其他程序员进行一些修改.我在互联网上搜索过,但我没有发现任何相关内容.
其他解决方案也受到欢迎,因为其他程序员在编译/构建源代码时会被警告我想要的东西.
在Delphi 7的TMemo控件中,尝试使用键组合Ctrl + A来选择all并不做任何事情(不选择全部).所以我做了这个程序:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
C: String;
begin
if ssCtrl in Shift then begin
C:= LowerCase(Char(Key));
if C = 'a' then begin
Memo1.SelectAll;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
有没有一个技巧,所以我不必这样做?如果没有,那么这个程序看起来不错吗?
我有一个数据库列,只能占用一个字符串的40个字符.所以当字符串的长度大于40个字符时,它会给我错误.如何在delphi中将字符串剪切/修剪为40个字符?
这是Delphi 7中的简化方案:
procedure TMyClass.InternalGetData;
var
pRequest: HINTERNET;
/// nested Callback
procedure HTTPOpenRequestCallback(hInet: HINTERNET; Context: PDWORD; Status: DWORD; pInformation: Pointer; InfoLength: DWORD); stdcall;
begin
// [...] make something with pRequest
end;
begin
pRequest := HTTPOpenRequest(...);
// [...]
if (InternetSetStatusCallback(pRequest, @HTTPOpenRequestCallback) = PFNInternetStatusCallback(INTERNET_INVALID_STATUS_CALLBACK)) then
raise Exception.Create('InternetSetStatusCallback failed');
// [...]
end;
Run Code Online (Sandbox Code Playgroud)
整件事似乎工作正常,但它是否真的正确和安全?我希望以这种方式封装它,因为它更具可读性和清洁性.我怀疑嵌套过程是否是一个简单的,正常的过程,因此它可以有自己的调用约定(stdcall)并安全地引用外部方法的局部变量(pRequest).
谢谢.
delphi ×10
delphi-7 ×10
ascii ×1
callback ×1
delphi-2010 ×1
delphi-xe2 ×1
parsing ×1
tmemo ×1
tstringlist ×1