小编fpi*_*tte的帖子

在两个单独的Win32进程中使用模式对话框将程序UI嵌入到另一个UI中

我需要将辅助应用程序的用户界面(UI)嵌入到主应用程序中.我可以使用SetParent轻松地将辅助应用程序主窗体托管到主应用程序中.我正在使用命名管道在两个应用程序之间进行通信.我甚至可以借助主应用程序中的虚拟TEdit在辅助应用程序中使用AttachThreadInput API来解决跳转问题.到现在为止还挺好.

我无法解决以下问题:辅助应用程序中的任何模态形式都不会被视为主应用程序的模态,这会造成重大麻烦.

顺便说一句:不要告诉我使用DLL,OCX或ActiveX.我有两个普通的exe文件.

任何帮助/暗示赞赏.

delphi

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

在 HLSL DirectCompute 着色器中实现 SpinLock

我尝试在计算着色器中实现自旋锁。但我的实现似乎没有锁定任何东西。

以下是我实现自旋锁的方法:

void LockAcquire()
{
    uint Value = 1;

    [allow_uav_condition]
    while (Value) {
        InterlockedCompareExchange(DataOutBuffer[0].Lock, 0, 1, Value);
    };
}

void LockRelease()
{
    uint Value;
    InterlockedExchange(DataOutBuffer[0].Lock, 0, Value);
}
Run Code Online (Sandbox Code Playgroud)

背景:我需要一个自旋锁,因为我必须计算大型二维数组中的数据总和。总和是两倍。使用单线程和双循环计算总和会产生正确的结果。即使在计算总和时引入自旋锁以避免冲突,使用多线程计算总和也会产生错误的结果。

我无法使用 InterLockedAdd,因为总和不适合 32 位整数,而且我使用的是着色器模型 5(编译器 47)。

这是单线程版本,产生正确的结果:

