我们有英文版的非本地化调试任务对话框。这些在希伯来语系统上显示 RTL:
如何强制他们显示 LTR?AFAICT 这将是 TDF_RTL_LAYOUT 的倒数。
我无法完全测试这一点(因为我不想将整个系统切换到 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
,请参阅扩展窗口样式),我们必须更深入地挖掘。