Главная страница
    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.038 c
1-1106801958
Denizzz
2005-01-27 07:59
2005.02.13
как узнать в RichEdit что достигнут конец документа


1-1106898918
Vn
2005-01-28 10:55
2005.02.13
Формулы в OLEVariant переменных


6-1101598415
Змей
2004-11-28 02:33
2005.02.13
поочередная вставка


14-1106366180
able
2005-01-22 06:56
2005.02.13
Выбор FTP-сервера под Win32


1-1106738025
Aleks
2005-01-26 14:13
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский