AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Sekunden, Minuten, Stunden Rechner

Ein Thema von FG53 · begonnen am 9. Mär 2020 · letzter Beitrag vom 11. Mär 2020
Antwort Antwort
Seite 2 von 2     12
Alt 9. Mär 2020, 18:16     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.336 Beiträge
 
Delphi 12 Athens
 
#2

AW: Sekunden, Minuten, Stunden Rechner

  Alt 9. Mär 2020, 14:19
Oder ganz bling im OnExit der 3 Edits,
erstmal alles zusammenrechnen,
dann wieder "korrekt" die Stungen/Minuten/Sekunden trennen,
und das Ergebnis in die 3 Edits zurückschreiben.

OnExit statt OnChange, da bei Eingabe "falsche" Werte auftreten dürfen, damit es nicht immer sofort bei jedem Tastendruck knallt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: Sekunden, Minuten, Stunden Rechner

  Alt 9. Mär 2020, 14:20
Noch besser wäre, du sorgst dafür, dass die Eingabefelder für Minuten und Sekunden den Wert 59 niemals überschreiten.
Wieso, genau das will er doch nicht! Ich glaube es geht um Anwenderkomfort, statt um Programmiererkomfort. Und selbst wenn er es wollte: Ist Software nicht dafür da, lästige Denkarbeit zu vermeiden?

Zur Aufgabe:
Sollen auch Dezimalzahlen eintragbar sein?
Eine Zahl durch 60 teilen oder mit 60 zu multiplizieren, ist aber nicht das Problem oder?
Ich meine, was würdest Du selbst machen, wenn Du eines der Felder befüllen müsstest, nachdem ein Anwender dort eine Zahl eingetragen hat.
Gruß, Jo
  Mit Zitat antworten Zitat
FG53

Registriert seit: 29. Mai 2015
14 Beiträge
 
#4

AW: Sekunden, Minuten, Stunden Rechner

  Alt 9. Mär 2020, 14:23
Zur Aufgabe:
Sollen auch Dezimalzahlen eintragbar sein?
Eine Zahl durch 60 teilen oder mit 60 zu multiplizieren, ist aber nicht das Problem oder?
Ich meine, was würdest Du selbst machen, wenn Du eines der Felder befüllen müsstest, nachdem ein Anwender dort eine Zahl eingetragen hat.
Dezimalzahlen sind kein muss. Die meisten entragungen werden wahrscheinlich nur ganze Zahlen sein.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Sekunden, Minuten, Stunden Rechner

  Alt 10. Mär 2020, 08:50
Naja was gibts bei der Beschreibung des TE's noch groß zu interpretieren:

Zitat:
Beispiel: Nutzer gibt in edit1 '1' Stunde ein, edit2 '60' Minuten wird automatisch gerechnet und edit3 '3600' sekunden wird automatisch gerechnet.
(Was aber auch sein muss ist das wenn der nutzer '3600' Sekunden eingibt das der rechner dann die anderen 2 edit felder befüllt.)
Das dies nun nicht Sinnvoll ist (da im Prinzip der Wert von Edit1 = Edit2 = Edit3), ist eine andere Sache.

Ich gehe davon aus:
Edit1 umbenennen in StundenE , ggf. einstellen, das nur Zahlen eingegeben werden können (NumbersOnly = True)
Edit2 umbenennen in MinutenE , ggf. einstellen, das nur Zahlen eingegeben werden können (NumbersOnly = True)
Edit3 umbenennen in SekundenE, ggf. einstellen, das nur Zahlen eingegeben werden können (NumbersOnly = True)
Die Summe aller Editfelder ergibt die GESAMTZEIT, nicht wie der TE angegeben hat überall die Gleiche Zeit.
Also bei Eingabe 3600 Sekunden Stünde nur eine "1" bei Stunde, der Rest wäre 0.

Für alle die Gleiche Funktion beim OnExit hinterlegen (geht sicher auch kürzer/einfacher ist aber evtl. für einen Anfänger am leichtesten zu verstehen):

