![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вставка многострочного текста в ListView.
Fenix © (2006-04-11 19:50:00)Доброго времени суток.
Меня интересует возможно ли добавить в LIstView многострочный текст? так, что бы он распределился на несколько строк, а не записывался весь в одну строку.
REA (2006-04-13 10:41:00) [1]В этом млучае придется повозиться...
А DirectUIHWND как то связан с Microsoft Active Accessibility. Продолжаю копать...
AbrosimovA (2006-04-13 10:16:00) [2]
> Но вот кнопочки и т.п. туда не напихать как в Add/Remove
> programs.
Заблуждение.
var
Form1: TForm1;
Button: TButton;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Button:=TButton.Create(Self);
Button.Parent:=ListView1;
end;
Положение каждого элемента Listview мы можем узнать в любой момент, после этого координаты кнопки меняем на нужные
REA (2006-04-13 10:15:00) [3]Я тоже уже глянул - странный класс окна прямо скажем. А его как то можно использовать?
Handle (2006-04-12 17:44:00) [4]
> А вот хотя бы как в "Установка/Удаление программ".
Это не TListView это DirectUIHWND
REA (2006-04-12 17:39:00) [5]Проще наверно через DrawText. Но вот кнопочки и т.п. туда не напихать как в Add/Remove programs.
Handle (2006-04-12 17:22:00) [6]
> Не обязательно ListView, но какие другие компоненты позволяют
> сделать это?
ListBox
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Style := lbOwnerDrawVariable;
with ListBox1.Items do
begin
ListBox1.Items.AddObject('Что бы было удобно сотировать и удобное представление данных.', Pointer(clRed));
ListBox1.Items.AddObject('"Установка/Удаление программ" хороший пример. Что-то вроде этого и нужно мне.
', 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;
Fenix (2006-04-12 14:12:00) [7]Вид vsReport.
Что бы было удобно сотировать и удобное представление данных.
Не обязательно ListView, но какие другие компоненты позволяют сделать это?
"Установка/Удаление программ" хороший пример. Что-то вроде этого и нужно мне.
REA (2006-04-12 10:57:00) [8]Мне тоже любопытно.
А вот хотя бы как в "Установка/Удаление программ".
Можно наверно самому сделать впрочем.
Германн (2006-04-12 02:01:00) [9]И ещё вопрос. А зачем!?
Зачем обязательно надоиспользовать для вывода многострочного текста именно ListView?
Gero (2006-04-12 01:00:00) [10]Какой вид ListView интересует и как ты себе это представляешь?