» »

[VB6] Program Odštevalnik - verjetno preprosta rešitev ampak jest je ne najdem

[VB6] Program Odštevalnik - verjetno preprosta rešitev ampak jest je ne najdem

«
1
2

sladkor ::

Najprej LP vsem, je moj prvi post.
OK, začel sem mal igrat s programiranjem, Visual Basic 6.0 (vem da je to kao jezik za pussye, ampak se mi zdi še najbolj razumljiv & user-friendly). Pregledu sem forum in dal skoz 2 video tutoriala (Micro$ in nek www.seangreasly.com; praktično identična), pa ni mel še nihče podobnega problema. In to je:

Naredu sem en mali programchic, ki mu vpišeš minute in on te po preteku tega časa opozori da je konc z msgBox-om. Do zdaj je blo med odštevanjem viden samo napis "Odštevam", rad bi pa da bi kazal kok minut je še do konca. For-Next ali Do Loop ne prideta v poštev ker ne iterira v intervalu ki ga jest hočem (1min). Da bo mal bol razumljivo, je tuki 'izvorna koda':)

Private Sub cmdExit_Click() 'izhod
MsgBox "Hvala da ste uporabljali moj program!"
End
End Sub

Private Sub cmdStart_Click() 'gumb začni odštevanje
If txtCas.Text = "" Then
MsgBox "Prosimo vpišite željeni čas"
Else
tmrMain.Interval = txtCas.Text
lblStatus1.Visible = True
lblStatus2.Visible = True
tmrMain.Enabled = True
tmrClock.Enabled = True
lblCounter.Caption = txtCas.Text
lblCounter.Visible = True
End If
End Sub

Private Sub cmdStop_Click() 'gumb ustavi odštevanje
tmrMain.Enabled = False
tmrClock.Enabled = False
lblStatus.Visible = False
lblCounter.Visible = False
End Sub

Private Sub tmrClock_Timer()
lblCounter.Caption = txtCas.Text - 1
End Sub

Private Sub tmrMain_Timer()
tmrMain.Enabled = False
tmrClock.Enabled = False
lblStatus1.Visible = False
lblStatus2.Visible = True
lblCounter.Visible = False
MsgBox "Čas je potekel"
End Sub


Mal komentarja: v txtCas napises čas v minutah in če polje ni prazno začne odštevat glede na tmrMain. Večina ostale solate je prikazovanje in skrivanje napisov in ugašanje in prižiganje tajmerjev.

Kaj ne zmorem? V predzadnjem subu je zapisano da naj odšteje vpisani željeni čas za 1, vsako minuto (oz. cikel tmrClock). To se dejansko tud zgodi, ampak samo enkrat. Kakor vem naj bi se to dogajalo pa nastavljenih intervalih dokler je tmrClock vklopljen. Zakaj se ne??

demoness ::

Zmeraj odštevaš od istega števila - txtCas.Text, ki pa se ne spreminja. Zato je tudi rezultat zmeraj isti. Ali v tmrClock_Timer spreminjaj tudi to, ali pa deklariraj eno novo spremenljivko, ji ob kliku na začetek odštevanja priredi txtCas.Text in v tmrClock_Timer odštevaj od nje in jo tudi prikazuj.
Don't you want to die, walk beside me evermore,
Don't you feel alive, like you never felt before...?

BigWhale ::

Dobili smo novo strokovnjakinjo za VB! Woohoo! ;>

Jap, v kaksna gorja nas prisilijo delodajalci... ;)

Slide ::

sladkor kje si slišu da je VB za pussies?? Halo tist k ti je to reku nima pojma u pojmu...
forever 200 MPH ...

BigWhale ::

Jaz si to upam rect ;>

Ziga Dolhar ::

Kaj nista MS Word in Excel narejena v VBju?
https://dolhar.si/

OwcA ::

Dvomim, bolj bi stavil na C/C++.
Otroška radovednost - gonilo napredka.

Ziga Dolhar ::

Owca: to sem zasledil v Jokerjevem članku o program[er]skih jezikih.

(Ja, tudi jaz sem bil začuden ...)
https://dolhar.si/

OwcA ::

Tole zveni bolj kot mit. Vsaj Google ne najde nič pametnega, vsi pišejo samo, kako je VB pripraven (namenjen) interakciji med različnimi Office programi in podobno.
Otroška radovednost - gonilo napredka.

darkolord ::

Collecting data from file: c:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE
Definitions found: 1191
Analyzing...

72.6% (.DLL) Win32 Dynamic Link Library (generic) (10604/46/2)
13.7% (.EXE) Generic Executable Win/DOS Executable (2002/3)

