![]() |
Listview 3 Spalte Progressbar
Hallo an alle
ich habe ein Listview mit 3 Spalten. Nun möchte ich ich in der 3. Spalte eine Progessbar createn. Mit diesen code funktioniert das erstellen ja schon mal ganz gut, aber wie bekomme ich die PB in die dritte Spalte?
Delphi-Quellcode:
Listview füllen der Spalten
procedure TFmTabelle.SetzteProgressBarAufLV(aListView: TListView; aListItem: TListItem);
const ProgBarColumnIndex = 1; ProgBarMax = 100; var ProgBar : TProgressBar; pbRect : TRect; begin ProgBar := TProgressBar.Create(nil); ProgBar.Style := pbstMarquee; ProgBar.Parent := aListView; aListItem.data := ProgBar; pbRect := aListItem.DisplayRect(drBounds); pbRect.Left := pbRect.Left + aListView.Columns[-1 + ProgBarColumnIndex].Width; pbRect.Right := pbRect.Left + aListView.Columns[ProgBarColumnIndex].Width; ProgBar.BoundsRect := pbRect; end;
Delphi-Quellcode:
Screen.Cursor := crHourGlass;
{* Value in Listeditor *} li := ListView.Items.Add; li.Caption := sName; //erste Spalte Name li.SubItems.Add(sPfad); //zweite Spalte Pfad li.SubItems.Add(sDateigroesse); //dritte Spalte Größe SetzteProgressBarAufLV(ListView,li); |
AW: Listview 3 Spalte Progressbar
So geht es:
Delphi-Quellcode:
procedure TFmTabelle.SetzteProgressBarAufLV(aListView: TListView; aListItem: TListItem);
const ProgBarMax = 100; var ProgBar : TProgressBar; pbRect : TRect; //I: Integer; begin ProgBar := TProgressBar.Create(nil); ProgBar.Style := pbstMarquee; ProgBar.Parent := aListView; aListItem.data := ProgBar; pbRect := aListItem.DisplayRect(drBounds); //Index geht ja mit 0 los xD Falls es max 3 sind. pbRect.Left := pbRect.Left + aListView.Columns[0].Width; pbRect.Left := pbRect.Left + aListView.Columns[1].Width; pbRect.Right := pbRect.Left + aListView.Columns[2].Width; //Wenn du es in die Letze Spalten immer haben willst mach es so: { for I := 0 to aListView.Columns.Count - 2 do pbRect.Left := pbRect.Left + aListView.Columns[I].Width; pbRect.Right := pbRect.Left + aListView.Columns[aListView.Columns.Count-1].Width; } ProgBar.BoundsRect := pbRect; end; |
AW: Listview 3 Spalte Progressbar
hallo,
das erstellen der Progressbar in der drittenspalten klappt prima. Jetzt habe ich aber das Problem das wenn ich diese wieder freigeben will mit
Delphi-Quellcode:
Das ListItem verweist auf die 2 Spalte, obwohl die PB auf der Dritten Liegt.
TProgressbar(Li.Data).Free
Wie kann ich das ListItem in der 3. Spalte anknüpfen, das wenn ich die PB frei geben. |
AW: Listview 3 Spalte Progressbar
Hallo,
Zitat:
sondern auf eine Zeile. Heiko |
AW: Listview 3 Spalte Progressbar
Und ist der Index der Spalten nicht null basierend? Ich bin mir jetzt nicht sicher, ob die erste Spalte als Caption bezeichnet wird und dann die zweite Spalte als erste Subitemspalte oder gar als nullte Subitemspalte oder ob die erste Spalte Spalte null ist und dann die zweite als erste Spalte bezeichnet wird.
|
AW: Listview 3 Spalte Progressbar
Columns im Header ist genauso nullbasiert wie SubItems bei jedem Item.
Ich würde hier allerdings nicht so viele ProgressBars erzeugen. Man kann viel einfacher (einfacher u.a. wegen der nicht notwendigen Neupositionierung beim Scrollen) einfach Windows sagen, dass an der Stelle eine ProgressBar gezeichnet werden soll. (Unit Themes, Befehl: ThemeServices.DrawElement mit teProgress als Element, ...) |
AW: Listview 3 Spalte Progressbar
huhu
So viele PB's sollten es nicht werden. Der sinn dahinter ist: Es soll für DCPlusPlus einen Konfigurationsassistenten werden. Der User muss Ordner Freigeben was in der ListView angezeigt wird.(also: Pfad Virtueller Name und Ordnergröße) Die Ordnergröße muss noch berechnet werden was in einen Thread geschied. Und so lange der Thread läuft, läuft auch die PB. Habe jetzt herausgefunden das beim Freigeben der PB auf eine Falsche adresse gezeigt wird was dadurch mir eine Exception bringt. Kann man irgendwie nach den Namen der ProgressBar suchen und diese dann freigeben? oder gibt es andere Möglichkeiten? |
AW: Listview 3 Spalte Progressbar
Das Problem hat sich erledigt.
Mann kann nur die Progressbar in einen Thread freigeben mit synchronize(). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz