- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我使用 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 文件中任何组件的 BiDiMode
或 ParentBiDiMode
。如果您只是从 .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/
public enum GWL { ExStyle = -20 } public enum WS_EX { Transparent =
我需要设置一个 WindowLong 来覆盖 WndProc,我正在使用 coredll.dll 中的这个方法: public interface CoreDll extends StdCallLib
以前,当我想创建一个点击表单时,我是 tempted to use platform invokes to set the extended window styles (user32.dll 中的G
我正在为 Windows API 编写一些包装函数和类。我开始遇到的一个常见事件是修改 Windows 样式。 以下是一些示例代码,我根据参数 ALIGNMENT 枚举调整文本框的文本对齐方式。经过多
当我尝试在 C# 中调用 User32.dll 中的函数 SetWindowLong 时,没有任何反应。我知道为什么,但我不知道如何“修复”这个。这是一段代码。 [DllImport("user32.
我有一个让我抓狂的问题。我花了一个星期的时间来追查这个错误,可能只是我对互操作的理解不如我想的那样。在这里: public class User { public const int GWL_W
在头文件WinUser.h中,有一部分是SetWindowLong()的第二个参数的常量。已定义。 // ... #define GWL_WNDPROC (-4) #define GW
我正在尝试使用 SetWindowLong 覆盖 winmobile 任务栏的窗口过程(以捕获和阻止按下的按钮)。我创建了一个类,其中一种方法用于覆盖,另一种方法用于恢复窗口过程。 MessageRe
当我使用 SetWindowLong 命令更改 TreeView 的方向时,其节点上的弹出菜单不显示。完整代码在这里: Procedure SetWinControlBiDi(Control: TTr
我正在使用以下代码: const int GWL_STYLE = (-16); const UInt32 WS_POPUP = 0x80000000; const UInt32 WS_CHILD =
我使用以下代码创建静态控件: hWnd = CreateWindowExW( 0, L"STATIC",
我是一名优秀的程序员,十分优秀!