![]() |
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 |
AW: Progressbar rückwärts?
Nimm doch ein TGauge und einen Timer?
|
AW: Progressbar rückwärts?
Zitat:
|
AW: Progressbar rückwärts?
Für so optische Spielereien nehme ich gerne die
![]() 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: ![]() |
AW: Progressbar rückwärts?
z.B. so:
du packst eine TGauge auf dein Formular, einen TButton und einen TTimer.
Delphi-Quellcode:
Edit:
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; statt TGauge kannst du auch das nehmen was nahpets schreibt. Aber vom Prinzip her (Timer) sollte es gleich sein. |
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.
|
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.
|
AW: Progressbar rückwärts?
Zitat:
|
AW: Progressbar rückwärts?
Delphi-Quellcode:
ProgressBar1.State := pbsNormal;
ProgressBar1.State := pbsError; ProgressBar1.State := pbsPaused; |
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:
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.
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; 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: |
AW: Progressbar rückwärts?
Zitat:
|
AW: Progressbar rückwärts?
Muss ich dafür bei Lazarus was in die USES einfügen oder gibt es da eine andere Möglichkeit?
|
AW: Progressbar rückwärts?
-- Ironie
Wer nutzt denn freiwillig Lazurus? :stupid: |
AW: Progressbar rückwärts?
Zitat:
Hast du ne Idee? |
AW: Progressbar rückwärts?
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi (VLC) und Lazarus (LCL) kapseln die selbe Windows-Komponente.
Alles was nicht in der gekapselten Klasse implementiert wurde, das kann man auch selber aufrufen. Was man natürlich alles in der zugehörigen Dokumentation (MSDN und Windows SDK bzw. Windows PSDK) nachlesen kann. ![]() ![]() ![]() ![]() |
AW: Progressbar rückwärts?
TProgressBar gehört zu den Common Controls (Uses ComCtrls).
![]() Die Komponente aus der Komponetenpalette (Reiter Common Controls) auf's Formular pappen. Der Rest sollte dann eigentlich von selbst gehen. |
AW: Progressbar rückwärts?
Zitat:
|
AW: Progressbar rückwärts?
Schau doch einfach mal in der ComCtrls nach, ob die TProgressbar überhaupt 'ne Eigenschaft State hat.
Wenn nein, kannst Du da auch nicht drauf zugreifen. |
AW: Progressbar rückwärts?
Zitat:
|
AW: Progressbar rückwärts?
Hast du das gesehen?
![]() |
AW: Progressbar rückwärts?
Naja, nicht alles was in Delphi vorhanden ist, ist auch in FreePascal vorhanden.
Und hier haben wir offensichtlich einen Unterschied. |
AW: Progressbar rückwärts?
...again what learned. :stupid:
![]() |
AW: Progressbar rückwärts?
In Delphi hatte man das auch erst später eingebaut.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 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-2025 by Thomas Breitkreuz