# Shkenca > Informatikë dhe Internet > Arti i programimit >  VB - Problem me oren ne VB6.0

## GinoTheGodFather

Do doja ndihmen e ndonjerit per problemin tim.
Supozojme qe ne Form_Load, Text1.Text merr vleren: Text1.Text = Format(Time). Une dua qe nese nje Text2.Text ti jap vlera numerike, pas shtypjes se nje butoni ne Text3.Text te mblidhet vlera e Text1 me Text2. Me poshte po jap nje shembull:

Supozojme se Text1 merr vleren 17:55:25 (ora momentalisht). Text2 i jap vleren 2 (2 ore). Dhe pasi te shtypet nje Command1 psh, ne Text3.Text te dali 19:55:25 (dmth te behet mbledhia. tani text2.text mund te kete vlere oret psh, por mund te kete dhe minutat, dhe sekondat.) Di ndonjeri ndonje menyre. Gjithe te mirat

----------


## Borix

OK, po bej supozimet e meposhtme.

Se pari, ne kutizen Text2 ti do te futesh vetem nje number pozitiv te plote, i cili perfaqeson vetem numrin e oreve per t'iu shtuar kohes ne kutizen Text1. Supozojme gjithashtu, se koha jepet ne formatin 24 ore.

Kodi ne Form_Load:


```
Private Sub Form_Load()
' Inicializojme kutizen Text1 me kohen aktuale:
   Text1.Text = Time
End Sub
```

Kodi per eventin Click te butonit Command1:


```
Private Sub Command1_Click()
   Dim hr As Integer, sum As Integer
   
   ' merr vleren e ores nga kutiza Text1.Text:
   hr = DatePart("h", CDate(Text1.Text))
   
   ' Shtoji hr vleren e kutizes Text2 duke marre modulin ne 24 te shumes:
   sum = (hr + CInt(Text2.Text)) Mod 24
   
   ' Paraqit oren e re:
   Text3.Text = sum & ":" & DatePart("n", CDate(Text1.Text)) & ":" & DatePart("s", CDate(Text1.Text))
   
End Sub
```

Pra, fale funksionit te VB DatePart, une marr vetem oren nga koha e dhene duke perdorur masken "h". CDate eshte operator kasti ne VB. Me tej, marr vleren (numer i plote - integer) ne kutizen Text2 dhe ia shtoj vleres ne variablin hr. Pershembull, nese ora eshte 8 e mengjezit dhe vlera ne kutizen Text2 eshte 24, atehere ora e re eshte 24+8=32. Per kete arsye, marrim modulin-24 te 32, i cili eshte i barabarte me mbetjen pas pjesetimit te plote te 32 nga 24: 32/24 = 0 mbetja 8. Pra ora e re qe do te shfaqet ne kutizen Text3 eshte 8 : min :sek , ku min (minuta) dhe sek (sekonda) jane te paprekura dhe te njejta me ato ne Text1.

Shenim: Tek pjesa e fundit e kodit per Command1_Click, funksioni DatePart permban nje maske "n". Kjo e fundit perfaqeson minutat. Nuk perdoret maska "m" sepse do te perfaqesonte muajt.

Besoj se kam qene i qarte. Por, nese ne kutizen Text2 te kerkohet te fusesh edhe minuta edhe sekonda ne formatin *hh: mm: ss*, atehere nje manipulim stringjesh duke perdorur serish algjeber modulare do ta zgjidhte problemin:



```
Private Sub Command1_Click()
   Dim hr As Integer, min as integer, sek as integer, temp as integer
   
   ' merr vleren e kohes nga kutiza Text1.Text:
   hr = 0 : min = 0 : sek = 0
   hr = DatePart("h", CDate(Text1.Text))
   min = DatePart("n", CDate(Text1.Text))
   sek = DatePart("s", CDate(Text1.Text))

   ' Shto vlerat nje nga nje:
   sek = (sek + Cint(DatePart("s", Cdate(Text2.Text))))   ' shto sekondat 
   if sek>59 then
      temp = sek mod 60
      min = min + sek\60   ' shenim: '\' tregon pjesetim te plote (integer)
      sek = temp
   end if

   min = (min + Cint(DatePart("n", Cdate(Text2.Text)))) Mod 60   ' shto minutat
   if min>59 then
     temp = min mod 60
     hr = hr + min\60
     min = temp
   end if
   
   ' Paraqit oren e re:
   Text3.Text = hr & ":" & min & ":" & sek
   
End Sub
```

