procedure TForm1.Button1Click(Sender: TObject);
var
r: TRect;
pb: TProgressBar;
begin
Listview1.Columns.Add.Width := 100;
Listview1.Columns.Add.Width := 200;
Listview1.ViewStyle := vsReport;
Listview1.Items.Add.Caption := 'Text';
r := Listview1.Items[0].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[0].Data := pb;
end;
// Change the ProgressBar Position // ProgressBar Position andern procedure TForm1.Button2Click(Sender: TObject);
var
pb: TProgressBar;
begin
pb := TProgressBar(Listview1.Items[0].Data);
pb.StepIt;
end;
Перевод:
Код, который вы предоставили, пытается создать TListView с колонкой и добавить элемент в него. Он также создает контроль TProgressBar и назначает его как данные для первого элемента списка.
Однако, есть несколько проблем с этим кодом:
Вы не можете напрямую назначать контроль как данные для элемента TListViewItem. Данные должны быть вариантом, который может содержать различные типы значений.
Контроль TProgressBar не предназначен для использования внутри списка. Он предназначен для использования в форме или другом контейнере.
Чтобы создать прогресс-бар внутри списка, вы можете использовать список с собственным рисунком и нарисовать прогресс-бар самому. Вот пример:
В этом коде, когда вы нажимаете на первый кнопку, создается новый TProgressBar и его данные назначаются элементу списка. Когда вы нажимаете на вторую кнопку, она пытается вызвать метод StepIt прогресс-бара.
Обратите внимание, что список не поддерживает собственные рисунки с контролами, такими как TProgressBar. Вы должны нарисовать контроль самому внутри списка.
Вот пример, как можно нарисовать прогресс-бар в списке с собственным рисунком:
procedureTForm1.ListView1DrawItem(Control:TWinControl;Index:Integer;ARect:TRect;State:TListItemState);varpb:TProgressBar;beginif(Index>=0)and(Index<Listview1.Items.Count)thenbeginpb:=TProgressBar.Create(Self);trypb.Parent:=Listview1;pb.BoundsRect:=ARect;// Установите позицию прогресс-бара здесьpb.Position:=30;finallyFreeAndNil(pb);end;end;end;procedureTForm1.ListView1DrawSubItem(Control:TWinControl;Index:Integer;SubItemIndex:Integer;Rect:TRect;State:TListItemState);beginif(Index>=0)and(Index<Listview1.Items.Count)thenListview1.Canvas.FillRect(Rect);end;procedureTForm1.Button2Click(Sender:TObject);varpb:TProgressBar;beginpb:=TProgressBar.Create(Self);trypb.Parent:=Listview1;// Найдите прогресс-бар в спискеfori:=0toListview1.Items.Count-1doifListview1.Items[i].DataisTProgressBarthenbeginpb:=TProgressBar(Listview1.Items[i].Data);break;end;ifAssigned(pb)thenpb.StepIt;finallyFreeAndNil(pb);end;end;
В этом коде, когда вы нажимаете на первый кнопку, создается новый TProgressBar и нарисован внутри списка. Когда вы нажимаете на вторую кнопку, она пытается найти прогресс-бар в списке и вызвать его метод StepIt.
В статье описывается создание прогресс-барра (ProgressBar) в колонке TListView Delphi, а также изменение его положения с помощью кнопок на форме.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.