Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kolekcije (klase koje imaju metode kolekcija)

[es] :: Visual Basic 6 :: Kolekcije (klase koje imaju metode kolekcija)

[ Pregleda: 2468 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nessa
Nebojša
Programer
Beograd

Član broj: 10010
Poruke: 60
*.static.sbb.co.yu.



Profil

icon Kolekcije (klase koje imaju metode kolekcija)06.07.2007. u 16:04 - pre 203 meseci
Da bi neka klasa funkcionisala kao kolekcija tj. da bi objekat te klase imao metode Add, Count, Clear, Item, Remove
potrebno je napraviti osnovnu klasu (npr. IKorisnik) i klasu koja ce 'biti kolekcija' objekata osnovne klase (npr. IKorisnici).
Necu navoditi sta jos treba uraditi jer sve to moze da se nadje u npr. VB bibliji i slicnim knjigama, ali ono sto tamo nije navedeno je:

Public Function Item(ByVal Index As Variant) As IKorisnik

u klasi IKorisnici - za ovu f-ju se mora podesiti u Tools-->Procedure attributes--->ProcedureID na (Default) da bi radila OK.


Public Function NewEnum() As IUnknown

u klasi IKorisnici - za ovu f-ju se mora podesiti u Tools-->Procedure attributes--->ProcedureID na -4 i jos cekirati opciju 'Hide this member' da bi radila OK
 
Odgovor na temu

BinLaden
Ni na nebu ni na zemlji

Član broj: 147476
Poruke: 102
*.teol.net.

Sajt: www.sove-soft.rs.ba


Profil

icon Re: Kolekcije (klase koje imaju metode kolekcija)06.07.2007. u 18:41 - pre 203 meseci
Jel to pitanje ili predlog za top temu???
Ero S Onoga Sveta
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Kolekcije (klase koje imaju metode kolekcija)07.07.2007. u 01:10 - pre 203 meseci
pa pitanje nije, a nije ni za top, mada je veoma korisna informacija.

nessa, daj primer cele implementacije (mozes kao poruku, ne moras da kacis fajlove) pa da linkujemo u top.

hvala!
 
Odgovor na temu

nessa
Nebojša
Programer
Beograd

Član broj: 10010
Poruke: 60
*.static.sbb.co.yu.



Profil

icon Re: Kolekcije (klase koje imaju metode kolekcija)09.07.2007. u 14:41 - pre 203 meseci
'...javne konstante definisane u nekom modulu...
Code:

Public Const gc_EDITED = 1
Public Const gc_UNKNOWN = 2
Public Const gc_DELETED = 4
Public Const gc_LOADED = 8
Public Const gc_NEW = 16
Public Const gc_SAVED = 32


'******* Klasa IKorisnik *****************
'
'  Instancing: 2 - PublicNotCreatable
'
'************************************

Option Explicit

'...svojstva...
Public Key As String                '...unikatni identifikator klase (moze npr. Timer u momentu izrade)...
Public Tag As String
Public ItemData As Long
Public Vlasnik As IKorisnici

Private mlEdMod As Long             '...edit mod u kojem se nalazi (gc_NEW,gc_LOADED,gc_EDITED,gc_DELETED)...

Private msIme As String
Private msPrezime As String
Private mlKorID As Long             '...ID korisnika u bazi podataka - kolona primarnog kljuca u tabeli Korisnici...

'   javne metode za citanje i pisanje svojstava
'
Public Property Get EdMod() As Long
EdMod = mlEdMod
End Property
Public Property Let EdMod(Value As Long)
mlEdMod = Value
End Property

Public Property Get Ime() As String
Ime = msIme
End Property
Public Property Let Ime(Value As String)
msIme = Value
mlEdMod = mlEdMod And gc_EDITED
End Property

Public Property Get Prezime() As String
Prezime = msPrezime
End Property
Public Property Let Prezime(Value As String)
msPrezime = Prezime
mlEdMod = mlEdMod And gc_EDITED
End Property

Public Property Get KorID() As Long
KorID = mlKorID
End Property
Public Property Let KorID(Value As Long)
mlKorID = Value
mlEdMod = mlEdMod And gc_EDITED
End Property

Public Function LoadData(KorID As Long) As Boolean
On Error GoTo errhndl
'...(kod za ucitavanje podataka o korisniku iz baze u modulne promenljive msIme, msPrezime, mlKorID)...
mlEdMod = gc_LOADED
LoadData = True
Exit Function

errhndl:
'...(kod za obradu greske)...
End Function

Public Function SaveData() As Boolean
On Error GoTo errhndl
'...(kod za proveru podataka u modulnim promenljivima i snimanje u bazu)...
mlEdMod = gc_SAVED
SaveData = True
Exit Function

errhndl:
'...(kod za obradu greske)...
End Function



'******* Klasa IKorisnici ****************
'
'  Instancing: 5 - Mulitiuse
'
'***********************************

Option Explicit

'...svojstva...
Public Key As String
Public Tag As String
Public ItemData As Long
Public Edited As Boolean    '...da li je nesto iz kolekcije editovano...

Private moColl As New Collection

Public TekuciKorisnik As IKorisnik

Public Sub Clear()
Dim lCnt As Long
With moColl
    For lCnt = .Count To 1 Step -1
        .Remove lCnt
    Next lCnt
End With
End Sub

Public Function Count() As Long
Count = moColl.Count
End Function

'...za ovu f-ju se mora podesiti u Tools-->Procedure attributes--->ProcedureID na (Default) da bi ispravno radila... 
'
Public Function Item(ByVal Index As Variant) As IKorisnik  

On Error GoTo errhndl
Set TekuciKorisnik = Nothing
Set TekuciKorisnik = moColl.Item(Index)
Set Item = TekuciKorisnik
Exit Function

errhndl:
'...(kod za obradu greske)...
End Function

'...za ovu f-ju se mora podesiti u Tools-->Procedure attributes--->ProcedureID na -4...
'...i cekirati opciju Hide this member da bi ispravno radila...
'
Public Function NewEnum() As IUnknown   
Set NewEnum = moColl.[_NewEnum] 
End Function

Public Function Remove(ByVal Index As Variant)
Dim oKor As IKorisnik
On Error Resume Next
'...prvo se proveri sta se to trazi za brisanje iz kolekcije...
Set oKor = moColl.Item(Index)
If oKor Is Nothing Then Exit Function
moColl.Remove (Index)
End Function

Public Function Add(Optional oObj As IKorisnik, Optional Ime As String, Optional Prezime As String, Optional KorID As Long) As IKorisnik
Static lKey As Long

On Error GoTo errhndl
If oObj Is Nothing Then
    '...init...
    Set TekuciKorisnik = Nothing
    Set TekuciKorisnik = New IKorisnik
    With TekuciKorisnik
        .Ime = Ime
        .Prezime = Prezime
        .KorID = KorID
        Set .Vlasnik = Me
    End With
Else
    '...init...
    Set TekuciKorisnik = Nothing
    Set TekuciKorisnik = oObj
End If
'...sada TekuciKorisnik ubacujem u kolekciju...
With TekuciKorisnik
    lKey = lKey - 1
    .Key = "" & lKey
    moColl.Add TekuciKorisnik, .Key
    Set .Vlasnik = Me
End With
'...kraj, vracam kroz Add referencu ka CurFiskArt...
Set Add = TekuciKorisnik

Exit Function

errhndl:
'...(kod za obradu greske)...
End Function

Private Sub Class_Terminate()
If Not (moColl Is Nothing) Then Clear: Set moColl = Nothing
End Sub

Public Function SaveData() As Boolean
Dim oKor As IKorisnik
If moColl.Count = 0 Then
    SaveData = True
    Exit Function
End If
For Each oKor In moColl
    If Not oKor.SaveData() Then Exit Function
Next oKor
SaveData = True
End Function

'   posto klasa IKorisnik ima svojstvo PublicNotCreatable
'   pomocu ove metode se moze instancirati objekat te klase
'   tj. objekat klase IKorisnik se moze napraviti samo pomocu objekta klase IKorisnici
'   ako se klasa IKorisnik setuje na Mulitiuse ova metoda nije neophodna
'
Public Function NoviKorisnik() As IKorisnik
Dim oObj As New IKorisnik
Set oObj.Vlasnik = Me
Set NoviKorisnik = oObj
End Function


[Ovu poruku je menjao Aleksandar Ružičić dana 11.07.2007. u 21:23 GMT+1]
 
Odgovor na temu

BinLaden
Ni na nebu ni na zemlji

Član broj: 147476
Poruke: 102
*.teol.net.

Sajt: www.sove-soft.rs.ba


Profil

icon Re: Kolekcije (klase koje imaju metode kolekcija)11.07.2007. u 00:06 - pre 203 meseci
Meni stvarno nije jasno sta je pisac htjeo da poruci.
Kad si postovao poruku mislio sam da si pronasao neku caku ili nesto slicno,
a ono cista glupost. Ti si ustvari u taj modul dodao Promjenjivu "moColl" koja
je tipa Collection i sve operacije vrsis na njoj, odnosno u modulu
si napravio funkcije koje se isto zovu kao i u "Collection", a one ustvari
pozivaju istoimene funkcije iz Collection-a. Jedina razlika
je u tome sto ce sada biti: ...As Korisnik umjesto ...As Collection i sto ima
gomilu nekog koda koji vjerovatno samo ti mozes da iskoristis za nesto.
Ovo je cisto izmisljanje tople vode, odnosno u tvom slucaju vjerovatno nije
jer, vjerovatno, tebi odradjuje neki posao koji ti treba. Ako si vec mislio da
poruka bude edukativnog karaktera mogao si makar da napises da se radi o ActiveX
projektu jer u Standard EXE projektu nije moguce instanciranje Modula Klase.
Ero S Onoga Sveta
 
Odgovor na temu

nessa
Nebojša
Programer
Beograd

Član broj: 10010
Poruke: 60
*.static.sbb.co.yu.



Profil

icon Re: Kolekcije (klase koje imaju metode kolekcija)11.07.2007. u 15:03 - pre 203 meseci
Caka je samo onaj deo iz prvog posta (Procedure attributes podesavanja), a ostalo je primer pravljenja
klasa koje imaju metode kolekcije.

Slican primer se moze naci u MSDN biblioteci:
Creating Your Own Collection Class: The House of Bricks
 
Odgovor na temu

sale83
Australia
Sydney

Član broj: 41625
Poruke: 729
*.ispone.net.au.



+30 Profil

icon Re: Kolekcije (klase koje imaju metode kolekcija)12.07.2007. u 02:20 - pre 203 meseci
Citat:
nessa: Caka je samo onaj deo iz prvog posta (Procedure attributes podesavanja), a ostalo je primer pravljenja
klasa koje imaju metode kolekcije.

Slican primer se moze naci u MSDN biblioteci:
Creating Your Own Collection Class: The House of Bricks


Dobar pristup programiranju...

Ja tih problema nikad nisam imao i kolekcija je uvek radila. Mislim na problem koji si ti napisao u prvoj poruci...


Sto se tice kolekcije i metode Add to moze mnogo jednostavnije nego sto si ti napisao.

Code:

Public Function Add(Optional sKey As String) As IKorisnik
   
    Dim TekuciKorisnik As IKorisnik
    Set TekuciKorisnik = New IKorisnik
    
    If Len(sKey) = 0 Then
        moColl.Add TekuciKorisnik
    Else
        moColl.Add TekuciKorisnik, sKey
    End If
    Set Add = TekuciKorisnik
    Set TekuciKorisnik = Nothing
End Function




Poz
sale
Sto mozes danas ne ostavljaj za sutra!
 
Odgovor na temu

[es] :: Visual Basic 6 :: Kolekcije (klase koje imaju metode kolekcija)

[ Pregleda: 2468 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.