» »

VB6 - ne zaključi proces programa - pomoč !!!

VB6 - ne zaključi proces programa - pomoč !!!

ge ::

Mali program (tri fome) velike težave ! Upam, da že gdo ima "zdravilo" za moje težave.

Torej, naredil sem en simpl program (VB6) ki za svoje delo uporablja 3 forme. V Sub Main() za še nezaprtih form uporabljam
Sub Form_QueryUnload in Pomoc.Hide, Avtor.Hide....
Vse lepo in prav, po kliku na X-izhod iz programa se avtomatično zaprejo vse forme in izbriše okno glavnega programa.
Ko pa pogledam v task manager vidim, da program še vedno deluje (10 štartov programa? 10 aktivnih procesov v TM !!! ) ?!?!
V čem je problem, oziroma kak pravilno rešiti problem ?
Nujno prosim za pomoč !!!
Ge

BigWhale ::

V Unloadu moras zapret ostale forme. Ampak ne z hide, ker hide jih samo skrije. Probaj.

ge ::

BigWhale; Tenx za nasvet.

Za "ziher" sem vstavil;

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Unload Pomoc
Set Pomoc = Nothing
Unload Avtor
Set Avtor = Nothing
Unload Test
Set Test = Nothing
Close
End Sub

Deluje !


Khm, usput imaš kakšne iskušnje z vstavljanjem progress bara v program ?

Npr v to proceduro bi vstavil progress bar za indikacijo dela;

Open odpri For Input As #1
Do
Input #1, vrstica
.
.
.
obdelava vrstic - samo branje in premetavanje matrik
.
.
Loop While Not EOF(1)
Close #1

Tenx za odgovor.
Ge

SunMoon ::

Ge, nisi točno navedel, kakšno funkcijo naj ProgressBar opravlja. Kot sem uspel razbrati iz tvojega besedila, bi morda rad, da ProgressBar prikazuje potek odpiranja celotne datoteke vrstico za vrstico.

Najlažji način je, če že poznaš število vseh vrstic v datoteki. ProgressBar za svoj potek uporablja procente (torej števila od 0 do
100). Tako bi tvoja koda izgledala takole:

------------------------------------------------------------
Private Sub mnuOpenFile_Click()
Dim trenutnavrstica As Integer

trenutnavrstica = 0

CD.ShowOpen

Open CD.FileName For Input As #1
Do While Not EOF(1)
Input #1, GetTextLine
trenutnavrstica = trenutnavrstica + 1
ProgressBar = (trenutnavrstica * 100) / število vseh vrstic
...
...

Loop
Close #1
End Sub
------------------------------------------------------------

ge ::

SunMoon, ja pravilno si ugotovil, rad bi uporoabil progress bar glede na premikanje po tekstovni datoteki . Seveda zmes je še eno par
izaračunov, premetavanja črk, ampak to bi zadostovalo.
Problem je edino ker v naprej ne vem velikost datotke. Obstaja funkcija za ugotovitev števila vrstic v datoteki (tekstovna) ali je pač
rešitev predhodno do-eof preštevanje ?
Ge

BigWhale ::

> Khm, usput imaš kakšne iskušnje z vstavljanjem progress bara v
> program ?

Khm, ne... Visual Basic se trudim cim prej pozabit... ;)

Stevilo vrstic bos moral presteti, zal. Tudi ce bi ze bila funkcija za to, bi tocno to naredila... ;)

Vesoljc ::

če delaš sz datotekami na splošno potem je to edina pot, če pa imaš svoje, specializirane datoteke, pa lahko število vrstic kar zapečeš notri, recimo v prvo vrstico. seveda ko v datoteko pišeš, moraš tudi to popraviti.
ampak ponavadi je while not eof kr najboljša varjanta...
Abnormal behavior of abnormal brain makes me normal...

Slide ::

Hmm maw me presenečate... Nuben ni reku da bi uporabu ukaz "End" namreč po mojih izkušnjah ta ukaz ugasne program... In nikakor ni možno da bi mew vsak form svoj proces v tasku, kokr se men dozdeva.. Itak pa če uporabljaš več forumov naenkrat pa raj uporabi MDI Form...