Delphi-Quellcode:
var
  iSekunden, iMinuten, iStunden : Integer;
begin
  iSekunden := 0;
  iMinuten := 0;
  iStunden := 0;
  case Sender.Name of
    SekundenE : iSekunden := strtoint(SekundenE.Text); //Hilfsvariable aus Editfeld füllen
    MinutenE : iMinuten := strtoint(MinutenE.Text); //Hilfsvariable aus Editfeld füllen
    StundenE : iStunden := strtoint(StundenE.Text); //Hilfsvariable aus Editfeld füllen
    else : Exit;
  end;

  if iSekunden > 59 then //Da 60 Sekunden = 1 Minute, dies umrechnen
  begin
    iMinuten := iMinuten + (iSekunden DIV 60); //die Minuten, die sich aus den Sekunden ergeben hinzuaddieren
    iSekunden := iSekunden MOD 60; //die korrekten Sekunden berechnen
  end;

  if iMinuten > 59 then
  begin
    iStunden := iStunden + (iMinuten DIV 60); //die Stunden, die sich aus den Minuten ergeben hinzuaddieren
    iMinuten := iMinuten MOD 60; //die korrekten Minuten berechnen
  end;

  SekundenE.Text := inttostr(iSekunden); //Hilfsvariablen ins Editfeld zurückspielen
  MinutenE.Text := inttostr(iMinuten); //Hilfsvariablen ins Editfeld zurückspielen
  StundenE.Text := inttostr(iStunden); //Hilfsvariablen ins Editfeld zurückspielen
  iSecGes := (strtoint(StundenE.Text) * 60 + strtoint(MinutenE.Text)) * 60 + strtoint(SekundenE.Text); //Gesamtsekunden (Globale Variable)
