[ SuDar407 @ 19.08.2010. 18:21 ] @
Polako ucim, radim na jednoj aplikaciji, i zeleo bih da napravim ogranicenje rada na 1 sat. Uspeo sam da "pokrenem" ogranicenje ali samo u sekundama.
Naime u label1 sam postavio da krene od 10 i sledecim kodom je to radilo.

Code:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Timer1.Interval = 100 'tajmer za demo verziju programa
        tajmer.Text -= 1
        If tajmer.Text = 0 Then
            Timer1.Stop()
            MessageBox.Show("Vi radite u DEMO verziji programa!", "DEMO VEZIJA", MessageBoxButtons.OK)
        End If
    End Sub


Sad, jurio sam po netu i nisam uspeo da nadjem cod, koji bi brojao zapis vremena 01:00:00 unazad (ovo bi meni bilo idealno resenje).
Palo mi je na pamet da ocitam u koje vreme je pokrenut program, dodam 1h i jednom if petljom resim problem (ovo je alternativno resenje). Medjutim, nisam znao kako da dodam tih 1h na 01:00:00 da bih dobio 02:00:00.
Zna li iko kako da resim ovaj proble?

Hvala i pozdrav!
[ sallle @ 19.08.2010. 20:26 ] @
mozes da koristis neki int. i da njega dekrementiras i pretvaras u odgovarajuci format.

a, mozes i koristis datetime, tako sto instanciras objekat strukture datetime i onda koristis metodu AddSeconds(-1)...

ono sto mislim da ne treba da radis je da proveravas .text property za uslov, vec proveravaj taj brojac ispod u tvojoj petlji.
a i uslov =0, zameni u <=0 (ako iz bilo kog razloga se preskoci 0, program ce nastaviti da radi...).

btw, ako vec pocinjes da ucis, mozda bolje da krenes sa c# zbog uslova na trzistu i aktuelnih trendova po pitanju VB vs C#
[ mmix @ 19.08.2010. 20:34 ] @
Nema potrebe da rucno radite posao sistemskih funkcija, instanciraj tajmer (winforms varijantu posto ona puca handler u GUI threadu) inicijalizuj ga da okine posle 3,600,000 mikrosekundi i u handleru zatvori aplikaciju uz mesagebox info.
[ unisoft @ 19.08.2010. 20:53 ] @
To je veoma lako resiti, a moze se resiti na mnogo nacina. Jedan od nacina je da u registru ili na disku kreiras faj koji ce pamtiti vrednost brojaca. Brojac postavis na 1s i u dogadjaj Tick tajmera postavis kod koji cita vrednost iz tekst fajla, vrednost pamti u promenljivu, tu vrednost uvecava za 1, uvecanu vrednost upisuje u isti teks fajl, a pre toga brise staru vrednost. Na pocetku ovog koda mora biti jedan IF THEN uslov koji ce proveravati da li promenljiva ima vrednost vecu od 3600s. Ako je ovaj uslov ispunjen onda se gasi program.

Malo bolji sistem zastite programa je da pomocu API-ja procitas ime racunara. U tvom programu napravis promenljivu tipa Array koja ce pamtiti listu svih dozvoljenih racunara na kojima moze da se pokrene. Ovo je prvi stepen zaste. Ako ovo prodje onda program treba da prveri da li na odredjenoj lokaciji postoji fajl koji je zaduzen da pamti vrednost brojaca. Ako ne postoji onda ga treba napraviti u suprotnom proctati vrednost i uvecati je za 1. Pre ovog uvecavanja IF THEN isptuje da li je procitana vrednost veca od 3600 i ako jeste gasi program pomocu END.

Toliko od mene. Pozdrav.


[Ovu poruku je menjao unisoft dana 19.08.2010. u 22:04 GMT+1]
[ SuDar407 @ 19.08.2010. 21:26 ] @
Hvala vam na odgovorima i utrosenom vremenu. Medjutim bojim se da nisam bas sve najbolje shvatio.
Da li postoji neki bezbolniji nacin da dobijem sledece odbrojavanje:
01:00:00
00:59:59
00:59:58
.
.
.
00:00:01
00:00:00?

Zapravo, postoji li funkcija koja od zadatog vremena 01:00:00 moze da oduzima (ili dodaje) sekundu?
[ Sapphire @ 19.08.2010. 22:31 ] @
Gledaj, vjerovatno ti treba da ti aplikacija traje jedan sat, nevezano za broj paljenja - samo da bude 1h u totalu. Za to ti treba neki file kao cookie, ništa posebno. Prosurfaj malo, pogledaj kako se radi sa file-ovima.

Za taj razmak od 1h, koristi TimeSpan, možeš ovako:

Code:

DateTime now = DateTime.Now;
DateTime last = ... <- ovdje je ono vrijeme iz file-a

TimeSpan useDuration = now - last;

if (useDuration >= TimeSpan.FromHours(1))
{
     MessageBox.Show("Ajd mrs van, plati prvo, nema dzabe");
     Application.Exit();
}


Ovo staviš u timer handler, koji okidas recimo svakih par sekundi (skoro potpuno nevažno). Kad se program gasi regularno, i ako je ta demo verzija, onda save-aj koliko je dugo korisnik koristio program. Imati ćeš TimeSpan objekt, koristi ToString() te Parse() metode.
[ Boris B. @ 19.08.2010. 22:55 ] @
To su ti nasi programeri, ne znaju ni tajmer da koristi a 'oce pare za full verziju

Salu na stranu, ako ti sve ovo do sada nije pomoglo tesko ce ti bilo sta pomoci osim konkretnog koda, ali to ti ne resava problem na duge staze. Posto delujes OK (hvala na vremenu i sve to ), moj topli savet je da uzmes neku knjigu o VB.Net (papirnu ili PDF), odvojis jedno 10ak dana i precesljas je celu, veruj mi isplatice se. Videces kako sve to sto si naucio zbrda/zdola lepo pasuje u jednu vecu celinu. Kao kad slusas engleski 5 godina i onda odes na kratak kurs, sve sedne na svoje mesto U suprotnom imaces sutra novi problem, i sve tako.
[ unisoft @ 19.08.2010. 22:56 ] @
Druze (Sapphire) izvini ali u ovoj temi razgovaramo VB jezikom a ne C :). Podrzavam tvoje misljenje Boris B. Lepo uzmi i citaj pa ako zapnes mi cemo ti pomoci. A ne neko da ti radi od nule.

Napravio sam ti jedno od resenaja na brzaka. Pogledaj pa mi reci je li to ono sto tebi treba.

[ Sapphire @ 19.08.2010. 23:03 ] @
Code:


Dim now As DateTime = DateTime.Now
Dim last As DateTime = ... <- ovdje je ono vrijeme iz file-a
Dim useDuration As TimeSpan = now - last

If useDuration >= TimeSpan.FromHours(1) Then
    MessageBox.Show("Ajd mrs van, plati prvo, nema dzabe")
    Application.[Exit]()
End If



[ SuDar407 @ 20.08.2010. 15:48 ] @
Razumeli smo se jedino oko toga da sam totalni pocetnik! :) Ne radim na programu koji cu prodavati, pa sad zelim da iskoristim vase znanje i dobru volju da mi pomognete.
Trebalo je da u programu napravim brojac, koji ce da kad odbroji na primer 01:15:30 da se ugasi (svaki put kad se pokrene aplikacija, on broji od 01:15:30 ili koliko mu se vec zada).
Razbijao sam glavu i dosao do sledece ideje, koja radi:
Code:

tajmersekunda.Text -= 1
        If tajmersekunda.Text <= 0 Then
            If tajmersat.Text > 0 Then
                If tajmerminut.Text > 0 Then
                    tajmersekunda.Text = "59"
                    tajmerminut.Text -= 1
                Else
                    tajmerminut.Text = "59"
                    tajmersekunda.Text = "59"
                    tajmersat.Text -= 1
                    If tajmersat.Text <= 0 Then
                        tajmersat.Text = "00"
                    End If
                End If
            Else
                If tajmerminut.Text > 0 Then
                    tajmersekunda.Text = "59"
                    tajmerminut.Text -= 1
                    If tajmerminut.Text <= 0 Then
                        tajmerminut.Text = "00"
                    End If
                Else
                    If tajmersekunda.Text <= 0 Then
                        tajmersekunda.Text = "00"
                        Timer1.Stop()
                        MessageBox.Show("Vi radite u DEMO verziji programa!", "DEMO VEZIJA", MessageBoxButtons.OK)
                    End If
                End If
            End If
        End If


