Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Вниз

ProgressBar в ListView   Найти похожие ветки 

 
faost ©   (2005-01-31 19:09) [0]

У меня есть следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
 r: TRect;
 pb: TProgressBar;
begin

 Listview1.ViewStyle         := vsReport;
 Listview1.Items.Add.Caption := "Text";

 r := Listview1.Items[i].DisplayRect(drBounds);
 r.Left  := r.Left + Listview1.columns[0].Width;
 r.Right := r.Left + Listview1.columns[1].Width;

 pb := TProgressBar.Create(Self);
 pb.Parent := Listview1;
 pb.BoundsRect := r;
 pb.Position := 30;
 Listview1.Items[i].Data := pb;

 Inc(i);
end;

Проблема в том, что при скроллинге ListView ProgressBar не перемещается вместе с другими столбцами ListView!


 
Defunct ©   (2005-01-31 19:13) [1]

А с чего вдруг ему перемещаться?


 
faost ©   (2005-01-31 19:28) [2]

Нужно, чтоб в ListView был целый столбец ProgressBar-ов, который, естественно, должен будет перемещаться вместе и с другими столбцами.


 
Defunct ©   (2005-01-31 19:37) [3]

Включаем OwnerDraw := True
и отрисовываем каждый элемент вручную по событию OnDrawItem


 
faost ©   (2005-01-31 19:43) [4]

А как реагировать на событие, когда происходит скроллинг ListView?


 
Defunct ©   (2005-01-31 19:51) [5]

ну уж поэкперементируйте. видимо придется ProgressBar отрисовывать вручную (во всяком случае тормозить будет меньше).


 
faost ©   (2005-01-31 19:55) [6]

А как именно? Помоги ссылкой или примером кода


 
Defunct ©   (2005-01-31 20:10) [7]

примерчик.
добавьте в ListView одну колонку.
ширину колонки поставьте ~200.
стиль vsReport.
OwnerDraw - true.

procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
 Item: TListItem; Rect: TRect; State: TOwnerDrawState);
begin
 with TListView(Sender).Canvas do
 begin
   Font.Color := clBlack;
   Brush.Color := clWhite;
   TextRect(Rect, Rect.Left, Rect.Top, Item.Caption);
   Rect.Left := Rect.Left + TextWidth("col permanent size");
   if Rect.Left > Rect.Right then
      Rect.Left := Rect.Right -1;
   Brush.Color := clBlue;
   Rectangle( Rect.Left, Rect.Top+1, Rect.Left + Integer(Item.Data), Rect.Bottom-1);

 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i : integer;
begin
 for i := 0 to 100 do
 with ListView1.Items.Add do
 begin
   Caption := "Text "+IntToStr(i);
   Data := Pointer( Random(50) );
 end;
end;


 
faost ©   (2005-01-31 20:39) [8]

Спасибо!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.048 c
14-1106366180
able
2005-01-22 06:56
2005.02.13
Выбор FTP-сервера под Win32


1-1106837943
Денис Шаров
2005-01-27 17:59
2005.02.13
Как поставить "Hook" на CDROM???


1-1106857451
Urvin
2005-01-27 23:24
2005.02.13
Прошу помочь с кодом, перевод типов


6-1100847332
Дмитрий76
2004-11-19 09:55
2005.02.13
Проблемы с функцией NetShareAdd (netapi32.dll)


4-1103817702
You
2004-12-23 19:01
2005.02.13
Как заставить "чужое" окно минимализироваться?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский