Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.033 c
15-1142369251
Kerk
2006-03-14 23:47
2006.04.23
Поиск по статьям о программировании


11-1124738304
shalex
2005-08-22 23:18
2006.04.23
Не могу скачать String Grid


3-1141202175
keymaster
2006-03-01 11:36
2006.04.23
Виснет запрос.


6-1136967701
sain
2006-01-11 11:21
2006.04.23
Работа с сетью


2-1144270250
EvgFobos
2006-04-06 00:50
2006.04.23
Из RichEdit в файл