O ideji da se negde u fajlu cuva vreme koriscenja aplikacije i kada ono istekne da se ona vise ne moze koristiti, nisam ni razmisljao. Bacicu se na tu ideju koliko odma'!
Jos jednom hvala svima!
[ unisoft @ 20.08.2010. 17:56 ] @
Pogledaj moj prilog (Prikačeni fajlovi - Project1.exe - 24k) uz predhodnu poruku. Program sacuvaj i pokreni (fajl je EXE).


[ SuDar407 @ 20.08.2010. 18:12 ] @
Pogledao sam program. Nije to ono sto mi treba. Ovaj kod koji sam napisao mi vrsi posao, ali bih hteo da cujem vase misljenje.
[ SuDar407 @ 20.08.2010. 19:24 ] @
Da ne otvaram drugu temu, zanima me da li moze u VB-u da se otvori baza.mdb sa svaki put drugacije lokacije? Sta da trazim po netu, kljucne reci?
[ Sapphire @ 20.08.2010. 20:18 ] @
Pa pokazali smo ti kako, i to da koristiš TimeSpan objekte, a ti na to ručno zbrajaš / oduzimaš sekunde :) Ako želiš mišljenje, eto ga, to je ...
[ SuDar407 @ 20.08.2010. 20:42 ] @
Da, ali sobzirom da sam pocetnik TimeSpan objekte nisam savladao, da upisujem u fajl vreme itd...
Dobro bi mi dosao neki primer.... :) Salim se!
[ Sapphire @ 20.08.2010. 21:45 ] @
Razumiješ li principe OOP-a, te po mogućnosti operator overloading-a ? Kad oduzimaš / sabiraš DateTime objekte kao rezultata dobivaš TimeSpan (prevedeno - vremenski razmak, trajanje). Google is your friend. :)
[ SuDar407 @ 21.08.2010. 23:56 ] @
Evo malo sam radio, i naisao na problem koji nikako ne mogu da resim.

Code:

Public Class Form1
    Dim VremenskiRazmak As Date
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim StaroVreme As Date = Date.Now
        Dim NovoVreme As Date = VremenskiRazmak
        Dim Diff As TimeSpan = NovoVreme.Subtract(StaroVreme)
        VremenskiRazmak = FormatDateTime(Me.DateTimePicker1.Text & " " & Me.DateTimePicker2.Text, DateFormat.GeneralDate)
        Me.Label3.Text = "Dana " & Diff.Days & " | Sati " & Diff.Hours & " : " & Diff.Minutes & " : " & Diff.Seconds
    End Sub
End Class


Ovaj kod sam napisao da mi oduzme dva datuma. Medjutim program mi izbacuje nelogicne rezultate.
Takodje mi se isto desavalo i sa kodom koji je poslao Sapphire. Gde gresim???
Pozzz!

Evo okacio sam ceo kod. Na internetu sam gledao i to bi trebalo da je to....

[Ovu poruku je menjao SuDar407 dana 22.08.2010. u 01:07 GMT+1]
[ bojan21 @ 22.08.2010. 03:23 ] @
Ne razumem sta si hteo da postignes ovim delom koda pre prikaza rezultata:

- StaroVreme postavljas na trenutno vreme??? Zasto?
- kopiras VremenskiRazmak (kakav je ovo razmak?? nisi mu dodelio nikakvu vrednost pri pokretanju aplikacije) u NovoVreme??? Zasto?
- oduzimas StaroVreme od NovogVremena, ok, hoces da dobijes razliku, ali ovo nije ono sto pretpostavljam da hoces (da oduzmes trenutno vreme i datum
od izabranog vremena i datuma)

Ako mozes da das vise informacija, sta si tacno hteo da postignes ovim kodom, cisto da bude jasnije?

Preuzmi ovaj primer aplikacije: SampleApplication
Da li ti tako nesto treba?

Pozdrav
[ SuDar407 @ 22.08.2010. 14:24 ] @
Shvatio sam i nasao gresku!
Hvala! :)