Srodne teme
07.01.2002. ExitProc i unload dll-a
30.08.2002. Unload forme
26.05.2007. ADO-Recordset
28.08.2003. Unload
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Unload problem VB - ?!?

[es] :: Visual Basic 6 :: Unload problem VB - ?!?

Strane: 1 2

[ Pregleda: 7411 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dzigilibonglica
NS

Član broj: 200040
Poruke: 294



+17 Profil

icon Re: Unload problem VB - ?!?26.05.2009. u 11:50 - pre 180 meseci
@stefanpn:


Ne znam bas da koristim citate, pa cu ovako narativno da odgovorim na tvoje postove (uz duzno postovanje, i bez uvreda):

1) Prvo nisi me dobro razumeo. Pokusaj da shvatis sta sam pokusao da kazem. Tacno je da nije bitno na kojoj je formi kontejner za sliku, velicina fajla je ista, ali kada bi:

Na form1
i na form2 uradili nesto ovako:

na nekoj kontroli Picture1 ili Image1 na obe forme, property Picture iz "Design time" odnbosno iz toolbox-a podesili na neki JPG ili BMP....i slicno, onda bi iskompajlirani EXE bio veci (pod uslovom da se property popunjava u Design time, a ne u toku izvrsavanja programa preko nekog spoljnog resursa-slike u RunTime), pa zato mnogi (a ja skoro uvek) popakujem sve to u jednu formu, a u drugu kojoj treba ista ta slika za neku kontrolu ili samu formu, stavim prazne kotrole bez prethodno ucitane vrednosti za svojstvo Picture (vidimo samo isprekidan pravougaonik(imagebox) ili praznu kontrolu(picturebox) ili transparentnu formu(ako slika sluzi za pozadinu forme), pa u toku izvrsavanja iz kod-a podesim da se popuni iz neke druge forme.

U suprotnom kada bi jednu sliku ucitali u vise formi u vreme pakovanja kontrola/design time, tada se exe uvecava za svaki put kada u toku dizajniranja popunimo property picture, za onoliko koliko je velicina slike u fajl sistemu (u slucaju BMP fajla, ili za ekvivalentnu velicinu drugog fajla kada bi se prekonvertovao u BMP). Ne znam da li sam dovoljno NeZbunjujuce objasnio....


Znaci :

Form1,
Form2 imaju svaki PictureBox kontrolu.

Scenario 1:

U obe forme podesimo PictureBox.Picture=App.Path & "\NekaSlika.bmp" u toku dizajniranja preko ...(browse dugmenceta)
Rezultat=>Veci exe

Scenario 2:

U form1 podesimo PictureBox.Picture=App.Path & "\NekaSlika.bmp", dok u form2 ne podesimo, ostavimo praznu kontrolu PictureBox,pa u Form_Load ubacimo sledece:

PictureBox.Picture=Form1.PictureBox.Picture.
Rezultat=>manji exe

2) Dobro si rekao da END skace na kraj programa.

Vidis, Service packovi za VB su izmedju ostalog ispravljali i taj bug, jer bi trebalo da bude tako kada uradis END, da se isprazne svi resursi, ali nije tako. Ispravljali su to, ali tek pojavom Win2000, pa posle WinXP-a, taj problem je nestao... , odnosno sistem je preuzeo punu kontrolu nad memorijom, pa nestankom nekog programa iz aktivnih procesa oslobodi sve sto je taj program bio zauzeo.

Znaci u tom slucaju je tacno to sto ti kazes da END isprazni i resurse, ali ne daj Boze da je WinME ili Win 95/98.., onda dolazi do curenja memorije
(Provereno!)

E sada, ko zna na kakvom ce se sistemu kotrljati program koji se pise... XP-nema problema, WinMe i pre njega -Ima problema.

E sada, posto znam za mnogo nelogicnosti koje u VB-u postoje, ako zelite, ajde da otvorimo neku temu koji su problemi kod VB koji ne bi trebali da postoje i ako je verovati Microsoft-u, ne postoje.... ali ipak postoje....

Ja sam uvek za.

