AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

progressanzeige realisieren

Ein Thema von stephan007 · begonnen am 22. Jun 2007 · letzter Beitrag vom 22. Jun 2007
Antwort Antwort
stephan007

Registriert seit: 2. Mär 2007
48 Beiträge
 
#1

progressanzeige realisieren

  Alt 22. Jun 2007, 11:54
hallo!

ich hab aktuell folgendes problem:

ich will eine progress sprich fortschrittsanzeige realisieren. dabei hab ich eine prozessfortschrittsbalken und einen gesamtfortschrittsbalken jeweils in einem panel. das deshalb, weil ich mein fenster modular halten will, damit eventuell auch nur einer der beiden balken verwendet werden kann.

nun hab ich aber folgendes problem: ich habe eine procedure, die mir den balken und die anzeige (xxx / yyy) neu setzt. dieser procedure übergebe ich einen progressvalue, der das ausmass des fortschritts angibt. weiters kann dieser progressvalue entweder nur eine zahl (z.b. 1) aber auch eine mit einer einheit behaftete zahl sein (z.b. 1MB).

nun soll die funktion folgendes tun:

sind beide balken sichtbar, dann rückt der untere balken (total) in abhängigkeit vom oberen (process) weiter.
beispiel: ich habe 3 files mit 2Mb, 2Mb und 4Mb, somit laufen oben die nacheinander durch. die position des balkens kann ich ja mit round((current + progressvalue) / maximal) berechnen. beim unteren könnte ich den balken detto so setzen.
ist der obere auf 100% angekommen (abfangen dass man nicht drüber kommt eventuell vorsehen), solls mit dem nächsten weitergehen (klar, ein reset und set mit neuen werten).
die anzeige (xxx / yyy) läßt sich ja da leicht mit einem format(.) realisieren.

ich glaube euch ist mitlerweile klar, was ich da realisieren will, kennt man doch von so einigen installationspackages, bei denen oben der balken für das aktuelle file läuft und unten darunter der balken für die gesamte installation. und genau sowas will ich da nun realisieren. (mit dem kleinen unterschied, dass eventuell auch nur einer der balken dargestellt wird, die funktionalität aber wenn möglich schon so gelöst ist, dass es egal ist, ob einer oder beide zu sehen ist, die jeweilige procedure unabhängig davon das richtige macht).

habt ihr da eine idee, wie man sowas schnell und vorallem einfach realisiert oder realisieren könnte? hab da momentan zwar schon einige ideen, allerdings zerfällt das bei mir in zig if-bedingungen usw., dass ich mir denke, das muss doch einfacher gehen.
hätte nämlich eine globale progress gemacht und da drinnen eine "allgemeine" balken und anzeigenaktualisierungs-procedure aufgerufen, der ich die jeweiligen parameter auf den weg mitgebe, also entweder vom total oder vom progress (da ja gleiche funktionalität). was haltet ihr davon oder habt ihr eine bessere bzw. effizientere lösung?

stephan.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: progressanzeige realisieren

  Alt 22. Jun 2007, 17:56
Guten Abend,

ein Beispiel wie man es lösen könnte:

Grüße
Klaus

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar; // die alles anzeigt
    ProgressBar2: TProgressBar; // die einzelne Schritte anzeigt
    Button1: TButton;
    Timer1: TTimer;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    FileSize : Array[0..3] of Integer;
    SizeAll : Integer;
    CurrentFile : Byte;
    Step : Integer;
     Timer : TTimer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Byte;
begin
  FileSize[0]:=200000;
  FileSize[1]:=10000;
  FileSize[2]:=500000;
  FileSize[3]:=30000;

  SizeAll:=0;
  for i:=0 to length(FileSize) do
    SizeAll := SizeAll + FileSize[i];
  CurrentFile:=0;
  Timer1.Interval:=50;
  Timer1.Enabled:=true;
  ProgressBar1.Max:=SizeAll;


end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  step:=5000;
  Label1.Caption:='File '+IntToStr(CurrentFile);
  ProgressBar2.Max:=FileSize[CurrentFile];
  ProgressBar2.Position:=ProgressBar2.Position + step;
  ProgressBar1.Position:=ProgressBar1.Position + step;
  If ProgressBar2.Position >= FileSize[CurrentFile] then
    begin
      inc(CurrentFile);
      ProgressBar2.Position:=0;
      if CurrentFile > Length(FileSize) then
        Timer1.Enabled:=false;
    end;

end;

end.
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz