标签: delphi-10.4-sydney

将 TStream 转换为字符串?

在 Delphi 10.4 中,我尝试使用以下代码将 a 转换TStream为 a string

function MyStreamToString(aStream: TStream): string;
var
  SS: TStringStream;
begin
  if aStream <> nil then
  begin
    SS := TStringStream.Create('');
    try
      SS.CopyFrom(aStream, 0); // Exception: TStream.Seek not implemented
      Result := SS.DataString;
    finally
      SS.Free;
    end;
  end else
  begin
    Result := '';
  end;
end;
Run Code Online (Sandbox Code Playgroud)

但在此代码行中,我收到一个异常“TStream.Seek 未实现”: SS.CopyFrom(aStream, 0);

为什么?我怎样才能“治愈”这个代码?

delphi string stream delphi-10.4-sydney

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

FireDac SQLite 在 Delphi 10.4 中是否发生了变化?

我的 Delphi 项目从未使用过实际的 sqlite3.dll,而是使用了嵌入式库。

我用 10.4 重新编译了项目并将其发送给看到此错误的测试人员:

007C6FDC 处的 ChessOpeningsWizardProfessional2016.exe 模块中的异常 EFDException。[FireDAC][物理][SQLite]-314。无法加载供应商库 [sqlite3.dll 或 libdb_sql51.dll]。找不到指定的模块 提示:检查它是否在 PATH 或应用程序 EXE 目录中,并且具有 x86 位。

它在我的机器上运行良好,没有任何 Dll。

FireDac 中关于 Delphi 10.4 Sydney 中的 Sqlite3 有什么改变吗?

delphi sqlite firedac delphi-10.4-sydney

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

如何使用 TMemoryStream.size 计算 delphi 类的大小?

我正在尝试为示例 TControl、TWinControl 等查找内置类的大小。尝试使用 InstanceSize(),这反过来可能不会添加将它们视为引用的少数类型的大小。

发现一个有趣的堆栈溢出线程谈论 TMemoryStream 以找出类大小:以与文件大小相同的格式获取类或对象的大小?无法获得有关如何使用 TMemoryStream 确定班级大小的太多信息,我可以就此获得帮助吗?

delphi delphi-10.4-sydney

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

SVG 颜色问题:红色显示为灰色

我得到了这个有问题的 SVG 图像:

 <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="Layer_1" x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve" sodipodi:docname="tool-eye-dropper.svg" inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)">
      <metadata id="metadata12">
        <rdf:RDF>
          <cc:Work rdf:about="">
            <dc:format>
              image/svg+xml
            </dc:format>
            <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
          </cc:Work>
        </rdf:RDF>
      </metadata>
      <defs id="defs10" />
      <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1213" inkscape:window-height="942" id="namedview8" showgrid="false" inkscape:zoom="31.5" inkscape:cx="8" inkscape:cy="9.4708995" inkscape:window-x="347" inkscape:window-y="176" inkscape:window-maximized="0" inkscape:current-layer="icon" />
      <g id="icon">
        <path d="M12.828,7.837c-0.307,0,-0.596,-0.118,-0.813,-0.332l-3.737,-3.68c-0.448,-0.442,-0.448,-1.16,0,-1.602c0.217,-0.214,0.506,-0.332,0.813,-0.332c0.307,0,0.596,0.118,0.813,0.332l0.231,0.227c0.045,-0.158,0.13,-0.302,0.251,-0.421c0.01,-0.01,1.02,-1.002,1.084,-1.06C12.177,0.336,12.956,0,13.722,0c0.917,0,1.712,0.494,2.075,1.29c0.436,0.956,0.161,2.122,-0.738,3.119c-0.075,0.083,-1.112,1.108,-1.123,1.118c-0.121,0.119,-0.267,0.203,-0.427,0.247l0.132,0.13c0.448,0.442,0.448,1.16,0,1.602C13.424,7.72,13.135,7.837,12.828,7.837z" fill-rule="evenodd" fill="#3E79B4" …
Run Code Online (Sandbox Code Playgroud)

delphi svg delphi-10.4-sydney

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

如何同时按下多个 TSpeedButton?

我试图在 TFlowPanel 上使用多个 TSpeedButton 来显示用户可以选择的选项列表。这就是我创建这些按钮的方式:

  procedure FillOptions(ButtonPanel: TFlowPanel; Options: TStrings; Action: TNotifyEvent);
  var Option: string;
      Button: TSpeedButton;   
  begin
    for Option in Options do begin
      Button:= TSpeedButton.Create(ButtonPanel);
      Button.Caption := Option;
      Button.Width := Canvas.TextWidth(Option) + 20;
      Button.GroupIndex := 99;
      Button.AllowAllUp := True;
      Button.OnClick := Action;
      Button.Parent := ButtonPanel;
    end;
  end;
Run Code Online (Sandbox Code Playgroud)

