标签: delphi-2007

替换包含#0的字符串?

我使用此函数将文件读取到字符串

function LoadFile(const FileName: TFileName): string;
begin
  with TFileStream.Create(FileName,
      fmOpenRead or fmShareDenyWrite) do begin
    try
      SetLength(Result, Size);
      Read(Pointer(Result)^, Size);
    except
      Result := '';  
      Free;
      raise;
    end;
    Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

这是文件的文字:

version  
Run Code Online (Sandbox Code Playgroud)

这是LoadFile的返回值:

'ÿþv'#0'e'#0'r'#0's'#0'i'#0'o'#0'n'#0
Run Code Online (Sandbox Code Playgroud)

我想创建一个包含"verabc"的新文件.问题是我仍然有问题用"abc"替换"sion".我正在使用D2007.如果我删除所有#0,那么结果将成为中文字符.

delphi string unicode utf-16 delphi-2007

0
推荐指数
1
解决办法
2854
查看次数

GetFileVersionInfoSize和GetFileVersionInfo什么都不返回

GetFileVersionInfoSize为0(零)并且GetFileVersionInfo不返回任何内容

我正在使用它像这样:

function FileVersion(const FileName: TFileName): String;
var
  VerInfoSize: Cardinal;
  VerValueSize: Cardinal;
  Dummy: Cardinal;
  PVerInfo: Pointer;
  PVerValue: PVSFixedFileInfo;
