gpt4 book ai didi

delphi - 使用 SetWindowLong 命令更改 TreeView 方向时,右键单击(弹出菜单)不起作用

转载 作者:行者123 更新时间:2023-12-03 15:55:14 26 4
gpt4 key购买 nike

当我使用 SetWindowLong 命令更改 TreeView 的方向时,其节点上的弹出菜单不显示。完整代码在这里:

Procedure SetWinControlBiDi(Control: TTreeView);
var
ExStyle: Longint;
begin

ExStyle := GetWindowLong(Control.Handle, GWL_EXSTYLE);

SetWindowLong(Control.Handle, GWL_EXSTYLE, ExStyle or WS_EX_RTLREADING or WS_EX_RIGHT or WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT );

end;


procedure TMainForm.FormShow(Sender: TObject);
begin

SetWinControlBiDi(TreeView1);

end;

最佳答案

执行此操作的标准方法是使用 Delphi BiDiMode 属性。最好这样做,以便 VCL 知道您想要从右到左。您还需要更改弹出菜单上的 BiDiMode 属性。

现在,正确的方法是不要更改各个组件的属性。这样做既费力又容易出错。在应用程序初始化的某个位置设置 Application.BiDiMode ,更改将传播到所有组件。

例如,您可以在应用程序的 .dpr 文件中进行更改:

Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.BiDiMode := bdRightToLeft;
Application.CreateForm(TMainForm, MainForm);
Application.Run;

您需要确保没有修改任何 .dfm 文件中任何组件的 BiDiModeParentBiDiMode。如果您只是从 .dfm 文件中删除这些行,那么将允许单个应用程序范围的 Application.BiDiMode 设置来控制一切。

<小时/>

您设置GWL_EXSTYLE的方法是有问题的。 VCL 控制该设置,如果您确实需要更改它,在 TForm.OnShow 中执行此操作将导致奇怪的错误。有时需要重新创建窗口,当发生这种情况时,设置 GWL_EXSTYLE 的代码将不会运行,并且 TreeView 将恢复为从左到右。如果您确实需要修改窗口样式,那么您需要重写组件的TWinControl.CreateParams。然而,在这种情况下,VCL 直接支持 BiDi,这是最好的解决方案。

关于delphi - 使用 SetWindowLong 命令更改 TreeView 方向时,右键单击(弹出菜单)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6465400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com