2

我们有英文版的非本地化调试任务对话框。这些在希伯来语系统上显示 RTL: 任务对话框截图

如何强制他们显示 LTR?AFAICT 这将是 TDF_RTL_LAYOUT 的倒数。

4

1 回答 1

0

我无法完全测试这一点(因为我不想将整个系统切换到 RTL),但它应该让你找到一个解决方案:如果你提供一个回调函数,你可以对窗口创建做出反应,然后简单地修改它风格。例子:

function CallbackTdi( hWindow: HWND; msg: Cardinal; wp: WPARAM; lp: LPARAM; lpRefData: Pointer ): HRESULT; stdcall;
var
  iStyle: DWord;
begin
  case msg of
    TDN_DIALOG_CONSTRUCTED: begin  // Not yet shown
      iStyle:= GetWindowLong( hWindow, GWL_EXSTYLE );  // Get existing style
      
      // Test for me: trying the opposite by forcing RTL
      //SetWindowLong( hWindow, GWL_EXSTYLE, iStyle or WS_EX_RTLREADING or WS_EX_LAYOUTRTL or WS_EX_RIGHT );

      // Test for you: trying to eliminate everything that can be RTL
      SetWindowLong( hWindow, GWL_EXSTYLE, iStyle and not (WS_EX_RTLREADING or WS_EX_LAYOUTRTL or WS_EX_RIGHT) );
    end;

    TDN_BUTTON_CLICKED: result:= S_OK;  // So the dialog closes
  end;
end;

var
  vTdc: TTaskDialogConfig;
  iButton: Integer;
begin
  ZeroMemory( @vTdc, SizeOf( vTdc ) );
  vTdc.cbSize:= SizeOf( vTdc );
  ...
  vTdc.pfCallback:= @CallbackTdi;  // Point to our callback function
  TaskDialogIndirect( @vTdc, @iButton, nil, nil );
  ...
end;

如果它不能立即工作,那么分析实际设置了哪些窗口样式 - 如果它们在希伯来语系统上看起来和我一样(WS_EX_CONTROLPARENT or WS_EX_WINDOWEDGE or WS_EX_DLGMODALFRAME= $10101,请参阅扩展窗口样式),我们必须更深入地挖掘。

于 2020-09-24T19:52:13.173 回答