从左至右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;
答
我希望这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
执行上述代码后,右键单击(弹出式菜单)将不起作用!任何想法? – mtoloo 2011-08-06 05:11:43