Tole je C/C++ najverjetneje

Zgodovina sprememb…

neoto ::

Sladkor:
1. za odševanje moraš uporabiti timer z nižjim intervalom ali pa uporabit api klic gettickcount (poglej v api viewer za celotno deklaracijo) in zanko z doevents.
2. če uporabiš odštevanje v sekundah, moraš vneseno vrednost pomnožit s 60

npr. kaj takega:
celo kodo lahko daš v form objekt

Private Declare Function GetTickCount Lib "kernel32" () As Long

Sub Odstevaj(casVMinutah As Single, izpis As Label)
Dim temp As Long
Dim prekini As Boolean
Dim cas As Long
Dim razlika As Long


temp = GetTickCount
prekini = False

Do Until prekini = True
DoEvents

If GetTickCount - temp >= 1000 Then 'Vsako sekundo
cas = cas + 1

razlika = casVMinutah * 60 - cas

izpis.Caption = Int(razlika / 60) & ":" & Format(Int(razlika Mod 60), "00")

If razlika = 0 Then prekini = True

temp = GetTickCount
End If
Loop
End Sub

Ko pa hočeš uporabit timer, pa daš na form en label (Label1), pa kličeš:
Odstevaj 10, Label1
MsgBox "Konec!"


Drugače pa če začenjaš s programiranjem, si rajš mal več časa vzem pa se c++ nauči. Ker res je, da je vb enostaven, je pa počasen ko hudič.

darkolord ::

je pa počasen ko hudič

Če ne računaš praštevil ali kaj podobnega, ni (pa tudi tam se da precej hitro nardit)

neoto ::

darklord: Verjemi mi, da je. Preizkusi hitrost izvajanja zank v vb-ju ali pa javi,c++, in ostalih. 10-20x razlika v času za isto kodo!

darkolord ::

Daš en primer?

Koda se itak prevede v native, tako da razen če ne delaš osnovnih napak (uporabljaš variante, narobe primerjaš stringe, itd) je primerljivo hitro...

neoto ::

ni problem:
poskusi kaj takega:

dim a as long
for x=1 to 10000
for y=1 to 10000
a=x+y
next y
next x

pa podobno v c-ju

long a=0;
for (long x=0;x< 10000;x++)
{
for (long y=0;y< 10000;y++)
{
a=x+y;
}
}

upam da sem v c-ju prav napisu, drugač pa sej veš kaj mislim, pa sam probi

neoto ::

pa to je tak poenostavljen primer. Mogoče je, da c compiler sploh ne skompajla kode, ker vidi, da spremenljivke sploh ne uporabljaš potem, ampak tudi če bi jo, je razlika zelo opazna.

darkolord ::

Itak.. "osnovna" napaka...

Če dodaš še Dim x as long, y as long so malo drugačni rezultati...

Test1 je moja koda, test2 pa tvoja

Test1|0,415116|0,410587|0,462186|0,441364|0,715366
Test2|14,927981|14,904604|15,521111|15,223007|15,797127

37x hitrejše :D

neoto ::

hvala za informacijo, tisto sem pa res pozabil...

neoto ::

pa še neki: si poskusil tudi v c-ju?

darkolord ::

Ne še... sem pa zdej še nekej pogruntal... tole je z vklopljenimi optimizacijami

Test1|0,00001|0,000003|0,000002|0,000001|0,000002
Test2|6,454822|6,245644|6,363553|6,240146|6,664983

:D:D:D:D:D

neoto ::

te optimizacije pa ne upoštevajo kode, na katero se v nadaljevanju ne sklicuješ. Če bi potem še a nekje uporabil, bi bila pa malce drugačna situacija.

darkolord ::

Če vklopiš optimizacije v VBju izklopiš samo nekaj različnih preverjanj (če to izklopiš in ne paziš, hitro prepišeš napačen del memorije :D)

No ampak vseeno, če bi primerjali tole skompajlano kodo s tisto, ki jo proizvede C, glede teh zank ne bi bilo ne vem kakšnih razlik...

OwcA ::

darko: sam bi težko bolje pokazal zakaj je VB zanič. Prazna koda bi morala stati 0. :P
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

neoto ::

je pa tako: boljš je to znat kot pa nič... sem začel v qbasicu, nadaljevel na visual basicu... :D zadnje čase pa spoznavanje drugih jezikov ni problem

darkolord ::

Owca: a tvoj priljubljeni programski jezik pa APIje kliče, brez da bi porabil kaj časa za to?

OwcA ::

Prrogramski jezik pri tem nima nič, le prevajalnik in knjižnice.
... je pa po tragično, da ljudje tako divje branijo svoj prav, da zagrabijo prav vsako provokacijo. ;)

Takšen test je povsem nesmiselen. Če že, primerjajmo recimo množenje dveh 3x3 matrik.
Otroška radovednost - gonilo napredka.

darkolord ::

Itak da je nesmiselen... jaz sem samo odgovoril na tisto trditev zgoraj, kajti vseeno stvari niso glih takšne...

Množenje matrik? Lahko probamo :D

OwcA ::

V retrospektivi je 3x3 verjetno premalo, recimo raje 1000x1000. >:D
Otroška radovednost - gonilo napredka.

Slide ::

Še neki ne smete pozabit ko ste se šli koliko časa se vrtita tisti dve zanki... Namreč tip procesorja... Jz, sam pr seb nism mogu vrjet, k sm naredu eno res ekstremno dolgo zanko, tm recimo za i=100000000 in je Intel P4 2.4GHz popušiv pred AMD Athlon 1.333.
Namreč AMD proc je hitrej pršu čez zanko, kot pa Intel CPU... Jz nism mogu verjet k sm to vidu... Tko da zgleda je zlo pomembna arhitektura proca... Sepravi da je velikra razlika AMD vs INTEL, v računanju spremenlljivk tipa LONG...

Na ta način so skalibrirani špili, kolk časa gre čez eno zanko in potem nastavi neke parametre, se spomnite Gorilaz v QBASIC-u. Ena zanka in po defaultu je tm nekje do 10.000, dans k so proci hitrejši gre hitr čez zanko in vrne 0 in potem nekje naprej v kodi deli z 0 in vrne napako Devision by 0. Podobno napako sm zasledu pri inštalaciji SBLive driverjev :D Klasična napaka, povečat je treba zanko, tako da se ne zgodi da bo delil z 0. To čist sam tko kot zanimivost...8-)
forever 200 MPH ...

sladkor ::

OK, najprej hvala za odgovore, vidm da je bla res ena začetniška napaka. Ob priliki popravm in nardim verzijo programa 2.0 (5000 sit + poštnina za popravek:). Pa še to: vidm da je nekoga zavedu moj nick: žal sm kr moškega spola.

Glede bol ali manj pičk*stih jezikov: hitrost ni pol tok pomembna kot se zdi. Glavni problem je dopovedat procesorju kaj bi dejansko rad. Ker večina ljudi ni hudih poznavalcev kodiranja se zatakne prav tuki. Primer: asistent na faxu je uporabu nek hud algoritem za neko napredno ekstrapolacijo (miljavžnt izhodnih in vhodnih podatkov--->rad bi enačbo(ali več njih) ki to korelira). Program je spisal v javi in potem šel na dopust za !1teden! medtem ko je mašinca mlela. Priznal je, da bi v C/++ to šlo verjetno precej hiterje, ampak ker ga on pač ne pozna tolk v dušo... Ne me narobe razumet, konkretno C je definitivno standard za programiranje namenskega železja (mikrokontrolerji, moduli vseh sort), če se nočeš pogovajat direktno s hardwerom, zato je definitivno moja naslednja stopnica (vsaj osnove). Ampak dokler ne bo razvojnega okolja, ki bi uporabljal neko vsem znano kodo (npr. slovenščina, po možnosti ljubljansko narečje:) bo vedno potreba pa Basic programih vseh vrst.

Nerdor ::

S odgovorm se strijam. Zdej pa malo offtopic, da odgovorim na nekatere stvari kar so nekateri spraševali ..

Od kje vam, ideja, da je VB samo eden in edini jezik!? Od kje!=?
Enkrat za vselej: VB ima različne verzije jezika, v različnih komponentah. Kot prvo, oba Word in Excel imata vgrajen (interni) skriptni jezik VBA (Visual Basic for Applications). Je nekakšen "batch jezik" za Office programe. Z njim lahko "upravljate" cel program iz zbirke Offica.
Potem imamo ASP 3, ki je ubistvu VB prirejen za delo na Server Side IIS. Potem imamo VBS (Visual Basic Script), ki je "batch jezik" za operacijski sistem Windows. Ja skripte delate v njem lahko!!

Potem je tu VB v Visual Studiu 6, ki je večnameski jezik, usmerjen bolj v izzdelavo programov, ki imajo back-end podprt z bazo, bodisi Access ali MS SQL 2k ali My SQL preko MyODBC driverja, ki je viden v Control Panel-u pod "ODBC"ikono. Ni pa nujno, saj lahko programira bilo kaj drugega. Razen DirectX, se neda direktno s VB6.

Potem je tu, PRVI IN PRAVI VEČNAMESKI VB imenovan VB.Net za platformo .Net! TO pa je že moderen (OOP) jezik, ki je CEL usmerjen v objektni model, spremenjivke SE morajo prej definirati, preden se jim priredi vrednost in tako naprej.. (da se direktno v DirectX dostopat )

C++ JE NEPRIMEREN za začetnika!! O tem NI GOVORA, da bi se ga učil!! Ker bo nekaj krepkih let porabil, preden, ga bo dodobra spoznal. C++ PREVEČ PONUJA programerjem, ker pomeni, da živ bog ne more več prebirat za vami, kaj ste hoteli napisati!! Razredni modeli, ala MFC, ATL so WAY komplicirani in zahtevajo PREVELIKO koncentracijo z delom s samim sistemom, kot da bi se programer ukvarjal s samim problemom.
C#, VB.Net pa sta OKLEŠČENA, kar je DOBRO!! VB6 je OKLEŠČEN kar je DOBRO!! VB6 hitrost je ZELO hitra, samo, da niso problemi s knjižnicami!! Močno priporočam!! Nisem ŠE srečal VB6 programa, ki bi bil "počasen"!! a-a :D
In prosim, ne postajte, ker ni smiselno, sploh dodajat kaj. Človek je na pravi poti! Ko bo spoznal VB do obisti, naj POTEM poizkuša in se igra s C++, da vidi to plat medalje! NIČ PREJ!! TO je pošten in premiišljen odgovor, glede jezikov od MS pod MS Windows platformo, da se razumemo! :)

PS: VB6 je poznal Edit&Continue. To se vrača v Visual studiu 2005 :)

Zgodovina sprememb…

  • spremenil: Nerdor ()

OwcA ::

Ta tvoja OKLEŠČENOST je VPRAŠLJIVA, ker te ne nauči pretirano lepega programiranja, hkrati pa je jezik še vedno precej občutljiv, kar je darko s svojimi optimizacijami lepo pokazal.

Niti ne pomeni, da če jezik posilijo z nevem čem vse, potem avtomatično postane VEČNAMENSKI. Zgodovina nas uči, da so tovrstni podvigi večinoma precejšna packarija, tako v smislu implementacije, kot uporabe.

VB (in vse ostale sorodnike) je enostavno POVOZIL ČAS. Žal. Zanj enostavno ni prostora (niše), še posebaj glede na to, da ima povsem samosvojo sintakso.

P.S. ko govoriš o "hitri hitrosti" jezika za katerega sam priznavaš, da je namenjen "usmerjen bolj v izzdelavo programov, ki imajo back-end podprt z bazo", poveš zelo veliko. ;)
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

darkolord ::

OwcA:

Vseeno pa ne moreš dat vseh programov (recimo takih ki služijo povezavi z bazo in takih, ki množijo 10x10 matrike) v isti koš... Nenazadnje poznamo ravno zaradi tega kopico raznih jezikov (nekateri probajo bit vsenamenski, nekateri so pač samo za določene stvari) in to je tudi eden od razlogov, da VB še vedno ostaja tako zelo popularen...

64202 ::

It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
-- Edsger W. Dijkstra

:)

neoto ::

:D To bi morala biti izjava tedna...

BigWhale ::

64202:

S tem se delno strinjam. Eni smo zaceli z basicom (C64, ZX81, kaj ces) ampak smo bili pripravljeni poslusati tistet, ki so rekli, da je basic crap. V kakrsnikoli obliki... :P

Gundolf ::

Hehe, Dijkstra je bil model ja.

OwcA ::

Vseeno pa ne moreš dat vseh programov (recimo takih ki služijo povezavi z bazo in takih, ki množijo 10x10 matrike) v isti koš... Nenazadnje poznamo ravno zaradi tega kopico raznih jezikov (nekateri probajo bit vsenamenski, nekateri so pač samo za določene stvari) in to je tudi eden od razlogov, da VB še vedno ostaja tako zelo popularen.

Se strinjam.
Ampak hkrati bi rad poudaril, da ni smiselno govoriti o hitrosti jezika pri vsakem opravilu. Dobro napisan VB program je verjetno res lahko hiter pri delu z bazami, ampak to predvsem na račun knjižnic (ki so napisane v bog ve čem) in poznavanja omejitev jezika (dvomim, da bo recimo program v katerem prebereš celoten recordset naenkrat v polje in potem obdeluješ hiter -- to je bedast primer priznam ;)).
Otroška radovednost - gonilo napredka.

64202 ::

Saj jaz sem tudi z BASIC-om zacel. Samo sem potem na C presaltal, kar je bil (upam:) dovolj velik protistrup.

Nerdor ::