[numthreads(1, 1, 1)]
void CSGrayAutoComputeSumSqr(
    uint3 Gid  : SV_GroupID,
    uint3 DTid : SV_DispatchThreadID, // Coordinates in RawImage window
    uint3 GTid : SV_GroupThreadID,
    uint  GI   : SV_GroupIndex)
{
    if ((DTid.x == 0) && (DTid.y == 0)) {
        uint2 XY;
        int   Mean = (int)round(DataOutBuffer[0].GrayAutoResultMean);
        for (XY.x …
Run Code Online (Sandbox Code Playgroud)

directx hlsl spinlock directcompute

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

Delphi XE5 Upd1 ShowMessage生成AV

我已经更新了我的XE5 Update1的几个应用程序.从那时起,ShowMessage经常触发访问冲突.这种情况发生在几个应用程 如果我用一个简单的表单替换ShowMessage,那么AV就不见了.所以这显然是ShowMessage的罪魁祸首.

AV出现在函数TaskDialogIndirect的WinApi.CommCtrl.pas中(参见下面的标记行):

function TaskDialogIndirect(const pTaskConfig: TTaskDialogConfig;
  pnButton: PInteger; pnRadioButton: PInteger; pfVerificationFlagChecked: PBOOL): HRESULT;
begin
  if Assigned(_TaskDialogIndirect) then
    Result := _TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton,
      pfVerificationFlagChecked)         // <====== HERE ==========
  else
  begin
    InitComCtl;
    Result := E_NOTIMPL;
    if ComCtl32DLL <> 0 then
    begin
      @_TaskDialogIndirect := GetProcAddress(ComCtl32DLL, 'TaskDialogIndirect');
      if Assigned(_TaskDialogIndirect) then
        Result := _TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton,
          pfVerificationFlagChecked)
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

发生异常时的堆栈跟踪:

:671cab85 ; D:\Development\DelphiLibs\madCollection\madExcept\Dlls\madExcept32.dll
:671cabe2 ; D:\Development\DelphiLibs\madCollection\madExcept\Dlls\madExcept32.dll
:671ca755 madExcept32.ThisIsNoLeak + 0x29
:004aa9d7 ThisIsNoLeak + $F
:004a9412 HookedCreateThread + $82
:769613a2 msvcrt._beginthreadex + 0x74 …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe5

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

DirectCompute:如何读取 RWTexture2D&lt;float4&gt;?

我有以下缓冲区:

RWTexture2D<float4> Output : register(u0);
Run Code Online (Sandbox Code Playgroud)

计算着色器使用此缓冲区来渲染计算图像。要在该纹理中写入像素,我只需使用类似于以下的代码:

Output[XY] = SomeFunctionReturningFloat4(SomeArgument);
Run Code Online (Sandbox Code Playgroud)

这工作得很好,我的计算图像正确地呈现在屏幕上。

现在,在计算着色器的某个阶段,我想读回已经计算的像素并再次处理它。

Output[XY] = SomeOtherFunctionReturningFloat4(Output[XY]);
Run Code Online (Sandbox Code Playgroud)

编译器返回错误:

error X3676: typed UAV loads are only allowed for single-component 32-bit element types
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

directx hlsl directcompute

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

如何在 Firemonkey 中将 HTML 格式的文本作为 HTML 复制到剪贴板

使用 Delphi FireMonkey,我需要将 HTML 格式的字符串复制到 Delphi 中的剪贴板,以便粘贴它的其他应用程序会将其视为 HTML。

我已经尝试通过隐藏的备忘录组件复制简单文本,它可以工作,但被复制为简单文本。我需要 HTML 格式的副本。将其作为文本粘贴到任何富文本程序中时,它会显示所有 HTML 标记而不是格式化文本。

我当前将文本复制到剪贴板的方法是:

procedure TForm1.Button1Click(Sender: TObject);
var
  SourceText: string;
begin
  SourceText := 'This is a <b>bold</b> html line';
  //I can use TMemo to copy it to clipboard like:
  Memo1.lines.Text := SourceText;
  Memo1.SelectAll;
  memo1.CopyToClipboard;
end;
Run Code Online (Sandbox Code Playgroud)

但问题是,如果我将剪贴板上复制的文本粘贴到 Microsoft Word 中,它将被粘贴为:

  • “这是一个<b>bold</b>html 行”。我想要并且应该是这样的:

  • 这是一个粗体的html 行

注意:我已经阅读了有关如何在 Windows 中完成此操作的其他讨论,但我需要一个用于跨平台应用程序的 Firemonkey 解决方案。任何帮助表示赞赏。

delphi clipboard copy-paste firemonkey

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

无法使用 FreeImage 将元数据添加到 JPEG 图像

我尝试将元数据添加到现有 JPEG 文件并将图像保存在另一个文件中。我正在使用 Delphi 11 和 FreeImage(Delphi 包装器)。生成的图像与现有图像相同,没有添加元数据标签。完全没有错误。

这是重现该问题的简单独立过程:

procedure AddTagArtistTest;
var
    fif      : FREE_IMAGE_FORMAT;
    dib      : PFIBITMAP;
    Tag      : PFITAG;
    TagValue : AnsiString;
    TagKey   : AnsiString;
    TagID    : WORD;
    Filename : String;
    Success  : Boolean;
begin
    Filename := 'F:\Images\ExistingImage.jpg'; // Already has metadata but no TAG_ARTIST
    dib      := nil;
    Success  := FALSE;
    try
        fif := FreeImage_GetFileTypeU(PChar(FileName), 0);
        if fif = FIF_UNKNOWN then
            fif := FreeImage_GetFIFFromFilenameU(PChar(FileName));
        if fif = FIF_UNKNOWN then
            Exit;
        if not FreeImage_FIFSupportsReading(fif) then
            Exit;
        dib    := FreeImage_LoadU(fif, …
Run Code Online (Sandbox Code Playgroud)

delphi freeimage

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