end;
Achtung ungetestet. Programmiert in der Theorie^^
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (11. Mär 2020 um 08:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.810 Beiträge
 
Delphi 12 Athens
 
#6

AW: Sekunden, Minuten, Stunden Rechner

  Alt 10. Mär 2020, 10:05

"Summe" ist jetzt aber neu, und eine weitere Interpretation der Anforderungsspezifikation.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Sekunden, Minuten, Stunden Rechner

  Alt 10. Mär 2020, 10:18

"Summe" ist jetzt aber neu, und eine weitere Interpretation der Anforderungsspezifikation.

Sherlock
Jaein^^

Er möchte z.B. 3600 Sekunden eingeben und das entsprechend in die Editfelder umgesetzt haben.
Ein Anzeige, die quasi 3mal das Gleiche aussagt (3600 Sec. = 60 Min. = 1 Std.), macht in Anbetracht dessen, da er es in Sekunden "weitergeben" will nicht viel Sinn.

Besser ist, das der Benutzer eingibt er möchte (um beim Beispiel zu bleiben) 3600 Sekunden haben.
Diese werden dann korrekt umgerechnet und angezeigt, so das der Benutzer dann weiß, das seine 3600 Sekunden einer Stunde entsprechen.
Die Sekunden lassen sich ja dann weiterhin problemlos berechnen (s.o.).

Fraglich ist für mich nur, ob die alten Werte beibehalten werden sollen (von den nicht geänderten Feldern) oder jedesmal eine komplette neu Berechnung erfolgen soll.
Ich werde meinen Post dahingehend mal ändern, denn seine Beschreibung sagt eher eine komplette neu Berechnung aus.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
FG53

Registriert seit: 29. Mai 2015
14 Beiträge
 
#8

AW: Sekunden, Minuten, Stunden Rechner

  Alt 10. Mär 2020, 10:24
Danke nochmal euch allen für dir Antworten. Das ding ist es soll weder eine bestimmte Uhrzeit ausgerechnet werden. Noch soll eine Zeitangabe auf 3 Edit Felder aufgeteilt werden. Die Frühlingrolle hat recht es soll für Runterfahren des Pc benutzt werden. Im CMD braucht man eine Sekunden angabe. Allerdings soll der Benutzer die Freiheit haben statt Sekunden '12' Stunden angeben zu können und ich brauche dann die Zahl in Sekunden für CMD.

Aktuell bin ich nach einer langen Programmier Pause wieder am Start und scheitere teilweise an den kleinsten dingen. Ich kriege es nicht mal mehr hin das ich ein editfeld mit 60 multipliziere und in einem anderen editfeld ausgebe. Tipps??
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Sekunden, Minuten, Stunden Rechner

  Alt 10. Mär 2020, 10:43
Danke nochmal euch allen für dir Antworten. Das ding ist es soll weder eine bestimmte Uhrzeit ausgerechnet werden. Noch soll eine Zeitangabe auf 3 Edit Felder aufgeteilt werden. Die Frühlingrolle hat recht es soll für Runterfahren des Pc benutzt werden. Im CMD braucht man eine Sekunden angabe. Allerdings soll der Benutzer die Freiheit haben statt Sekunden '12' Stunden angeben zu können und ich brauche dann die Zahl in Sekunden für CMD.

Aktuell bin ich nach einer langen Programmier Pause wieder am Start und scheitere teilweise an den kleinsten dingen. Ich kriege es nicht mal mehr hin das ich ein editfeld mit 60 multipliziere und in einem anderen editfeld ausgebe. Tipps??
Zum Editfeld rechnen:
Edit2.text := inttostr(strtoint(Edit1.text) * 60);

Zu deiner "Anforderung": Es kann dem Benutzer doch egal sein, wieviele Sekunden das nachher tatsächlich sind.
Lass ihn eine (sinnvolle) Zeitangabe machen (z.B. 12 Stunden) und es wird im Hintergrund umgerechnet und umgesetzt.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.336 Beiträge
 
Delphi 12 Athens
 
#10

AW: Sekunden, Minuten, Stunden Rechner

  Alt 10. Mär 2020, 11:47
mal ein kleiner Exkurs
Delphi-Quellcode:
// nur auftrennen
// es muß überall am Ende mindestens eine Ziffer drinstehen
// MaskEdit.EditMask = '09:009:009;1; '
i := StrToInt(Copy(MaskEdit.Text, 1, 2)) * 60 * 60
   + StrToInt(Copy(MaskEdit.Text, 4, 3)) * 60
   + StrToInt(Copy(MaskEdit.Text, 8, 3));

// und nun inkl. Fehl-/Leereingaben
// Felder können leer bleiben und Zahlen müssen nicht am Ende stehen (hier mit '0'+Trim)
// MaskEdit.EditMask = '##:###:###;1; '
i := StrToInt('0' + Trim(Copy(MaskEdit.Text, 1, 2))) * 60 * 60
   + StrToInt('0' + Trim(Copy(MaskEdit.Text, 4, 3))) * 60
   + StrToInt('0' + Trim(Copy(MaskEdit.Text, 8, 3)));

// und nochmal in "modern" ... k.A. warum es kein Append/Add gibtm für das '0'+
i := ('0' + MaskEdit.Text.Substring(0, 2).Trim).ToInteger * 60 * 60
   + ('0' + MaskEdit.Text.Substring(3, 3).Trim).ToInteger * 60
   + ('0' + MaskEdit.Text.Substring(7, 3).Trim).ToInteger;

// und wieder zusammen
MaskEdit.Text := Format('%2d:%3d:%3d', [i div 60 div 60, i div 60 mod 60, i mod 60]);
Delphi-Quellcode:
// und wieder zusammen, falls es Einzeledits waren, ohne vorher Copy/Substring
Edit1.Text := IntToStr(i div 60 div 60);
Edit2.Text := IntToStr(i div 60 mod 60);
Edit3.Text := IntToStr(i mod 60);

// lol
Edit1.Text := (i div 60 div 60).ToString;
Edit2.Text := (i div 60 mod 60).ToString;
Edit3.Text := (i mod 60).ToString;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (10. Mär 2020 um 11:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:39 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