从右到左的TListView

3

我正在编写一个tlistview程序,以便从右到左显示其列(以正确显示希伯来文本)。 我在窗体的创建方法中使用以下代码,其中'lv'是listview

 SetWindowLong (lv.Handle, GWL_EXSTYLE,
                GetWindowLong(lv.Handle, GWL_EXSTYLE)  or
                WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);

 lv.invalidate;   

虽然这段代码可以使列表视图中的行正确显示,但标题行从左到右显示!列不匹配,每列的标题也是错误的。

有没有人知道如何将标题行从右到左显示?

我在使用Delphi 7,不过这应该没有太大影响。

TIA, No'am

2个回答

6
这是设置标题和行的完整代码:
procedure TForm1.FormCreate(Sender: TObject);
const
  LVM_FIRST = $1000;      // ListView messages
  LVM_GETHEADER = LVM_FIRST + 31;
var
  header: thandle;
begin
  header:= SendMessage (lv.Handle, LVM_GETHEADER, 0, 0);
  SetWindowLong (header, GWL_EXSTYLE,
                 GetWindowLong (header, GWL_EXSTYLE)  or
                 WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);

  SetWindowLong (lv.Handle, GWL_EXSTYLE,
                 GetWindowLong (lv.Handle, GWL_EXSTYLE)  or
                 WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);
  lv.invalidate;   // get the list view to display right to left
end;

执行上述代码后,右键单击(弹出菜单)将无法工作!有什么想法? - mtoloo
它还可以水平镜像图标(Delphi 2010+Win10)。另外加一分。 - saastn
后来我发现它甚至可以镜像复选框,更多细节 - saastn

0

希望这个示例对您有用:

var
  aCol: TListColumn;
  tmp: TListView;
  i: integer;
begin
  tmp := TListView.Create(Self);
  LV.Columns.BeginUpdate;
  try
    for i := LV.Columns.Count-1 downto 0 do
    begin
      aCol := tmp.Columns.Add;
      aCol.Width := LV.Columns[i].Width;
      aCol.Caption := LV.Columns[i].Caption;
    end;
    LV.Columns := tmp.Columns;
  finally
    LV.Columns.EndUpdate;
    tmp.Free;
  end;
end;

这不是我要找的。我刚刚找到了答案 - 请看下面。 - No'am Newman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接