begin
  Result := '';
  VerInfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy);
  GetMem(PVerInfo, VerInfoSize);
  try
    if GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, PVerInfo) then
      if VerQueryValue(PVerInfo, '\', Pointer(PVerValue), VerValueSize) then
        with PVerValue^ do
          Result := Format('v%d.%d.%d build %d', [
            HiWord(dwFileVersionMS), //Major
            LoWord(dwFileVersionMS), //Minor
            HiWord(dwFileVersionLS), //Release
            LoWord(dwFileVersionLS)]); //Build
  finally
    FreeMem(PVerInfo, VerInfoSize);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

基于堆栈回复Get FileVersion with Build

它适用于大多数情况.

谢谢

delphi delphi-2007

0
推荐指数
1
解决办法
8662
查看次数

如何将最新的 Richedit 与 Delphi 2007 一起使用?

如果我将 TRichedit 放在表单上,​​我将无法在控件中粘贴带有图像的 RTF。据我了解,这是由于 Delphi 2007 使用旧版本的 Richedit 控件所致。有没有一种简单的方法可以在 Delphi 2007 的窗体上使用最新的 Richedit 控件?

delphi richedit delphi-2007

0
推荐指数
1
解决办法
1137
查看次数

为什么我使用indy发送了一个不同的int?

我已经检查过,当我将整数转换为十六进制时,它们分别变为4C52和524C000000000000,因此看起来好像字节是反转的.

客户端运行在Delphi XE7 for android上,服务器运行在Delphi 2007上.

我怎样才能解决这个问题?

推送客户代码: Client.IOHandler.Write(19538);

拉服务器代码: AContext.Connection.IOHandler.ReadInt64; //receives 5930114809340100608

delphi indy delphi-2007 delphi-xe7

0
推荐指数
1
解决办法
412
查看次数

如何确定运行应用程序的屏幕/监视器?

在多屏幕系统上,我希望我的一些应用程序能够记住它们最后运行的屏幕并再次在同一屏幕上运行.

如何确定当前屏幕/显示器是什么,请记住屏幕可能具有不同的分辨率?这些程序是用Delphi 2007编写的.

windows delphi delphi-2007 multiscreen

0
推荐指数
1
解决办法
1269
查看次数

迁移到Delphi XE7后,StrAlloc无法正常工作

我正在开发一个最近从Delphi 2007升级到XE7的应用程序.有一种特殊情况,即TMemoryStream到PChar的转换失败.这是代码:

procedure TCReport.CopyToClipboard;
var
  CTextStream: TMemoryStream;
  PValue: PChar;
begin
    CTextStream := TMemoryStream.Create;
    //Assume that this code is saving a report column to CTextStream
    //Verified that the value in CTextStream is correct
    Self.SaveToTextStream(CTextStream);

    //The value stored in PValue below is corrupt
    PValue := StrAlloc(CTextStream.Size + 1);
    CTextStream.Read(PValue^, CTextStream.Size + 1);
    PValue[CTextStream.Size] := #0;

    { Copy text stream to clipboard }
    Clipboard.Clear;
    Clipboard.SetTextBuf(PValue);

    CTextStream.Free;

    StrDispose(PValue);
end;
Run Code Online (Sandbox Code Playgroud)

添加SaveToTextStream的代码:

procedure TCReport.SaveToTextStream(CTextStream: TStream);
var
  CBinaryMemoryStream: TMemoryStream;
  CWriter: TWriter;
begin

  CBinaryMemoryStream := TMemoryStream.Create;
  CWriter := …
Run Code Online (Sandbox Code Playgroud)

delphi unicode delphi-2007 delphi-xe7

0
推荐指数
1
解决办法
354
查看次数

关闭应用程序的实例但不是当前实例

我想只允许我的应用程序的一个实例运行.我正在使用下面的代码关闭我的应用程序的其他实例,但问题是它也会终止当前会话.如何编辑此代码以关闭其他实例,但不能编辑当前实例?

function killDuplicates: integer;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
pna : string;
begin
Result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while Integer(ContinueLoop) <> 0 do
    begin
    pna := lowercase(ExtractFileName(FProcessEntry32.szExeFile));
    if pna = 'myapp.exe' then
      Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    end;
CloseHandle(FSnapshotHandle);
end;
Run Code Online (Sandbox Code Playgroud)

delphi winapi delphi-2007

0
推荐指数
1
解决办法
216
查看次数

在Delphi 2007中的字符串中插入表情符号

我正在努力完成标题所说的内容,在Delphi 2007中将表情符号插入到字符串中,就像下面的例子一样:

procedure TForm1.Button1Click(Sender: TObject);
var s : string;
begin
s := 'This is my original string (y)';
s := ansireplacestr(s,'(y)','');
showmessage(s);
end;
Run Code Online (Sandbox Code Playgroud)

我甚至可以将表情符号粘贴到IDE的代码中,但在运行时showmessage结果如下:

这是我原来的字符串????

有没有办法在Delphi 2007中实现这个任务?由于几个原因我现在无法升级Delphi.

有人说我的问题在这个主题上得到了解决:

在Delphi版本中处理Unicode字符串<= 2007

但是这个主题只是说使用第三方组件,而没有确切知道如何去做.

编辑:建议后,我尝试使用函数pos,删除和插入以及宽带var:

function addEmoji(mystring : widestring) : widestring;
var r, aux : widestring;
p : integer;
begin
r := mystring;
while pos('(y)',r) > 0 do
  begin
    aux := r;
    p := pos('(y)',aux);
    Insert('',aux,p);
    delete(aux,pos('(y)',aux),3);
    r := aux;
  end;
result := r;
end;
Run Code Online (Sandbox Code Playgroud)

但结果是'(y)'被'????'取代.

delphi delphi-2007

-1
推荐指数
1
解决办法
849
查看次数

如何在不使用任何第三方库的情况下在Delphi 2007中将Tiff图像加载到Timage中?

我试图用来image1.Picture.LoadFromFile(MyTiffFile)加载tiff文件Timage,但不支持tiff.

有没有办法在不使用任何第三方库的情况下实现这一目标?

delphi tiff delphi-2007

-2
推荐指数
1
解决办法
502
查看次数

如何实现TDateTime作为SQL Server的参数

我承认我没有直接在Delphi中使用SQL的经验.但我现在尝试了一个小项目.它执行这个SQL

SELECT [Type], [Sum] = Count(*) 
FROM   exceptionrow 
WHERE LogDate >= :FromDate
AND LOGDATE <= :ToDate
GROUP  BY [type] 
ORDER  BY [sum] DESC
Run Code Online (Sandbox Code Playgroud)

其中FromDate和ToDate是TDateTime的参数.这是要执行的事件.

procedure TLogsStats.CollectTopExceptions(aFromDate, aToDate: TDateTime);
begin
  qryTopExceptions.ParamByName('FromDate').AsDate := aFromDate;
  qryTopExceptions.ParamByName('ToDate').AsDate   := aToDate;

  cdsTopExceptions.Close;
  cdsTopExceptions.Open;
end;
Run Code Online (Sandbox Code Playgroud)

我在DBGrid中获得结果,但与在具有静态日期的SQL Studio中直接运行时不一样.行太少了.我复制了这个项目的设置.我认为只需运行一个SQL查询就需要5个组件,这很奇怪.见图.

SQL查询

可以简化吗?这是我对组件的声明.

SQLConnection: TSQLConnection;
qryTopExceptions: TSQLDataSet;
dspTopExceptions: TDataSetProvider;
cdsTopExceptions: TClientDataSet;
dsTopExceptions: TDataSource;
Run Code Online (Sandbox Code Playgroud)

编辑: 最后我发现它不起作用的原因.我怀疑有错误的司机等但这是一个简单的愚蠢错误.我连接到一个小型测试数据库而不是更大的数据库.现在它可以正常使用3个组件和参数.抱歉你的时间:)

SQLConnection: TSQLConnection;
qryTopExceptions: TSQLDataSet;
dsTopExceptions: TDataSource;
Run Code Online (Sandbox Code Playgroud)

问候

sql sql-server delphi delphi-2007

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

在没有API的情况下检测Delphi 2007上的Windows版本

简单问题:如何使用Delphi 2007以可靠的方式检测Windows版本?有没有办法在没有API的情况下这样做,即只检查系统目录中的某些文件夹或文件?

提前致谢 !

windows delphi winapi delphi-2007

-8
推荐指数
1
解决办法
549
查看次数