SunMoon, rad bi te samo popraviw, jz osebno bi dodal v zanko še ukaz DoEvents. Nism prepričan če bi se brez tega ukaza progress bar lepo osveževal...ker bi zanka 100% zasedla CPU.
forever 200 MPH ...

Zgodovina sprememb…

  • spremenil: Slide ()

SunMoon ::

Ge, vrstice poljubne datoteke lahko prešteješ tako, da najprej odpreš poljubno datoteko preko CommonDialog, program nato prebira vrstico za vrstico posebej, na ta način pa se število vrstic pri vsakem posameznem prebiranju vrstice poveča za +1. Ko program prebere vse vrstice, vrednost 'stevilovrstic' vsebuje število vseh vrstic v datoteki. Pri tem ni potrebno sprotno zapisovanje vrstic npr. v TextBox, dovolj je že tole:
-------------------------------------------------------------------------------
Private Sub LineCounter_Click()
Dim stevilovrstic As Integer

stevilovrstic = 0

On Error Resume Next

CD.ShowOpen

Open CD.FileName For Input As #1
Do While Not EOF(1)

Input #1, GetTextLine

stevilovrstic = stevilovrstic + 1

Loop
Close #1

End Sub
-------------------------------------------------------------------------------
(CD = CommonDialog)

Število vseh vrstic se torej nahaja v vrednosti 'stevilovrstic'.

Nato ponoviš postopek na podoben način.

BigWhale ::

> Nuben ni reku da bi uporabu ukaz "End" namreč po mojih izkušnjah ta
> ukaz ugasne program...


Si ti kdaj pokukal v MSDN? ;) No lej:


Note Executing the End statement unloads all forms and sets all object variables in your program to Nothing. However, this is a very abrupt way to terminate your program. None of your forms will get their QueryUnload, Unload, or Terminate events, and objects you've created will not get their Terminate events.


To je priblizno tako, kot ce bi med voznjo, za bremzanje uporabljal kandelabre... ;)

V Unload eventu moras prej vedno vse ostale forme spucat za sabo. Ce ne zarad drugega, pa zaradi tega, ker windows niso sloveli po nekih blazno dobrih memory managerjih... ;)

Slide ::

END dela čist lepo in prav... Sej vbistvu VB potem sam uporabi to funkcijo ko ti uporabiš al pa kličeš Unload evente... Itak pa predn daš END, daš prej kak msgbox k te vpraša če čš končat s programom... Unload se takrat izvede k ti prtisneš na "X" v zgornjem desnem kotu... Če čš pa nardif recimo File->Exit Menu, bi moral klicat Form1_Unload, tko pa sam End in puff, konc... ni bolšga, sej v Deplhiju je pa Close če se ne motim...
forever 200 MPH ...

BigWhale ::

Daj MSDN preberi, pa ne pusti, da te Linux user uci VB ;>

Slide ::

BigWhale ti zgleda da tega stavka ne razumeš...

"None of your forms will get their QueryUnload, Unload, or Terminate events, and objects you've created will not get their Terminate events."

Če uporabiš End, se samo ti eventi ne bojo izvedl... kr pa ni nujno da jih potrebuješ in uporabiš...
forever 200 MPH ...

Mavrik ::

Ne ti, objekti ki so se ustvarili pa. Pod objekte spadajo tudi forme ter ostale kontrole...
The truth is rarely pure and never simple.


Vredno ogleda ...

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

kopiranje iz enega fajla v drug??

Oddelek: Programiranje
131224 (984) Seth
»

Visual Basic 6 branje txt datoteke problem

Oddelek: Programiranje
51176 (1099) Red_Mamba
»

VB6 kako uporabiti

Oddelek: Programiranje
8985 (847) Area_51
»

Odpiranje dat.exe v VB

Oddelek: Programiranje
123006 (2799) webblod
»

Visual basic Progress bar

Oddelek: Programiranje
51573 (1506) Lunik

Več podobnih tem