2009-10-15 145 views
3

我正在編程一個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

回答

5

以下是完整的代碼來設置標題和行:

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

0

我希望這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