从左至右TListView

问题描述:

我正在编程一个tlistview,以便它从右至左显示其列(以便正确显示希伯来文本)。我使用下面的代码在窗体的创建方法,其中“LV”是列表视图从左至右TListView

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

lv.invalidate; 

虽然该代码使得正确的列表视图显示的行,标题行显示从左至右!列不匹配,每列的标题都是错误的。

有没有人有一个想法如何让标题行显示从右到左?

我正在使用德尔福7,不是这应该有很大的区别。

TIA, No'am

以下是完整的代码来设置标题和行:

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; 
+0

执行上述代码后,右键单击(弹出式菜单)将不起作用!任何想法? – mtoloo 2011-08-06 05:11:43

我希望这sample'll对您有用:

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; 
+0

这不是我正在寻找的。我刚刚找到答案 - 见下文。 – 2009-10-15 11:32:39