问题是我无法选择多个选项。当我单击一个按钮时,它会下降,但之前选择的按钮会上升。

我忘记设置什么以便可以同时按下多个按钮?

谢谢。

delphi delphi-10.4-sydney

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

如何一次将多个文件传递给我注册的应用程序?

在与 Windows 10 中的图形文件格式关联的 Delphi 10.4.2 win-32 VCL 应用程序中,我在 Windows 文件资源管理器中选择了参数文件。在这里,我立即观察传递给我的应用程序的文件Application.Initialize;

CodeSite.Send('AppInstances: ParamCount', ParamCount);
Run Code Online (Sandbox Code Playgroud)

当我在资源管理器中选择一个文件然后按下ENTER键时,这个文件就会加载到我的应用程序中。到现在为止还挺好。

但是当我在资源管理器中选择三个文件然后按下ENTER键时,我的应用程序每次使用 3 个文件参数之一启动三次:

在此处输入图片说明

当我按下 Enter 键时,Explorer 是否可能只启动我的应用程序一次并一次将 3 个选定的文件传递给我的应用程序?

windows delphi delphi-10.4-sydney microsoft-file-explorer

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

为什么当进程 ID 不再运行时 OpenProcess() 返回非 0 值

我开始使用其他应用程序的新实例,CreateProcess实例和我结束了保存PID,这样我可以在以后检查如果进程仍在运行。

我正在使用以下方法来检查它是否正在运行:

procedure TfrmRSM.Button1Click(Sender: TObject);
begin
  var
  ahandle := OpenProcess(PROCESS_ALL_ACCESS, true, aPID);

  if ahandle = 0 then
    ShowMessage('is not running')
  else
    ShowMessage('is running');

  CloseHandle(ahandle);
end;
Run Code Online (Sandbox Code Playgroud)

0当进程不再运行时,上面的代码应该返回,但它仍然返回一个大于0

使用 CreateProcess 后我正在关闭句柄

如果我使用的方法不正确,有什么正确的方法可以检查 PID 是否正在运行?我只能找到使用应用程序名称的方法。

delphi delphi-10.4-sydney

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

如何检测窃取特定快捷方式的未知对象?

在一个非常复杂的 Delphi 10.4.2 VCL 应用程序中,一个未知的控件或组件似乎“窃取”了CTRL+A快捷方式。为了检测窃取快捷方式的对象,我尝试使用TApplicationEvents.OnShortCut事件处理程序:

procedure TformMain.ApplicationEvents1ShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
  case Msg.CharCode of      
    VK_A:
      begin
        //CodeSite.Send('TformMain.ApplicationEvents1ShortCut: ', ???);
      end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

这个事件处理程序可以用来检测“小偷”,或者你会建议哪种方法?

delphi keyboard-shortcuts delphi-10.4-sydney

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

无需外部库即可很好地缩放图像

我正在使用 Delphi 10.4.2,我正在尝试找到一种缩放图像的方法,以保持图像质量并且不需要外部库

这是我尝试过的,您可以在以下位置找到这两个测试{$REGION}

procedure TFrmTestGenImg.Test;
var
  LOldWidth, LOldHeight, LNewWidth, LNewHeight: integer;
  LImageNameIn, LImageNameOut, LExt: string;
  LClass: TGraphicClass;
  LImageIn, LImageOut: TGraphic;
  LBitmap, LResized: TBitmap;
begin
  // Original image: 1366 x 768
  LOldWidth := 1366;
  LOldHeight := 768;
  LNewWidth := 800;
  LNewHeight := 449;

  LImageNameIn := 'C:\temp\Input.png';
  LImageNameOut := 'C:\temp\Output_' + FormatDateTime('yyyy.mm.dd hh.nn.ss.zzz', Now) + '.png';

  LExt := TPath.GetExtension(LImageNameIn);
  Delete(LExt, 1, 1);
  if (CompareText(LExt, 'bmp') = 0) then
    LClass := TBitmap
  else if (CompareText(LExt, 'gif') …
Run Code Online (Sandbox Code Playgroud)

delphi image-scaling delphi-10.4-sydney delphi-10.4.2

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

如何在 Delphi 中获取用户输入的文件或目录的正确文本大小写?

在我的(Windows)程序中,用户可以输入文本,该文本可以是文件或目录。

现在我想修复文本大小写,以便输入文本与文件系统大小写匹配。例如,如果用户输入:

C:\程序文件\FOO\BAR

并且该目录存在以下文本情况:

C:\Program Files\Foo\Bar

我想用后面的(正确的)文本大小写返回它。

在德尔福我该怎么做?我尝试使用FindFirstand FindNext,但我没有完整路径TSearchRec(当然我可以拆分字符串并FindFirst为每个级别执行多个操作,但必须有更好的方法)。

如果 Delphi 10.4 发生了一些变化,我会使用它。

delphi delphi-10.4-sydney

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