Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создать ProgressBar в колонке TListView

Delphi , Компоненты и Классы , TProgressBar

Создать ProgressBar в колонке TListView


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 и назначает его как данные для первого элемента списка.

Однако, есть несколько проблем с этим кодом:

  1. Вы не можете напрямую назначать контроль как данные для элемента TListViewItem. Данные должны быть вариантом, который может содержать различные типы значений.
  2. Контроль TProgressBar не предназначен для использования внутри списка. Он предназначен для использования в форме или другом контейнере.

Чтобы создать прогресс-бар внутри списка, вы можете использовать список с собственным рисунком и нарисовать прогресс-бар самому. Вот пример:

procedure TForm1.Button1Click(Sender: TObject);
var
  r: TRect;
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;

  Listview1.Items[0].Data := TObject(TProgressBar.Create(Self));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  pb: TProgressBar;
begin
  pb := TProgressBar(Listview1.Items[0].Data);
  if Assigned(pb) then
    pb.StepIt;
end;

В этом коде, когда вы нажимаете на первый кнопку, создается новый TProgressBar и его данные назначаются элементу списка. Когда вы нажимаете на вторую кнопку, она пытается вызвать метод StepIt прогресс-бара.

Обратите внимание, что список не поддерживает собственные рисунки с контролами, такими как TProgressBar. Вы должны нарисовать контроль самому внутри списка.

Вот пример, как можно нарисовать прогресс-бар в списке с собственным рисунком:

procedure TForm1.ListView1DrawItem(Control: TWinControl; Index: Integer;
  ARect: TRect; State: TListItemState);
var
  pb: TProgressBar;
begin
  if (Index >= 0) and (Index < Listview1.Items.Count) then
  begin
    pb := TProgressBar.Create(Self);
    try
      pb.Parent := Listview1;
      pb.BoundsRect := ARect;
      // Установите позицию прогресс-бара здесь
      pb.Position := 30;
    finally
      FreeAndNil(pb);
    end;
  end;
end;

procedure TForm1.ListView1DrawSubItem(Control: TWinControl; Index: Integer;
  SubItemIndex: Integer; Rect: TRect; State: TListItemState);
begin
  if (Index >= 0) and (Index < Listview1.Items.Count) then
    Listview1.Canvas.FillRect(Rect);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  pb: TProgressBar;
begin
  pb := TProgressBar.Create(Self);
  try
    pb.Parent := Listview1;
    // Найдите прогресс-бар в списке
    for i := 0 to Listview1.Items.Count - 1 do
      if Listview1.Items[i].Data is TProgressBar then
      begin
        pb := TProgressBar(Listview1.Items[i].Data);
        break;
      end;

    if Assigned(pb) then
      pb.StepIt;
  finally
    FreeAndNil(pb);
  end;
end;

В этом коде, когда вы нажимаете на первый кнопку, создается новый TProgressBar и нарисован внутри списка. Когда вы нажимаете на вторую кнопку, она пытается найти прогресс-бар в списке и вызвать его метод StepIt.

В статье описывается создание прогресс-барра (ProgressBar) в колонке TListView Delphi, а также изменение его положения с помощью кнопок на форме.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TProgressBar ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-12 15:47:35/0.011435985565186/0