KAj bo prej C# ali VB na Linuxu. Odgovor: Gambas in KBasic :D Torej, tudi v svetu Linuxa je precej doteran VB. C# pa zardi "vpetosti" v .Net Framework, zardi nepopolne implementacije Mono in GnuDot.Net, ni še pripravljen, kot VB. Oba omenjena VB-ja nista med seboj kompartibilna in ja NE tečejo pod .Net-om ampak pod Qt-jem native binary. 8-O Tako da .. toliko o temu, kakšen je ta grdi grdi VB.

PS: Edit & Continue bo na voljo v VS.Net 2005 samo za VB in ne za C# :P

OwcA ::

Obskurnih jezikov je na tone za vsak sistem, raj pokaži, kaj in koliko je s tem narejeno.
Otroška radovednost - gonilo napredka.

DaDila ::

Ce pustis ob strani hitrost. Cesa se v VB 6.0 ne da naredit, kar se v C++ da? (Z uporabo API-jev v VB seveda). Se pa strinjam, da je VB zelo primeren za izdelavo aplikacij, ki imajo neko bazo za sabo. Stari Navision je bil recimo narejen v VB 6.0, novi v .NET-u. Za ucenje je VB prav prijeten, dober nadomestek za Logo 8-)

OwcA ::

Cesa se v VB 6.0 ne da naredit, kar se v C++ da? (Z uporabo API-jev v VB seveda)

Že teorija izračunljivosti ti zagotavlja, da vse, zato je to bedasto vprašanje.
Otroška radovednost - gonilo napredka.

64202 ::

(ups, nisem dobro prebral posta:).
--

> Ce pustis ob strani hitrost. Cesa se v VB 6.0 ne da naredit, kar se v C++ da? (Z uporabo API-jev v VB seveda).

VB ima zelo klavrne abstrakcije proti C++. To je sicer subjektivno, ampak v VB se veliko stvari ne da lepo sprogramirati.

Zgodovina sprememb…

  • spremenilo: 64202 ()

DaDila ::

OwcA: Vsak prevajalnik, ki zna delat z NAND ukazom, zna izracunati vse. Jaz pa nisem spraseval po izracunljivosti(sem nekako mislil, da bo to implicitno razvidno). V VB 6.0 brez uporabe API funkcij ne mores klicati sistemskih funkcij operacijskega sistema, torej pri takem VB dosti funkcionalnosti odpade.

OwcA ::

Pravzaprav sploh ne vem kaj hočeš povedati, najprej praviš z API-ji, sedaj brez.

Pri katerem (višjem) jeziku pa to lahko sotriš brez knjižnic? Vlačiti le-te v rapravo o splošni uporabnosti jezikov je precej vprašljivo početje. Precej bolj na mestu je recimo kar pravi 64202, vprašanje flaksibilnosti oziroma elegance rešitev.
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

64202 ::

Lahko bi naredil hardverski interpreter VB-ja. Potem bi bil VB se bolj sistemski jezik, kot je C v unixih in winsih. Saj ne, da bi si to res zelel :D.

Nerdor ::

Glede tistih Api-jev :D , LOL, seveda je mišljen Win32 API. Ideja je taka. Sicer sem preskočil/prespal vlak, ko je folk programiral v VB6 :)), vendar IDEJA: če ti dane komponente v VS ponujajo premalo, lahko kličeš Win32 API metode, tako kot bi programiral v C-ju, samo, da je sintaksa VB :D . Nisem siguren, da je to 100% res, samo tale knjiga prvi Win32 API in VB6 da je možno.
100% sem pa prepričan, da je možno izvesti (direktne (p/invoke) klice metod Win32 API v VB.Net, ko ti .Net okolje ponuja "premalo" opcij. Linkov klicanja native code Win32 API iz .Net jezikov je pa malo morje, sam mičkan po googlat pa je.. :)

Gundolf ::

Vedno znova me preseneča, zakaj bi si kdo sploh želel pisati v basicu ...>:D

darkolord ::

Gundolf: ker je preprost?

vendar IDEJA

Ta IDEJA je že leta in leta ZELO v uporabi
«
1
2


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

visual basic 2008 express edition

Oddelek: Programiranje
221806 (1233) sel
»

Visual Basic.NET - za začetnika ?

Oddelek: Programiranje
304761 (3880) mHook
»

Najhitrejši programski jezik? (strani: 1 2 )

Oddelek: Programiranje
757701 (5521) Senitel
»

VB in kk dobit Ip od račnalnika

Oddelek: Programiranje
81201 (1035) alesrosina
»

API+VB

Oddelek: Programiranje
262086 (1790) webblod

Več podobnih tem