|
| Omregning fra hh:mm:ss til sekunder Fra : Henrik Jensen |
Dato : 06-06-01 00:30 |
|
Hej NG
Nedenstående kode giver mig lidt problemer:
Jeg har en mask box hvor man kan indtaste en tid i formatet h:mm:ss,
som så bliver omregnet til sekunder.
Men hvis man ikke taster alle tal ind, men kun eks.: 1:45:
og altså ingen sekunder, så går det galt!
Faktisk går det galt uanset om det er timer, minutter eller sekunder
der ikke bliver indtastet.
Kan nogen hjælpe?
Eller er der en smarter måde at omregne på?
-----------------------------
Private Sub maskHHmmss_LostFocus()
LengthTmp = maskHHmmss.Text
Timer = Mid(LengthTmp, 1, 1)
Minutter = Mid(LengthTmp, 2, 2)
Sekunder = Mid(LengthTmp, 4, 2)
If Timer > 9 Or Minutter > 59 Or Sekunder > 59 Then
If Timer > 9 Then
Timer = 9
End If
If Minutter > 59 Then
Minutter = 59
End If
If Sekunder > 59 Then
Sekunder = 59
End If
maskHHmmss.Text = Right(Str(Timer), 1) + Right(Str(Minutter), 2) +
Right(Str(Sekunder), 2)
End If
Tid = Val(Timer) * 3600 + Val(Minutter) * 60 + Val(Sekunder)
txtSec.Text = Tid
End Sub
-------------------------------------
--
Venlig Hilsen/Best Regards
Henrik
| |
Lars Kim Lund (06-06-2001)
| Kommentar Fra : Lars Kim Lund |
Dato : 06-06-01 01:05 |
|
Hej "Henrik Jensen" <henrik-jensen@big_NO_SPAM_foot.com>
>Kan nogen hjælpe?
>Eller er der en smarter måde at omregne på?
>
>-----------------------------
>Private Sub maskHHmmss_LostFocus()
>
>LengthTmp = maskHHmmss.Text
>
> Timer = Mid(LengthTmp, 1, 1)
> Minutter = Mid(LengthTmp, 2, 2)
> Sekunder = Mid(LengthTmp, 4, 2)
Dit problem er her. Du forudsætter at det rigtige står på nogle faste
positioner, det fungerer kun hvis du i dialog-boksen også tvinger folk
til at indtaste korrekt.
Jeg er for dårlig til VB til at give dig et eksempel (fatter egentlig
ikke hvad jeg laver i denne gruppe), men prøv følgende algoritme:
1. Split streng i tre, f.eks. TimeSplit = split(MyTime,":",-1,1)
2. Check antallet af elementer i array
3. Tildel h,m,s baseret på antallet af elementer og beslut dig for
hvordan du vil håndtere implicitte værdier. Ønsker du f.eks. at
1:20 skal opfattes som 1 minut og 20 sekunder eller 1 time og 20
min.?
HTH,
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Niels G (06-06-2001)
| Kommentar Fra : Niels G |
Dato : 06-06-01 09:25 |
|
Det kunne også løses ved at rette tre linje:
Timer = "0" & Mid$(LengthTmp, 1, 1)
Minutter = "0" & Mid$(LengthTmp, 2, 2)
Sekunder = "0" & Mid$(LengthTmp, 4, 2)
Mvh
Niels G.
"Henrik Jensen" <henrik-jensen@big_NO_SPAM_foot.com> wrote in message
news:ZXdT6.403$Uz1.16299@news.get2net.dk...
> Hej NG
>
> Nedenstående kode giver mig lidt problemer:
> Jeg har en mask box hvor man kan indtaste en tid i formatet h:mm:ss,
> som så bliver omregnet til sekunder.
>
> Men hvis man ikke taster alle tal ind, men kun eks.: 1:45:
> og altså ingen sekunder, så går det galt!
>
> Faktisk går det galt uanset om det er timer, minutter eller sekunder
> der ikke bliver indtastet.
>
> Kan nogen hjælpe?
> Eller er der en smarter måde at omregne på?
>
> -----------------------------
> Private Sub maskHHmmss_LostFocus()
>
> LengthTmp = maskHHmmss.Text
>
> Timer = Mid(LengthTmp, 1, 1)
> Minutter = Mid(LengthTmp, 2, 2)
> Sekunder = Mid(LengthTmp, 4, 2)
>
> If Timer > 9 Or Minutter > 59 Or Sekunder > 59 Then
> If Timer > 9 Then
> Timer = 9
> End If
> If Minutter > 59 Then
> Minutter = 59
> End If
> If Sekunder > 59 Then
> Sekunder = 59
> End If
> maskHHmmss.Text = Right(Str(Timer), 1) + Right(Str(Minutter), 2) +
> Right(Str(Sekunder), 2)
> End If
>
> Tid = Val(Timer) * 3600 + Val(Minutter) * 60 + Val(Sekunder)
> txtSec.Text = Tid
>
> End Sub
> -------------------------------------
>
> --
> Venlig Hilsen/Best Regards
>
> Henrik
>
>
| |
Bjarke Walling Peter~ (06-06-2001)
| Kommentar Fra : Bjarke Walling Peter~ |
Dato : 06-06-01 13:36 |
|
Henrik Jensen skrev:
> Hej NG
>
> Nedenstående kode giver mig lidt problemer:
> Jeg har en mask box hvor man kan indtaste en tid i formatet h:mm:ss,
> som så bliver omregnet til sekunder.
>
> Men hvis man ikke taster alle tal ind, men kun eks.: 1:45:
> og altså ingen sekunder, så går det galt!
>
> Faktisk går det galt uanset om det er timer, minutter eller sekunder
> der ikke bliver indtastet.
>
> Kan nogen hjælpe?
> Eller er der en smarter måde at omregne på?
>
> -----------------------------
> Private Sub maskHHmmss_LostFocus()
>
> LengthTmp = maskHHmmss.Text
Det kunne også løses på denne måde (med lidt "snyd"):
LengthTmp = maskHHmmss.Text & "00000"
.... så er du sikker på at strengen er lang nok - og det som bruger ikke
indtaster bliver bare nogle nuller.
Desuden tager det du har skrevet ikke højde for at brugeren taster koloner:
Timer = Mid(LengthTmp, 1, 1)
Minutter = Mid(LengthTmp, 2, 2)
Sekunder = Mid(LengthTmp, 4, 2)
.... hvis nu strengen LengthTmp indeholder "5:28:12", så giver det du har
skrevet følgende output:
Timer = "5"
Minutter = ":2"
Sekunder = "8:"
Men du kan jo også løse det med Split-funktionen som Lars skrev.
Foresten så ville det være godt at skrive følgende : (f.eks.)
If maskHHmmss.Text = "" Then
Msgbox "Du skal indtaste en tid!", vbOKOnly, "Fejl"
maskHHmmss.SetFocus
Exit Sub
End If
.... men man bestemmer jo selv hvor brugervenligt det skal være!
- Bjarke Walling Petersen
| |
Tomas Christiansen (07-06-2001)
| Kommentar Fra : Tomas Christiansen |
Dato : 07-06-01 00:50 |
|
Henrik Jensen skrev:
> Jeg har en mask box hvor man kan indtaste en tid i formatet h:mm:ss,
> som så bliver omregnet til sekunder.
> Faktisk går det galt uanset om det er timer, minutter eller sekunder
> der ikke bliver indtastet.
Hvordan ser din maske ud?
Jeg har prøvet med masken "#:##:##", og fået det til at virke ganske
strålende (se nedenfor).
> LengthTmp = maskHHmmss.Text
>
> Timer = Mid(LengthTmp, 1, 1)
> Minutter = Mid(LengthTmp, 2, 2)
> Sekunder = Mid(LengthTmp, 4, 2)
Hvis du i stedet bruger følgende:
Timer = NormaliserTal(LengthTmp, 1, 1)
Minutter = NormaliserTal(LengthTmp, 3, 2)
Sekunder = NormaliserTal(LengthTmp, 6, 2)
og indsætter funktionen:
Function NormaliserTal(ByVal sTalStreng As String, _
ByVal lStartPos As Long, ByVal lLængde As Long) As Long
Dim sWrk As String
sWrk = Replace(Mid(sTalStreng, lStartPos, lLængde), "_", "")
If Len(sWrk) > 0 Then
NormaliserTal = CLng(sWrk)
Else
NormaliserTal = 0
End If
End Function
så virker det helt fint hos mig.
Bemærk at jeg benytter mig af PromptInclude=True på MaskEdBox'en - ellers
ved jeg jo ikke hvor der er tastet noget, og hvor der ikke er.
Bemærk desuden at Replace funktionen først findes fra VB 6.0.
-------
Tomas
| |
|
|