![]() |
Sekunden an einen Timer übergeben
ich habe eine integer-variable "sekunde" und möchte diese an einen Timer im Format dd:hh:mm:ss
übergeben! leider komme ich mit der timerroutine überhaupt nicht klar und auch das übersetzen ins richtige Format bereitet mir Probleme! Danke im voraus Sascha :coder2: p.s.: wie kann ich das Fenster der Dateneingabe schließen und gleichzeit ein neues Fenster für den Timer aufpoppen lassen? |
Re: Sekunden an einen Timer übergeben
Hallo und willkommen in der DP (ich wollte das immer schon mal schreiben :mrgreen:)
Leider verstehe ich deine Frage nicht. Willst du den Intervall eines Timer setzen? Wenn ja, dann verstehe ich nicht, was du mit dem Format meinst. Das Datumsformat ist doch nur interessant, wenn du den Wert in einen String umwandelst (oder umgekehrt). grüße, daniel |
Re: Sekunden an einen Timer übergeben
Hi Tavik!
Zitat:
Zitat:
Und außerdem verstehe ich diese Frage nicht :wiejetzt: Greetz alcaeus |
Re: Sekunden an einen Timer übergeben
ich glaube folgendes:
du meinst du hast eine art edit oder so wo du die zeit drin anzeigen willst.... an dieses editfeld (den "timer") willst du eine integer-uhrzeit (Tdatetime?) übergeben und anzeige lassen... so, wenn das soweit richtig war machst du dies:
Delphi-Quellcode:
so, dann die zweite frage: da wo du close; sagst sagst du direkt danach Form_Timer.Show/Showmodal...
var
zeit:TDateTime; begin zeit:=now; Edit1.Text:=DateTimetostr(zeit);//der Timer so, EDIT: deine variable hat die sekunden drin, daher:
Delphi-Quellcode:
das mit 01 beim ersten tag und so weiss ich so spontan auch nicht
var
sekunden, minuten, stunden, tage:integer; begin minuten:=sekunden div 60; sekunden:=sekunden mod 60; stunden:=minuten div 60; minuten:=minuten mod 60; tage:=stunden div 24; stunden:=stunden mod 24; Edit1.Text:=inttostr(tage)+':'+inttostr(stunden)+':'+inttostr(minuten)+':'+inttostr(sekunden);//der Timer |
Re: Sekunden an einen Timer übergeben
hallo! ersteinmal danke für die schnellen hilfeversuche...ich werd mal etwas weiter ausholen!
ich habe auf der integervariable sekunde den Wert (s:= 268457) (nur so als beispiel!) jetzt möchte ich mehrere Schritte abarbeiten (vielleicht gibts aber auch einen Befehl der das alles auf einmal erledigt!) 1. umrechnung in das Format 3Tage, 2Stunden, 34 Minuten, 17 Sekunden 2. übergabe dieses Ausgangswertes an einen Timer 3. Timer starten 4. wie der Timer angezeigt wird (Editbox oder Label) ist egal! danke für die hilfe Tavik p.s.: bin für jede idiotensichere beschreibung/quelltext dankbar*g* |
Re: Sekunden an einen Timer übergeben
@glkbkk
dein vorschlag hilt mir schon sehr weiter...jetzt soll dieses Edit feld nur noch jede Sekunde runtergezählt werden! daran scheitert es! gruss Tavik |
Re: Sekunden an einen Timer übergeben
dazu nimmst du jetzt den richtigen timer...
in der leiste system ist eine kompo timer... intervall auf 1000 (=1 sek) die variable sekunde bei jedem timer-ereignis 1 runter und meine procedure wieder machen... achso, am anfang timer disablen und dann wenn er initialisiert wird enablen hoffe du kommst damit zurecht |
Re: Sekunden an einen Timer übergeben
nimm einen (anderen) Timer, setze das Intervall auf 1000 (ms). Dann schreib in die onTimer-Procedure
Delphi-Quellcode:
dec(sekunden);
// und die ganzen Befehle von glkbkk |
Re: Sekunden an einen Timer übergeben
ahhhhh!
jungs jungs! ich bin blutiger anfänger! enablen vor und nachher? nich so fix! ich bin ja willig aber .... kann jemand die 5 minuten für eine ausführliche erklärung erübrigen? ich bin euch schon jetzt sehr sehr dankbar.... gute nacht sasch |
Re: Sekunden an einen Timer übergeben
Mit dem Enablen startest du einfach den Timer. Deswegen würde ich vorschlagen, ihn zur Entwicklungszeit auf disabled zu stellen und ihn dann zu starten, sobald was angezeigt werden soll. Das Intervall kannst du auch schon vorher auf 1000 stellen.
So sollte es gehen. |
Re: Sekunden an einen Timer übergeben
also
du gehst bei den komponenten in die kategorie system... da is ne uhr, der TTimer den klotzt du auf deine form (den sieht man nachher eh nicht) du stellst bei dem das intervall auf 1000 (ms=1 sekunde) du stellst enabled auf false (dies bewirkt das er nicht sofort losläuft...) nun machst du einen doppelklick drauf, du landest im quelltext, in einer procedure namens Timer1onTimer (oder so ähnlich) da tust du rein: dec(sekunde)
Delphi-Quellcode:
dann den code von mir, vom post davor...
dec(sekunde);//oder sekunde:=sekunde-1;
nun sagst du, nachdem du die variable sekunden eingelesen hast einfach Timer1.Enabled:=true; und das wärs EDIT mist, zu langsam, aber ich war genauer :mrgreen: |
Re: Sekunden an einen Timer übergeben
hallo! problem noch nicht gelöst!
ich bin jetzt soweit, dass sowohl stunde (h), minute (m) als auch sekunde(s) mit integerwerten belegt sind. dank der bisherigen hilfe kann ich jetzt das ganze auch als vernünftige zeitangabe wiedergeben Edit4.Text:= inttostr(h)+':'+inttostr(m)+':'+inttostr(s); jetzt möchte ich aber, dass diese Zeitangabe auch timermäßig läuft! also nicht nur die sekunden abgezählt werden, sondern alle stellen entsprechend einem echten Timer runterlaufen! danke im voraus für eure hilfe sascha |
Re: Sekunden an einen Timer übergeben
Hai Tavik,
mir ist noch immer nicht ganz klar was Du machen möchtest :oops: Möchtest Du einen Countdown der von einer von Dir festgelegten Zeit auf 0 zählt und dieses anzeigen? |
Re: Sekunden an einen Timer übergeben
Das hat doch glkbkk sehr schön erklärt.
Erst sorst du mit dec(Sekunde) dafür, dass die Sekunden um 1 erniedrigt werden, dann lässt du den geposteten wieder ausführen und gibt's alles wieder aus. Kontrollier vielleicht noch, ob die ausgegebenen Werte 2-stellig sind und bau vielleicht noch eine führende Null ein. |
Re: Sekunden an einen Timer übergeben
ah! jetzt verstehe ich! ihr ändert die werte schon so weit oben im quelltext! alles klar!
was ich jetzt nicht verstehe, ich habe jetzt 2 Prozeduren: eine OnChange, die abläuft wenn alle Eingaben aus Drei Edits getätigt wurden und ich habe einen Disableden Timer! wie bringe ich jetzt beide zusammen...hier mal mein kompletter quelltext
Delphi-Quellcode:
--> eingegeben werden: vorhandene Rohstoffe, Benötigte Rohstoffe und die anzahl der Erzeugten rohstoffe pro stunde! alles wird auf sekunden runtergerechnet,
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) GroupBox1: TGroupBox; GroupBox2: TGroupBox; Edit1: TEdit; GroupBox3: TGroupBox; Edit2: TEdit; GroupBox4: TGroupBox; Edit3: TEdit; GroupBox5: TGroupBox; GroupBox6: TGroupBox; Edit4: TEdit; Button1: TButton; Timer1: TTimer; procedure Edit3Change(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; vorhanden, prostunde, benoetigt, fehlend:real; zeitstunden :real; zeitsekunden:integer; h,m,s:integer; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin dec(zeitsekunden); end; procedure TForm1.Edit3Change(Sender: TObject); begin Timer1.Enabled:=true; vorhanden:= strtofloat(Edit1.Text); prostunde:= strtofloat(Edit2.Text); benoetigt:= strtofloat(Edit3.Text); fehlend:= benoetigt - vorhanden; zeitstunden:= fehlend / prostunde; zeitsekunden:= round(zeitstunden * 3600); h:= zeitsekunden div (60 * 60); zeitsekunden:= zeitsekunden - h*60*60; m:= zeitsekunden div 60; zeitsekunden:= zeitsekunden - m*60; s:= zeitsekunden; Edit4.Text:= 'h: '+inttostr(h)+' min: '+inttostr(m)+' sec: '+inttostr(s); end; end. dann wir eine Umrechnung in Stunden, Minuten und Sekunden abgegeben! nun will ich die dec(zeitsekunden) so einflechten, dass auch tatsächlich runtergezählt wird! aber wie verbinde ich diese beiden Prozeduren? danke für eure geduld mit mir! sascha |
Re: Sekunden an einen Timer übergeben
Im Timer wird bisher nur Sekunden dekrementiert und nischt weiter. Du müsstest das ganze Zeug aus dem Onchange (ausser Timer1.enabled) in den Timer schreiben. Am Besten schreibst du dir eine Funktion, der du die ganzen Variablen übergibst und die dir dann den Zeit-String [12:22:05] zurückgibt. Die kannst du dann auch in den OnChanges und im TImer aufrufen.
{Überprüfst du auch, ob man in den Edits keinen Müll wie Buchstaben eingeben kann? Sonst gibt's unschöne Fehlermeldungen} |
Re: Sekunden an einen Timer übergeben
so:
Delphi-Quellcode:
also den berechnungs/ausgabecode einfach nur umkopieren!!!
procedure TForm1.Timer1Timer(Sender: TObject);
begin dec(zeitsekunden); vorhanden:= strtofloat(Edit1.Text); prostunde:= strtofloat(Edit2.Text); benoetigt:= strtofloat(Edit3.Text); fehlend:= benoetigt - vorhanden; zeitstunden:= fehlend / prostunde; zeitsekunden:= round(zeitstunden * 3600); h:= zeitsekunden div (60 * 60); zeitsekunden:= zeitsekunden - h*60*60; m:= zeitsekunden div 60; zeitsekunden:= zeitsekunden - m*60; s:= zeitsekunden; Edit4.Text:= 'h: '+inttostr(h)+' min: '+inttostr(m)+' sec: '+inttostr(s); end; procedure TForm1.Edit3Change(Sender: TObject); begin Timer1.Enabled:=true; end; jetzt isses zwar so, das die anzeige erst 1 sek nach buttonclick geupdated wird, aber das machste jetzt selber!!! |
Re: Sekunden an einen Timer übergeben
Liste der Anhänge anzeigen (Anzahl: 1)
ich bin am verzweifeln!
jetzt habt ihr mir schon den source gegeben und das prog will einfach nicht laufen. der timer läuft einfach nicht an! kommt es zur überschneidung von dec(zeitsekunde) und der definition durch zeitstunde welches wiederum durch feste werte gegeben ist? ich hab das projekt jetzt beigefügt... vielleicht hat ja nochmal glkbkk die musse! vielen dank sascha |
Re: Sekunden an einen Timer übergeben
bei mir funzt es...
AABBEERR MACH DA EINEN BUTTON REIN WELCHER ARME USER SOLL DEN AHNEN DAS ES 1 SEKUNDE NACH ÄNDERUNGEN IN EDIT§ ZU EINER FEHLERMELDUNG KOMMT WEIL ER NICHT SCHNELL GENUG GETIPPT HAT *schüttel armen tavik bis er button hinmacht und brüll in dabei an* (sorry fürs anbrüllen) |
Re: Sekunden an einen Timer übergeben
ja aber wohin? dat läuft immernoch nicht! selbst wenn ich jetzt den Timer mit Button1 starte
kommen mit meinen eingabeweten 0,3600,3600 zwar die ein stunde, aber die fängt nicht an zu laufen!
Delphi-Quellcode:
ich verzweifele, und du auch!
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) GroupBox1: TGroupBox; GroupBox2: TGroupBox; Edit1: TEdit; GroupBox3: TGroupBox; Edit2: TEdit; GroupBox4: TGroupBox; Edit3: TEdit; GroupBox5: TGroupBox; GroupBox6: TGroupBox; Edit4: TEdit; Timer1: TTimer; Button1: TButton; procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; vorhanden, prostunde, benoetigt, fehlend:real; zeitstunden :real; zeitsekunden:integer; h,m,s:integer; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin dec(zeitsekunden); vorhanden:= strtofloat(Edit1.Text); prostunde:= strtofloat(Edit2.Text); benoetigt:= strtofloat(Edit3.Text); fehlend:= benoetigt - vorhanden; zeitstunden:= fehlend / prostunde; zeitsekunden:= round(zeitstunden * 3600); h:= zeitsekunden div (60 * 60); zeitsekunden:= zeitsekunden - h*60*60; m:= zeitsekunden div 60; zeitsekunden:= zeitsekunden - m*60; s:= zeitsekunden; Edit4.Text:= 'h: '+inttostr(h)+' min: '+inttostr(m)+' sec: '+inttostr(s); end; procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=true; end; end. mach dem bitte ein Ende und erklär es einem NOOOOOOOOB wie mir ausführlich! wohin mit dem Button? gruss sascha erklär mir doch der einfachkeit halber mal das prinzip der prozeduren und wie sie sich gegenseitig beeinflussen können! |
Re: Sekunden an einen Timer übergeben
hmm, bei den eingabewerten hab ich auch einen fehler...moment
nein, ich will einfach das der timer nicht OnEdit3Change aktiviert wird sondern wenn der user aufn button klickt... ahh, hier:
Delphi-Quellcode:
du musst das noch reintuen:
vorhanden:= strtofloat(Edit1.Text);
prostunde:= strtofloat(Edit2.Text); benoetigt:= strtofloat(Edit3.Text); dec(zeitsekunden);//runterzählen fehlend:= benoetigt - vorhanden; zeitstunden:= fehlend / prostunde; zeitsekunden:= round(zeitstunden * 3600);//und dann wieder auf festen wert setzen
Delphi-Quellcode:
nee, klappt auch nicht...
vorhanden:=vorhanden+round((zeitsekundenold-zeitsekunden)*prostunde/3600);
argghhh!!! erst decrementierst du die zeitsekunden und dann sagst du
Delphi-Quellcode:
ich mach das mal neu...
h:= zeitsekunden div (60 * 60);
zeitsekunden:= zeitsekunden - h*60*60; m:= zeitsekunden div 60; zeitsekunden:= zeitsekunden - m*60; s:= zeitsekunden; |
Re: Sekunden an einen Timer übergeben
also, ich hab das mal etwas anders gelöst, nebenbei noch ne fehler-abfrage gemacht, es sollte jetzt klappen:
Delphi-Quellcode:
und ich versteh immer noch nicht was das prog macht... :(
var
Form1: TForm1;//erst mal hab ich deine globalen variablen gelichtet vorhanden, prostunde, benoetigt:double; laufzeit:integer; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var h, m, s, sekunden:integer; fehlend:double; //dafür lokale... begin inc(laufzeit); //wie lange läuft es schon? vorhanden:=laufzeit*prostunde/3600; //wieviel is nach der zeit da fehlend:=benoetigt-vorhanden; //wieviel fehlt dann noch sekunden:=round((fehlend)/prostunde*3600);//soviel zeit fehlt noch h:= sekunden div (60 * 60); //deine berechnung sekunden:= sekunden - h*60*60; m:= sekunden div 60; sekunden:= sekunden - m*60; s:= sekunden; Edit4.Text:= 'h: '+inttostr(h)+' min: '+inttostr(m)+' sec: '+inttostr(s); end; procedure TForm1.Button1Click(Sender: TObject); begin //auf buttonklick try vorhanden:= strtofloat(Edit1.Text); //einlesen prostunde:= strtofloat(Edit2.Text); benoetigt:= strtofloat(Edit3.Text); Timer1.Enabled:=true; //timer enablen except //wenns fehler gibt (zahl flsch drin oder so) Application.MessageBox('Da Stimmt aber eine Zahl nicht...','Oops...'); end; end; |
Re: Sekunden an einen Timer übergeben
folge diesem Link und melde dich an, dann verstehst du was los ist!
![]() wenn dir das Spiel spaß macht komm zur BUC! wir sind zwar klein, aber wir spielen nur aus Spaß an der Freunde. Das Programm erleichtert dort die Planung der Baueinsätze! schwer zu erklären....probier es einfach aus! vielen vielen Dank nochmal! tavik |
Re: Sekunden an einen Timer übergeben
Hai Tavik,
auch wenn es mir nicht gesagt wird sehe ich das so das Du einen Countdown anzeigen möchtest? Warum dafür nicht mit der Systemzeit arbeiten? Hier mal mein Ansatz. Er benötigt: 1 x Timer 1 x Button 3 x Edit 2 x Label
Delphi-Quellcode:
var
stunden : Integer; minuten : Integer; sekunden : Integer; startzeit : TTime; countdown : TTime; procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := False; Timer1.Interval := 25; end; procedure TForm1.Button1Click(Sender: TObject); begin stunden := StrToInt (Edit1.Text); minuten := StrToInt (Edit2.Text); sekunden := StrToInt (Edit3.Text); countdown := EncodeTime (stunden,minuten,sekunden,0); startzeit := Now; Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption := TimeToStr (now); // Echzeit Label2.Caption := TimeToStr (countdown - (now-startzeit)); // Mein Countdown end; |
Re: Sekunden an einen Timer übergeben
Liste der Anhänge anzeigen (Anzahl: 1)
hi glkbkk
leider haben deine veränderungen auch einen nachteil! die variable benötigt hat keinen einfluss mehr auf den timer! er zählt nur runter wie lange gebraucht wird um die rohstoffe zusammenzusparen wenn nix da ist! gib mal ein: vorhanden: 30 pro stunde: 60 benoetigt: 30 der timer sollte jetzt null anzeigen! da ich genügend rohstoffe zusammenhab, aber leider fängt er bei einer halben stunde an! hast du vielleicht die rettende idee? gruss sascha |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 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