Primer(listbox posle 15000 hiljada zapisa vraca list1.listindex=Nenormalna vrednost ili

F8 iz reda u red (dubugovanje):

if 1<3 then
a=true
else
a=false
endif

pa vrati false....

Ali odoh ja puno u offtopic.....

Sorry moderatori.



 
Odgovor na temu

stefanpn
Total anonymous
Programer

Član broj: 172809
Poruke: 509
79.101.231.*



+1 Profil

icon Re: Unload problem VB - ?!?26.05.2009. u 13:42 - pre 180 meseci
Stavljanje svih resursa na jednu formu je nepotrebno zauzimanje memorije. Zašto bi sve resurse držao u memoriji, kad možeš da imaš samo potrebne resurse. Kada ti zatreba jedan resurs sa te forme, ti moraš učitati celu formu sa svim resursima.

Tvoj "Scenario" I i II će ti prijaviti Type mismatch grešku. PictureBox.Picture property je long tipa (pokazivač na sliku) a ne string.

End - ne skače bukvalno na "kraj programa" već poziva ExitProcess/TerminateProcess iz kernela.

Problemi mogu da nastanu ukoliko pre izlazka iz programa nisu prekinute konekcije ka bazama ili je neki API poziv u izvršenju (ali to samo pri pokretanju iz IDE-a, ne i u Runtime-u), i to može doći do "pucanja" samog IDE-a, ništa više.

Ovo će ti vratiti False, ono sigurno neće:
Code:


    Dim a As Boolean

    If 1 < 3 Then
        a = True
    Else
        a = False
    End If

    a = Not a     ' <---------- Vrlo bitna stavka :)


Ili to postoji bug u nekoj tako elementarnoj stvari kao što je If-Then-Else grananje!?

Da ne raspravljamo o tome da listbox kontrola vraća "nenormalne" vrednosti, isprobaj:
Code:

Private Sub Form_Load()
    
    Dim t As Integer

    For t = 0 To 15099
       
       List1.AddItem CStr(t)
       
    Next t
    
End Sub

Private Sub List1_Click()
    
    MsgBox CStr(List1.ListIndex)
    
End Sub


Da li su ti "bug"-ovi dokumentovani negde, ako jesu, voleo bih to da vidim. Ali ne iz nekih š32dž8 izvora nego od strane MS-a ili nekog validnog izvora.
 
Odgovor na temu

dzigilibonglica
NS

Član broj: 200040
Poruke: 294



+17 Profil

icon Re: Unload problem VB - ?!?01.06.2009. u 10:15 - pre 180 meseci
Bio sam malo odsutan neko vreme, ali evo da ne bi ja razglabao i dokazivao se da je to tako i nije tako, otpakujte ovaj rar, pa probajte....




Citat:
stefanpn:
Tvoj "Scenario" I i II će ti prijaviti Type mismatch grešku. PictureBox.Picture property je long tipa (pokazivač na sliku) a ne string.


Primer2 i Primer3, Pogledaj, stvarno radi. kakav mismatch?! Pokretabilan program 100%.
Inace kada se postavi slika u svaku formu pa se napravi exe, on po pokretanju programa se ceo ucita u mem.

Al ajde.

Moja greska kod liste-Preko 30k pravi probleme sa ListIndex (Primer1 u raru), a ne 15K

A bagovi....
Bagova ima i to poodosta.

Ako hocemo da ih dokumentujemo, ajde da lepo postavimo temu.
Ne skupljam ja to sa nekih "izvora", vec kroz rad se otkriju neke stvari, a nekada ih nazalost!, otkrije klijent....

Zbog toga bi bilo dobro da pokrenemo temu da ih sami otkrivamo a ne klijenti
Toliko o tome







Prikačeni fajlovi
 
Odgovor na temu

stefanpn
Total anonymous
Programer

Član broj: 172809
Poruke: 509
93.86.113.*



+1 Profil

icon Re: Unload problem VB - ?!?01.06.2009. u 12:33 - pre 180 meseci
Lepo ti otvori Object Browser (Pritiskom na F2, u VB IDE-u), upiši "listbox" i klikni na Find. Odaberi property "listindex" i pogledaj koji je to tip promenljive.

U VB6 se opseg vrednosti za promenljive tipa Integer (Signed 16-bitni broj) kreće od -32768 do 32767, e sad pošto je u samoj kontroli to Unsigned Integer on ima opseg od 0 do 65535, pa se umesto da broji preko 32767, Sign bit postavlja na 1 i on počinje da daje broji u nazad (-1 - težina ostalih 15 bitova).

Ali to nije bug, jer je ta kontrola dokumentovana, i u dokumentaciji piše da su:

Listbox.ListCount Integer
Listbox.List(Integer)
Listbox.ListIndex Integer

Ne znam šta si očekivao!?




Ovo sa ovim slikama ne vredi ni raspravljati, izvršna datoteka će biti najmanje dužine ako pri učitavanju svake forme i slika učita sa diska.
Ako se radi po tvojoj logici, pri prvom učitavanju slike iz frmSlike, ta forma će se učitati i ostati load-ovana u memoriji - bez potrebe. Što znači da ovakav rad nije najoptimalniji.

Koristi:

Code:


Private Sub Form_Load()

    Image1.Picture = LoadPicture(App.Path & "\Slika.Bmp")

End Sub



A što će biti ako nema ove "sledeće linije", već umesto nje stavim END:

Code:

Private Sub Form_Unload(Cancel As Integer)
'NAPOMENA: frmSlike se sam load-ovao jer se linkuju ostale forme na njega da uzmu sliku:
'          ako nema ove sledece linije da ugasi frmSlike nece se zavrsiti program. Probajte da je izbrisete i pokrenite
    End
End Sub




Edit: Greška pri kucanju ispravljena.



[Ovu poruku je menjao stefanpn dana 01.06.2009. u 19:31 GMT+1]
 
Odgovor na temu

dzigilibonglica
NS

Član broj: 200040
Poruke: 294



+17 Profil

icon Re: Unload problem VB - ?!?01.06.2009. u 13:54 - pre 180 meseci
Probacu da ubacim End pa cu videti.

Naravno na XP-u.... :)

A zasto stavim u formu? Pa moram, nekada jednostavno napisem nesto sto daam da se slobodno distribuira netom, pa ne bih da mi neki tamo klinavc od 10 godina menja logo (tipa: GenijalSoft)

Ali sve ovo je zbog jedne cinjenice, coveku se nije prekinuo prog kada je trebao.

Ako koristi princip sa slikama kao ja, to je mogao da bude jedan razlog, ako je koristio end, na starijim Winovima ne radi kako treba jer stariji winovi ne upravljaju memorijom kao ovi noviji.

Vidis, nikada mi nije palo na pamet da gledam property ListBox kontrole......

Moja greska

Pozdrav!


 
Odgovor na temu

pura moca
pura moca

Član broj: 240171
Poruke: 4
93.87.191.*



Profil

icon Re: Unload problem VB - ?!?17.11.2009. u 17:47 - pre 174 meseci
dim frm as form
for each frm in forms
unload frm
next
On_Error_Resume
 
Odgovor na temu

[es] :: Visual Basic 6 :: Unload problem VB - ?!?

Strane: 1 2

[ Pregleda: 7411 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Srodne teme
07.01.2002. ExitProc i unload dll-a
30.08.2002. Unload forme
26.05.2007. ADO-Recordset
28.08.2003. Unload
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.