Текущий архив: 2006.04.23;
Скачать: CL | DM;
ВнизХочу ListBox, в котором многострочные Item сы и Найти похожие ветки
← →
Dust © (2006-03-18 13:15) [0]Хочу ListBox, в котором многострочные Item"сы и возможность задавать цвет для каждого итемса.
← →
TStas © (2006-03-18 14:01) [1]Ну есть же TTreeView
← →
Dust © (2006-03-18 15:00) [2]Если это оно, то расскажи, как мне организовать из дерева список выбора, где каждый элемент будет иметь много строк текста (3-4 строки) и будет окрашен в свой цвет.
← →
Virgo_Style © (2006-03-18 15:05) [3]OnDrawItem ?
← →
Кашперук Иван (2006-03-18 17:03) [4]Могу предложить использовать TStringGrid - вот для него есть код многострочности, и с цветом - совсем нет проблем, а если убрать у него вертикальные горизонтальные линии из Options, то будет вам тот же ListBox :)
http://cracklab.ru/pro/faq.php?pg=2613
http://cracklab.ru/pro/faq.php?pg=2611
http://cracklab.ru/pro/faq.php?pg=2610
← →
Handle (2006-03-18 17:15) [5]
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Style := lbOwnerDrawVariable;
with ListBox1.Items do
begin
ListBox1.Items.AddObject("Хочу ListBox, в котором многострочные Item"сы и возможность задавать цвет для каждого итемса.", Pointer(clRed));
ListBox1.Items.AddObject("Если это оно, то расскажи, как мне организовать из дерева список выбора, где каждый элемент будет иметь много строк текста (3-4 строки) и будет окрашен в свой цвет.", Pointer(clGreen));
end;
end;
procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
var
i, PosSp: Integer;
strVal: string;
strTmp: string;
begin
if Index >= 0 then
begin
strVal := ListBox1.Items[Index];
strTmp := WrapText(strVal, 20);
i := 1;
while Pos(#$D#$A, strTmp) > 0 do
begin
i := i + 1;
strTmp := Copy(strTmp, Pos(#13#10, strTmp) + 2, Length(strTmp));
end;
Height := i * ListBox1.ItemHeight;
end;
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
strVal: string;
strTmp: string;
intPos: Integer;
i: Integer;
rc: TRect;
begin
with Control as TListBox do
begin
Canvas.FillRect(Rect);
Canvas.Font.Color := TColor(Items.Objects[Index]);
Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]);
end;
strVal := WrapText(ListBox1.Items[Index], 20);
i := 0;
ListBox1.Canvas.FillRect(Rect);
while Pos(#$D#$A, strVal) > 0 do
begin
intPos := Pos(#$D#$A, strVal);
if intPos > 0 then
strTmp := Copy(strVal, 1, intPos - 1)
else
strTmp := strVal;
rc := Rect;
rc.Top := Rect.Top + i * ListBox1.ItemHeight;
ListBox1.Canvas.TextRect(rc, Rect.Left, Rect.Top + i * ListBox1.ItemHeight,
strTmp);
strVal := Copy(strVal, intPos + 2, Length(strVal));
Inc(i);
end;
rc := Rect;
rc.Top := Rect.Top + i * ListBox1.ItemHeight;
ListBox1.Canvas.TextRect(rc, Rect.Left, Rect.Top + i * ListBox1.ItemHeight, strVal);
ListBox1.Canvas.Brush.Style := bsClear;
ListBox1.Canvas.Rectangle(Rect);
end;
← →
Handle (2006-03-18 18:07) [6]Ошибка здесь возникает
котором многострочные Item"сы и возможность
← →
API © (2006-03-18 19:20) [7]""
← →
Dust © (2006-03-18 19:20) [8]Не страшно, кавычки вносить в строку я умею
← →
Dust © (2006-03-18 19:21) [9]Всё равно не удобно....
Да и подогнать длинну текста, руками - занятие геморойное.
← →
API © (2006-03-18 20:41) [10]Да и подогнать длинну текста, руками - занятие геморойное.
DrawText
Страницы: 1 вся ветка
Текущий архив: 2006.04.23;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.016 c