Normalisht, qe te sigurohesh se ne Text2 perdoruesi ka dhene oren me minuta dhe me sekonda, atehere merr nje funksion Boolean dhe kontrollo sa karaktere ":" permban stringu. Pra, nese permban dy, atehere te eshte dhene ora ne formen hh: mm: ss, nese permban nje, atehere bej marreveshjen qe te eshte dhene hh: mm, nese nuk te eshte dhene asnje, atehere konsideroje si ore.

----------


## Borix

Harrova dicka te fundit, manipulimin e vleres hr:

Pas end-if te fundit ne kodin e mesiperm, shto kete kod:


```
 hr = (hr + CInt(DatePart("h", CDate(Text2.Text)))) Mod 24
```

.

Po te jap dhe nje shembull:

Kutiza Text1:


```
13:20:40
```

Kutiza Text2:


```
10:50:30
```

Mbledhja e tyre vijon ne kete menyre:

Variabli *sek*, fillimisht zero, do te marre vleren e sekondave te kohes ne kutizen Text1: sek=40. Me tej, kesaj vlere do t'i shtohen sekondat ne kohen e kutizes Text2: sek = 40+ 30 = 70. Meqenese 70>59, atehere variabli temp do te kete vleren 70 mod 60 ose temp=10. Por, variablit min duhet t'i shtojme aq minuta sa nda dalin nga mbledhja e sekondave, ne rastin tone min = 70\60 = 1. Ne fund, variabli sek merr vleren e temp, pra 10. 

Ndjekim te njejten procedure per minutat dhe oret, dhe shuma perfundimtare eshte:


```
24:11:10
```

Ne baze te modifikimit tone te mesiperm, ora do te paraqitej si:


```
0:11:10
```

...

Ne kodin e mesiperm, kam shtuar gabimisht 'Mod 60'  tek seksioni i minutave. Ajo duhet hequr. Gjithesesi, me poshte eshte edhe nje here kodi i modifikuar:


```
Private Sub Command1_Click()
      Dim hr As Integer, min As Integer, sek As Integer, temp As Integer
   
   ' merr vleren e kohes nga kutiza Text1.Text:
   hr = 0: min = 0: sek = 0
   hr = DatePart("h", CDate(Text1.Text))
   min = DatePart("n", CDate(Text1.Text))
   sek = DatePart("s", CDate(Text1.Text))

   ' Shto vlerat nje nga nje:
   sek = (sek + CInt(DatePart("s", CDate(Text2.Text))))   ' shto sekondat
   If sek > 59 Then
      temp = sek Mod 60
      min = min + sek \ 60 ' shenim: '\' tregon pjesetim te plote (integer)
      sek = temp
   End If

   min = (min + CInt(DatePart("n", CDate(Text2.Text))))   ' shto minutat
   If min > 59 Then
     temp = min Mod 60
     hr = hr + min \ 60
     min = temp
   End If
   
   hr = (hr + CInt(DatePart("h", CDate(Text2.Text)))) Mod 24
   
   ' Paraqit oren e re:
   Text3.Text = hr & ":" & min & ":" & sek
End Sub
```

----------


## GinoTheGodFather

Shume faleminderit nga ana jote Borix. Tani do filloj ti shikoj nga fillimi dhe te shof si do ecin gjerat. Dhe nje here te falenderoj shume. Gjithe te mirat.

----------


## GinoTheGodFather

Borix ishit shume i sakte ne saktesine e kodit tuaj, ju falenderoj shume. Desha te di dhe dicka te fundit. Oren ne kompjuter e kam te tipit HH : mm : ss. Kur bej veprime me kodin e mesiperm, Text1.Text shfaqet si 00:01:35 le te themi, Text2.Text i jap vleren 2 (ore) ndersa shuma e tyre paraqitet me nje tjeter format ore: 2:1:35 (dmth nga ana matematikore veprimet jane ne rregull ndersa nga menyra se si shfaqet, mungon nje zero). Ke ndonje ide ku mund te qendroje problemi? Gjithe te mirat dhe shume faleminderit per interesimin tend.

----------


## Agron_ca

' Paraqit oren e re:
   Text3.Text = Format(hr, "00") & ":" & Format(min, "00") & ":" & Format(sek, "00")

Per prezentimin e dates dhe ores (e jo per te llogaritur) me mire eshte te marresh formatin e zgjedhur nga Regional Settings per shfrytezuesin e aktiv.

