AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ProgressBar mit einer verzögerten Abnahme des Wertes, nur wie?
Thema durchsuchen
Ansicht
Themen-Optionen

ProgressBar mit einer verzögerten Abnahme des Wertes, nur wie?

Ein Thema von KodeZwerg · begonnen am 23. Sep 2018 · letzter Beitrag vom 23. Sep 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

ProgressBar mit einer verzögerten Abnahme des Wertes, nur wie?

  Alt 23. Sep 2018, 11:40
Hallo Gemeinde!

Vielleicht hat sich ja jemand mit so etwas schon mal beschäftigt weil ich hier irgendwie noch im Dunkeln tappe.
Ich habe eine ProgressBar ähnliche Komponente, aber als Beispiel reicht ne ProgressBar total aus.
-> Min 0 / Max 100
Was ich nun erreichen möchte ist folgendes, wenn die ProgressBar mittels Position einen Wert erhält der höher ist als der alte, soll die PB ganz normal schnell, also wie gewohnt, sofort auf Ihre Position gesetzt werden.
Wenn allerdings ein Wert reinkommt der geringer als der aktuelle ist, möchte ich das die PB nicht ruckartig auf den niedrigen Wert hüpft, sondern langsam runtergeht, analog sozusagen.
Wenn jedoch wieder ein höherer Wert reinkommt, da soll es digital, also sofort hoch hüpfen.
Und wenn gar kein neuer Wert reinkommt, soll die nach nach Richtung 0 wandern.

Hat da jemand schon mal was in der Richtung unternommen oder kann mir mit einem Tipp weiterhelfen wie man das erreichen kann?

Ich bin da für jeden Vorschlag, egal wie abgedreht, offen!


Danke fürs lesen.


Falls ihr euch Fragen sollten, wieso zum Henker will der Zwerg sowas blödes, was nicht exakt den Wert sofort darstellt, was ich erreichen möchte ist so etwas wie bei alten HiFi Verstärken verbaut war, Analoge VU-Meter.
Die schwingen ja eher zurück als das die sofort nen niedrigeren Wert haben, solch ein Effekt möchte ich erreichen.
Gruß vom KodeZwerg

