Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FreePascal Progressbar rückwärts? (https://www.delphipraxis.net/192373-progressbar-rueckwaerts.html)

Maurooon 12. Apr 2017 19:09

Delphi-Version: 5

Progressbar rückwärts?
 
Hey Leute,

ich würde gerne eine Art Tank für ein Spiel machen, der sich leert, wenn man Gas gibt. Wenn er leer ist, soll man sich nicht mehr bewegen können. Lässt sich sowas mit einer Progressbar lösen oder geht diese nicht rückwärts?

Hat jemand eine Idee wie ich einen Tank optisch realisieren kann, der nach sagen wir mal 10 Sekunden leer ist? Wenn das mit einer Progressbar gehen würde wäre das mega. Falls ja: kann man die Progressbar farblich noch anpassen?

Viele liebe Grüße

a.def 12. Apr 2017 19:10

AW: Progressbar rückwärts?
 
Nimm doch ein TGauge und einen Timer?

Maurooon 12. Apr 2017 19:18

AW: Progressbar rückwärts?
 
Zitat:

Zitat von a.def (Beitrag 1367415)
Nimm doch ein TGauge und einen Timer?

Ja genau so etwas habe ich mir vorgestellt. Wusste nur nicht, dass es TGauge gibt. Kannst du mir noch sagen, wie man das benutzt? LG

nahpets 12. Apr 2017 19:43

AW: Progressbar rückwärts?
 
Für so optische Spielereien nehme ich gerne die TQProgressBar
Bei ihr hat man mehrere Optionen für die Art der Darstellung, neben horizontal und vertikal gibt es noch Farbverläufe, anzeige der inaktiven Positionen. Man kann es ähnlich zu den LED-Anzeigen von den Kassettenrecordern aus vergangenen Zeiten machen ...

Funktioniert aber letztlich wie 'ne Progressbar. Min auf 0 setzen Max auf höchsten Füllstand, Position von Max langsam runter bis 0 setzen. Und schon hat man die gewünschte Tankleerung dargestellt.

'ne kleine "Vorschau" ist hier zu finden: TQProgressBar.PNG

a.def 12. Apr 2017 19:44

AW: Progressbar rückwärts?
 
z.B. so:
du packst eine TGauge auf dein Formular, einen TButton und einen TTimer.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
 Timer1.Enabled := False;
 Timer1.Interval := 100;
 Gauge1.Kind := gkVerticalBar;
 Gauge1.MaxValue := 100;
 Gauge1.MinValue := 0;
 Gauge1.ShowText := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if not Timer1.Enabled then
  Gauge1.Progress := Gauge1.MaxValue;

 Timer1.Enabled := not Timer1.Enabled;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Application.ProcessMessages;

 if Gauge1.Progress = Gauge1.MinValue then
  Timer1.Enabled := False
 else
  Gauge1.Progress := Gauge1.Progress - 1;
end;
Edit:
statt TGauge kannst du auch das nehmen was nahpets schreibt. Aber vom Prinzip her (Timer) sollte es gleich sein.

himitsu 12. Apr 2017 20:36

AW: Progressbar rückwärts?
 
Natürlich geht eine Progressbar auch rückwärts ... man fängt einfach bei 100% an und zählt dann runter, wobei der Balken kürzer wird.

Aviator 12. Apr 2017 22:27

AW: Progressbar rückwärts?
 
Und für die Farben kann man dann noch TProgressBar.State verwenden. Hier ist man zwar auf 3 Farben beschränkt, aber das sollte für "voll", "mittel", und "(fast) leer" ja eigentlich reichen.

Maurooon 14. Apr 2017 13:29

AW: Progressbar rückwärts?
 
Zitat:

Zitat von Aviator (Beitrag 1367440)
Und für die Farben kann man dann noch TProgressBar.State verwenden. Hier ist man zwar auf 3 Farben beschränkt, aber das sollte für "voll", "mittel", und "(fast) leer" ja eigentlich reichen.

Wie genau funktioniert das?

a.def 14. Apr 2017 14:00

AW: Progressbar rückwärts?
 
Delphi-Quellcode:
ProgressBar1.State := pbsNormal;

ProgressBar1.State := pbsError;

ProgressBar1.State := pbsPaused;

Aviator 14. Apr 2017 14:00

AW: Progressbar rückwärts?
 
Voraussetzung ist, dass auf deiner Form eine ProgressBar vorhanden ist die den Namen pb1 besitzt und du über einen Timer die Position der ProgressBar setzt. Dann funktioniert das in etwa so:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  pb1.Position := pb1.Position - 1; // Hiermit wird der Wert der Position pro Durchlauf des Timers um 1 verringert.
  case pb1.Position of
    0..10: pb1.State := pbsError;
    11..30: pb1.State := pbsPaused;
    31..100: pb1.State := pbsNormal;
  end;
end;
Die Geschwindigkeit in der die ProgressBar gegen 0 gehen soll kannst du, entweder über das Interval des Timers oder über den Wert den du von der aktuellen Position subtrahierst, beschleunigen oder verlangsamen.

Das oben ist auch nur ein Beispiel wie man es lösen könnte. Alternativ kannst du auch wirklich eine TGauge benutzen, da du mit der komplett frei herumhantieren kannst.

Oder du benutzt z.B. eine TPaintBox und zeichnest dir die ProgressBar komplett selbst. Eine neue Komponente von einer bestehenden abzuleiten will ich dir jetzt mal nicht zumuten. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 Uhr.
Seite 1 von 3  1 23      

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