2009-12-09 5 views
3

в ярлыке я могу добавить новую строку, как этотдобавить 2 строки в TListView?

Label.Caption:='First line'+#13#10+'SecondLine'; 

это может быть сделано в TListView?

listItem:=listView.Items.Add; 
listItem.Caption:='First line'+#13#10+'SecondLine'; 

благодаря

+0

Вы установили ViewStyle в vsIcon? – matthewk

+0

style is vsReport –

ответ

1

можно получить многострочные строки в стандартном TListView в vsReport стиле, но AFAIK это Безразлично» t поддерживают различные высоты строк. Однако, если у вас есть все строки с таким же количеством строк> 1, вы можете достичь этого довольно легко.

Вам необходимо установить вид списка на OwnerDraw, прежде всего, чтобы вы могли нарисовать многострочные титры, а во-вторых, чтобы увеличить высоту строки до необходимого значения. Это делается путем обработки сообщения WM_MEASUREITEM, которое отправляется только для просмотра списков владельца.

Небольшой пример, чтобы продемонстрировать это:

type 
    TForm1 = class(TForm) 
    ListView1: TListView; 
    procedure FormCreate(Sender: TObject); 
    procedure ListView1DrawItem(Sender: TCustomListView; Item: TListItem; 
     Rect: TRect; State: TOwnerDrawState); 
    private 
    procedure WMMeasureItem(var AMsg: TWMMeasureItem); message WM_MEASUREITEM; 
    end; 

{ TForm1 } 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    ListView1.ViewStyle := vsReport; 
    ListView1.OwnerDraw := True; 
    ListView1.OwnerData := True; 
    ListView1.Items.Count := 1000; 
    with ListView1.Columns.Add do begin 
    Caption := 'Multiline string test'; 
    Width := 400; 
    end; 
    ListView1.OnDrawItem := ListView1DrawItem; 
end; 

procedure TForm1.ListView1DrawItem(Sender: TCustomListView; 
    Item: TListItem; Rect: TRect; State: TOwnerDrawState); 
begin 
    if odSelected in State then begin 
    Sender.Canvas.Brush.Color := clHighlight; 
    Sender.Canvas.Font.Color := clHighlightText; 
    end; 
    Sender.Canvas.FillRect(Rect); 
    InflateRect(Rect, -2, -2); 
    DrawText(Sender.Canvas.Handle, 
    PChar(Format('Multiline string for'#13#10'Item %d', [Item.Index])), 
    -1, Rect, DT_LEFT); 
end; 

procedure TForm1.WMMeasureItem(var AMsg: TWMMeasureItem); 
begin 
    inherited; 
    if AMsg.IDCtl = ListView1.Handle then 
    AMsg.MeasureItemStruct^.itemHeight := 4 + 2 * ListView1.Canvas.TextHeight('Wg'); 
end; 
0

Я, кажется, не в состоянии добиться этого с помощью TListView. Но с помощью TMS TAdvListView, вы можете использовать HTML в тексте элемента, так это поставит подпись на 2 строки:

with AdvListView1.Items.Add do 
    begin       
    Caption := '<FONT color="clBlue">Line 1<BR>Line 2</font>'; 
    end; 
+0

Я надеялся на разный подход, но я загляну в него ... –

+0

Я попытался заставить его работать со стандартным TListView для вас, но не смог, и, просматривая группы Google, казалось бы, никто больше тоже удалось. –

1

Я знаю, что это старая нить, и я не могу взять кредит на выяснить это, но для регулировки высоты строки в TListView вы можете добавить список изображений для StateImages, а затем укажите высоту изображения, развернув элемент StateImages в окне свойств. Вам не нужно загружать реальные изображения.

Извините, я не могу почитать фактического человека, который это понял - это было на форуме, который я посетил некоторое время назад.

Смежные вопросы