----------


## Borix

E ka shpjeguar drejt Agroni, jane klecka te funksionit Format...

Edhe dicka: Kur ne Text2 ti fut nje numer, bie fjala numrin 2, me mendimin se po fut numrin e oreve per te shtuar, kodi nuk ka ndonje logjike eksplicite per ta kuptuar qe eshte ore. Prandaj, merr funksionin FORMAT, dhe para se te shtosh kohet, formato kutizen Text2 si me poshte:



```
   If count = 0 Then   ' nuk ka ':'
      Text2.Text = Text2.Text & ":00:00"
   ElseIf count = 1 Then ' u gjet nje ':'
      Text2.Text = Format(Text2.Text, "hh:mm") & ":00"
   Else
      Text2.Text = Format(Text2.Text, "hh:mm:ss")
   End If
```

Nese ti fut vleren '2' ne kutizen Text2, atehere pjesa e pare e IF-it te mesiperm do ta konsideroje si ore. Nese ti fut '2:1', atehere pjesa tjeter e IF-it do ta ktheje ne '02:01:00' fale funksionit FORMAT. Po te fusesh '2:2:2', kjo do te konsiderohet si '02:02:02'. Ne kete menyre, ti shmang cdo lloj keqkuptimi dhe gabimi ne percaktimin e kohes. Edhe nje here tjeter kodi i tere per eventin Command1_Click:



```
Private Sub Command1_Click()
   Dim hr As Integer, min As Integer, sek As Integer, temp As Integer
   Dim count As Integer, i As Integer, strTemp As String
   
   count = 0: i = 1
   strTemp = Text2.Text
   
   While (i < Len(strTemp) And i <> 0)
      i = InStr(i, Text2.Text, ":")
      Text2.Text = Mid$(Text2.Text, i + 1, Len(Text2.Text) - i)
      count = count + 1
   Wend
   
   Text2.Text = strTemp
   
   If count = 0 Then   ' nuk ka ':'
      Text2.Text = Text2.Text & ":00:00"
   ElseIf count = 1 Then ' u gjet nje ':'
      Text2.Text = Format(Text2.Text, "hh:mm") & ":00"
   Else
      Text2.Text = Format(Text2.Text, "hh:mm:ss")
   End If
   
   ' merr vleren e kohes nga kutiza Text1.Text:
   hr = 0: min = 0: sek = 0
   hr = DatePart("h", CDate(Text1.Text))
   min = DatePart("n", CDate(Text1.Text))
   sek = DatePart("s", CDate(Text1.Text))

   ' Shto vlerat nje nga nje:
   sek = (sek + CInt(DatePart("s", CDate(Text2.Text))))   ' shto sekondat
   If sek > 59 Then
      temp = sek Mod 60
      min = min + sek \ 60 ' shenim: '\' tregon pjesetim te plote (integer)
      sek = temp
   End If

   min = (min + CInt(DatePart("n", CDate(Text2.Text))))   ' shto minutat
   If min > 59 Then
     temp = min Mod 60
     hr = hr + min \ 60
     min = temp
   End If
   
   hr = (hr + CInt(DatePart("h", CDate(Text2.Text)))) Mod 24
   
   ' Paraqit oren e re:
   Text3.Text = Format(hr, "00") & ":" & Format(min, "00") & ":" & Format(sek, "00")
End Sub
```

----------


## GinoTheGodFather

Ishe shume i sakte. Edhe nje here te falenderoj sinqerisht. Gjithe te mirat.  :buzeqeshje:

----------


## hot_prinz

Pershendetje,

ja edhe nje menyre tjeter, e detyrueshme eshte qe koha shtese te shenohet si 2:12:34 (oret : minutat : sekondat), ne te kunderten pasojne gabime. 



Dim t1

Private Sub Form_Load()
    t1 = Time
    Text1.Text = t1
    Text2.Text = ""
    Text3.Text = ""
End Sub

Private Sub Command1_Click()
    Dim tArray() As String
        tArray = Split(Text2.Text, ":")
        Text3.Text = Format$(DateAdd("h", CInt(tArray(0)), t1), "hh:nn:ss")
        Text3.Text = Format$(DateAdd("n", CInt(tArray(1)), CDate(Text3.Text)), "hh:nn:ss")
        Text3.Text = Format$(DateAdd("s", CInt(tArray(2)), CDate(Text3.Text)), "hh:nn:ss")
End Sub

----------