Geändert von KodeZwerg (23. Sep 2018 um 11:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 1. Dez 2003
Ort: Luterbach (CH)
679 Beiträge
 
Delphi 12 Athens
 
#2

AW: ProgressBar mit einer verzögerten Abnahme des Wertes, nur wie?

  Alt 23. Sep 2018, 12:20
- Wie wäre es, den Wert einem Timer zu übergeben, welcher den Wert runterzählt?
- Oder der Timer zählt grundsätzlich den aktuellen Wert immer langsam runter, wenn ein höherer Wert anliegt wird dieser sofort ausgegeben ansonsten eben verzögert (VU Anzeigen funktionieren nach diesem Prinzip).
Roland
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#3

AW: ProgressBar mit einer verzögerten Abnahme des Wertes, nur wie?

  Alt 23. Sep 2018, 12:22
Mal schmutzig hingeschrieben:
Delphi-Quellcode:
if NeuePosition < ProgressBar.Position then begin
  for i := ProgressBar.Position DownTo ProgressBar.Position do begin
    ProgressBar.Position := i;
    Sleep(100);
  end;
end else begin
  ProgressBar.Position := NeuePosition;
end;
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

AW: ProgressBar mit einer verzögerten Abnahme des Wertes, nur wie?

  Alt 23. Sep 2018, 12:24
Das ist über einen Thread realisierbar. Die Werte werden dem Thread übergeben, dieser aktualisiert (natürlich per synchronize abgesichert) den Progressbar.
Der Thread errechnet bei sinkenden Werten mehrere Zwischenstufen, die dann z.B. im Abstand von hundert Millisekunden der Progressbar Position zugewiesen werden.
Ich würde einfach eine while not Terminated Schleife verwenden die bei jedem Durchlauf prüft, ob eine neue Position dargestellt werden soll, und andernfalls ein Sleep(100) ausführt.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: ProgressBar mit einer verzögerten Abnahme des Wertes, nur wie?

  Alt 23. Sep 2018, 12:42
Danke an alle für Eure Tipps, mjustins Variante nutze ich bereits, momentan leider noch falsch da ich AVs bekomme.
Also war mein Grundgedanke gar nicht mal allzu abwegig, gut zu Wissen. Ich dachte ich mach es wieder viel zu kompliziert

Mein Grundgedanke war, so bald es ein Audiosignal gibt erstelle ich den Thread, lasse den solange laufen wie Audiosignal am machen ist und dann Thread löschen.

Ich werde daran nochmal anknüpfen bei Problemen, doch jetzt erst mal mein Thread so richten das der auch Werte schlucken kann und an Gui ohne AV wiedergibt.
Da mag ich mich mit alleine beschäftigen, damit ich mein Problem damit besser Verstehe, also bitte keine Ratschläge oder Codes dazu Posten, ich will ja was Lernen und nicht nur abschreiben
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: ProgressBar mit einer verzögerten Abnahme des Wertes, nur wie?

  Alt 23. Sep 2018, 13:40
Nebenbei du kannst auch meinen Slider dafür verwenden.
Der ist eine Kombination aus Slider und Progressbar.

Code gebe ich dir keinen den willst du ja nicht.

gruss
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#7

AW: ProgressBar mit einer verzögerten Abnahme des Wertes, nur wie?

  Alt 23. Sep 2018, 13:58
Ich hätte da folgenden Vorschlag mit einem Timer
Delphi-Quellcode:
uses
  Winapi.Windows, Winapi.Messages,
  System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls,
  Vcl.ExtCtrls;

type
  TForm1 = class( TForm )
    ProgressBar1: TProgressBar;
    TrackBar1: TTrackBar;
    ProgressTimer: TTimer;
    procedure ProgressTimer_Timer( Sender: TObject );
    procedure TrackBar1_Change( Sender: TObject );
  private
    FProgressPosition: Integer;
    procedure SetProgressPosition( const Value: Integer );
  public
    property ProgressPosition: Integer read FProgressPosition write SetProgressPosition;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ProgressTimer_Timer( Sender: TObject );
begin
  if ProgressBar1.Position <= ProgressPosition
  then
    ProgressBar1.Position := ProgressPosition
  else
    ProgressBar1.Position := ProgressBar1.Position - 1;
end;

procedure TForm1.SetProgressPosition( const Value: Integer );
begin
  FProgressPosition := Value;
end;

procedure TForm1.TrackBar1_Change( Sender: TObject );
begin
  ProgressPosition := TrackBar1.Position;
end;
Ach ja, der ProgressTimer hat Enabled := True und Interval := 10
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: ProgressBar mit einer verzögerten Abnahme des Wertes, nur wie?

  Alt 23. Sep 2018, 19:44
Nebenbei du kannst auch meinen Slider dafür verwenden.
Der ist eine Kombination aus Slider und Progressbar.

Code gebe ich dir keinen den willst du ja nicht.

gruss
Ich benutze eine Komponente die mir im Grundzustand einen Kreis pinselt mit nem Zeiger, aber 360°, viel zu viel "rund".
Ich habe es bereits so weit abgeändert das es kein Kreis sondern wie bei echte VUs nur so 80/90° in etwa hat.
Also das Ausschläge der Nadel nur oben dargestellt werden und nicht Kreisrund.
Die Technik die dahinter steckt, ob nun ProgressBar Slider WhatEver bleibt ja die gleiche, von daher, kompatibel zu allem was Werte 0-100 kann.
Aber Danke für keinen Code, ich brauche da echt ne auszeit um drüber zu büffeln, nur kam mir heute was dazwischen und morgen wirds spät.

Ich schaue mir gleich noch Schokohase sein Grundgerüst an, ähnelt meinem quicky von gestern Nacht recht stark.

Sobald ich das fertig habe und jemand Interesse bekundet, pump ich Code hoch.
Gruß vom KodeZwerg
  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 01:56 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