[Delphi] Progress bar in 'n list?

Pagina: 1
Acties:

  • Ariejan
  • Registratie: Februari 2001
  • Laatst online: 02-09 16:31
Ik ben bezig een FTP Programma te schrijven. Ja, ik weet het er zijn er genoeg, maar het is meer voor educatieve doeleinden.

Nu ben ik opzoek naar een manier om, net als bij de meeste share programma's, een progressbar in 'n list, of string grid, of wat het ook moge zijn.

Ik heb op Torry.net gekeken, maar daar kon ik niets vinden, en ook zoeken op GoT leverde niks op.

Het liefste zie ik een open-source component, maar info over hoe je zelf zo'n ding in elkaar kunt hacken is ook van harte welkom.

  • Ariejan
  • Registratie: Februari 2001
  • Laatst online: 02-09 16:31
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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; 


{ProgressBar Position ändern} 
{Change ProgressBar position} 
procedure TForm1.Button2Click(Sender: TObject); 
var 
  pb: TProgressBar; 
begin 
  pb := TProgressBar(Listview1.Items[0].Data); 
  pb.StepIt; 
end;

Topic kan geclosed worden....

  • Paul
  • Registratie: September 2000
  • Laatst online: 22:49
Op woensdag 24 oktober 2001 22:02 schreef Ariejan het volgende:

[..]

Topic kan geclosed worden....
Behalve dan dat DAT per klik op button 1 2 extra kolommen aanmaakt, maar geen extra pb, en dat je wel kunt scrollen, alleen blijft je pb staan op de plaats waar hij stond :P
Het scrollen heb ik er niet uit, maar het maken van meerdere items wel :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
procedure TForm1.Button1Click(Sender: TObject);
var
  r: TRect;
  pb: TProgressBar;
  i : integer;
begin
  Listview1.ViewStyle := vsReport;
  Listview1.Items.Add.Caption := 'Text';

  i := ListView1.items.count - 1;
  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;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  pb: TProgressBar;
  i : integer;
begin
  if ListView1.SelCount >= 1 then
    begin
    i := ListView1.Selected.Index;
    pb := TProgressBar(Listview1.Items[i].Data);
    pb.StepIt;
    end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Listview1.Columns.Add.Width := 100;
  Listview1.Columns.Add.Width := 200;
end;

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 21:15

Delphi32

Heading for the gates of Eden

Misschien moet je eens gaan kijken naar Listview.OwnerDraw en de OnAdvancedCustomDrawItem/SubItem events, daar kun je het repainten helemaal afhandelen en ben je dus ook in staat om je column resize af te handelen (uit die andere thread). Pas wel op, die custom draw dingen worden erg vaak aangeroepen (elke keer als de list opnieuw getekend moet worden) dus de boel kan retetraag worden bij lange lists :+