/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Collections...??.. hvordan er det nu lige ~
Fra : Tajen


Dato : 30-06-02 22:47

Subj. siger det meste.. men problemet er at jeg gerne vil lave et mail
program.. og så vil jeg gemme alle mails i en collection.. men jeg kan ikk
få dem til at virke...

det er denne del af koden der ikk virke...
Private Sub ListMessages()
Dim oMes As CMessage
Dim lvItem As ListItem

For Each oMes In m_colMessages <-----Der laver den fejlen..
Set lvItem = lvMessages.ListItems.Add
lvItem.Key = oMes.MessageID
lvItem.Text = oMes.From
lvItem.SubItems(1) = oMes.Subject
lvItem.SubItems(2) = oMes.SendDate
lvItem.SubItems(3) = oMes.Size
Next
End Sub







 
 
Tomas Christiansen (02-07-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 02-07-02 21:31

Tajen skrev:
> Subj. siger det meste.. men problemet er at jeg gerne vil lave et
mail
> program.. og så vil jeg gemme alle mails i en collection.. men jeg
kan ikk
> få dem til at virke...
>
> det er denne del af koden der ikk virke...
> Private Sub ListMessages()
> Dim oMes As CMessage
> Dim lvItem As ListItem
>
> For Each oMes In m_colMessages <-----Der laver den
fejlen..

Ja, når du ikke skriver det, så må man jo gætte, og så kan det godt
tage TEMMELIG lang tid at finde frem til fejlen...

Hvordan har du erklæret m_colMessages?
Jeg gætter på således:
Private m_colMessages As Collection

Hvilken fejlkode/besked får du?
Jeg gætter på at du får fejlkoden 424/Object required" og det
betyder at du
har glemt at instantiere m_colMessages. Dvs. at du mangler denne
linie:
Set m_colMessages = New Collection

-------
Tomas


Tajen (04-07-2002)
Kommentar
Fra : Tajen


Dato : 04-07-02 21:12


"Tomas Christiansen" <toc@blikroer.removethis.dk> skrev i en meddelelse
news:aft2h2$n33$1@news.cybercity.dk...
> Tajen skrev:
> > Subj. siger det meste.. men problemet er at jeg gerne vil lave et
> mail
> > program.. og så vil jeg gemme alle mails i en collection.. men jeg
> kan ikk
> > få dem til at virke...
> >
> > det er denne del af koden der ikk virke...
> > Private Sub ListMessages()
> > Dim oMes As CMessage
> > Dim lvItem As ListItem
> >
> > For Each oMes In m_colMessages <-----Der laver den
> fejlen..
>
> Ja, når du ikke skriver det, så må man jo gætte, og så kan det godt
> tage TEMMELIG lang tid at finde frem til fejlen...
>
> Hvordan har du erklæret m_colMessages?
> Jeg gætter på således:
> Private m_colMessages As Collection
>
> Hvilken fejlkode/besked får du?
> Jeg gætter på at du får fejlkoden 424/Object required" og det
> betyder at du
> har glemt at instantiere m_colMessages. Dvs. at du mangler denne
> linie:
> Set m_colMessages = New Collection
>
> -------
> Tomas
>

Du har ret.. det er lidt svært at finde.. men koden fylder en del... men jeg
kan da prøve at skrive den...:

Class Module - CMessage:
'local variables to hold property values
Private m_strReturnPath As String
Private m_strReceived As String
Private m_strSendDate As String
Private m_strMessageID As String
Private m_strMessageTo As String
Private m_strFrom As String
Private m_strSubject As String
Private m_strReplyTo As String
Private m_strSender As String
Private m_strCC As String
Private m_strBCC As String
Private m_strInReplyTo As String
Private m_strReferences As String
Private m_strKeywords As String
Private m_strComments As String
Private m_strEncrypted As String
Private m_strMessageText As String
Private m_strMessageBody As String
Private m_strHeaders As String
Private m_lSize As Long

Public Sub CreateFromText(strMessage As String)

Dim intPosA As Integer
Dim vHeaders As Variant
Dim vField As Variant
Dim strHeader As String
Dim strHeaderName As String
Dim strHeaderValue As String

intPosA = InStr(1, strMessage, vbCrLf & vbCrLf)
If intPosA Then
m_strHeaders = Left$(strMessage, intPosA - 1)
m_strMessageBody = Right$(strMessage, Len(strMessage) - intPosA - 3)
m_strMessageText = strMessage
Else
Err.Raise vbObjectError + 512 + 101, "CMessage.CreateFromText", _
"Invalid message format"
Exit Sub
End If

vHeaders = Split(m_strHeaders, vbCrLf)
For Each vField In vHeaders
strHeader = CStr(vField)
intPosA = InStr(1, strHeader, ":")
If intPosA Then
strHeaderName = LCase(Left$(strHeader, intPosA - 1))
Else
strHeaderName = ""
End If
strHeaderValue = Trim$(Right$(strHeader, Len(strHeader) - intPosA))
Select Case strHeaderName
Case "return-path"
m_strReturnPath = strHeaderValue
Case "received"
m_strReceived = strHeaderValue
Case "from"
m_strFrom = strHeaderValue
Case "sender"
m_strSender = strHeaderValue
Case "reply-to"
m_strReplyTo = strHeaderValue
Case "to"
m_strMessageTo = strHeaderValue
Case "cc"
m_strCC = strHeaderValue
Case "bcc"
m_strBCC = strHeaderValue
Case "message-id"
m_strMessageID = strHeaderValue
Case "in-reply-to"
m_strInReplyTo = strHeaderValue
Case "references"
m_strReferences = strHeaderValue
Case "keywords"
m_strKeywords = strHeaderValue
Case "subject"
m_strSubject = strHeaderValue
Case "comments"
m_strComments = strHeaderValue
Case "encrypted"
m_strEncrypted = strHeaderValue
Case "date"
m_strSendDate = strHeaderValue
End Select
Next

End Sub


Public Function CombineMessage() As String

End Function


Public Property Let Headers(ByVal vData As String)
m_strHeaders = vData
End Property


Public Property Get Headers() As String
Headers = m_strHeaders
End Property

Public Property Let MessageBody(ByVal vData As String)
m_strMessageBody = vData
End Property

Public Property Get MessageBody() As String
MessageBody = m_strMessageBody
End Property

Public Property Let MessageText(ByVal vData As String)
m_strMessageText = vData
End Property

Public Property Get MessageText() As String
MessageText = m_strMessageText
End Property

Public Property Let Encrypted(ByVal vData As String)
m_strEncrypted = vData
End Property

Public Property Get Encrypted() As String
Encrypted = m_strEncrypted
End Property

Public Property Let Comments(ByVal vData As String)
m_strComments = vData
End Property

Public Property Get Comments() As String
Comments = m_strComments
End Property

Public Property Let Keywords(ByVal vData As String)
m_strKeywords = vData
End Property

Public Property Get Keywords() As String
Keywords = m_strKeywords
End Property

Public Property Let References(ByVal vData As String)
m_strReferences = vData
End Property

Public Property Get References() As String
References = m_strReferences
End Property

Public Property Let InReplyTo(ByVal vData As String)
m_strInReplyTo = vData
End Property

Public Property Get InReplyTo() As String
InReplyTo = m_strInReplyTo
End Property

Public Property Let BCC(ByVal vData As String)
m_strBCC = vData
End Property

Public Property Get BCC() As String
BCC = m_strBCC
End Property

Public Property Let CC(ByVal vData As String)
m_strCC = vData
End Property

Public Property Get CC() As String
CC = m_strCC
End Property

Public Property Let Sender(ByVal vData As String)
m_strSender = vData
End Property

Public Property Get Sender() As String
Sender = m_strSender
End Property

Public Property Let ReplyTo(ByVal vData As String)
m_strReplyTo = vData
End Property

Public Property Get ReplyTo() As String
ReplyTo = m_strReplyTo
End Property

Public Property Let Subject(ByVal vData As String)
m_strSubject = vData
End Property

Public Property Get Subject() As String
Subject = m_strSubject
End Property

Public Property Let From(ByVal vData As String)
m_strFrom = vData
End Property

Public Property Get From() As String
From = m_strFrom
End Property

Public Property Let MessageTo(ByVal vData As String)
m_strMessageTo = vData
End Property

Public Property Get MessageTo() As String
MessageTo = m_strMessageTo
End Property

Public Property Let MessageID(ByVal vData As String)
m_strMessageID = vData
End Property

Public Property Get MessageID() As String
MessageID = m_strMessageID
End Property

Public Property Let SendDate(ByVal vData As String)
m_strSendDate = vData
End Property

Public Property Get SendDate() As String
SendDate = m_strSendDate
End Property

Public Property Let Received(ByVal vData As String)
m_strReceived = vData
End Property

Public Property Get Received() As String
Received = m_strReceived
End Property

Public Property Let ReturnPath(ByVal vData As String)
m_strReturnPath = vData
End Property

Public Property Get ReturnPath() As String
ReturnPath = m_strReturnPath
End Property

Public Property Get Size() As Long
Size = Len(m_strMessageText)
End Property


Class Module - CMessages:

'local variable to hold collection
Private mCol As Collection

Public Sub Add(oMessage As CMessage, Optional sKey As String)

If Len(sKey) = 0 Then
mCol.Add oMessage
Else
mCol.Add oMessage, sKey
End If

End Sub

Public Property Get Item(vntIndexKey As Variant) As CMessage
Set Item = mCol(vntIndexKey)
End Property

Public Property Get Count() As Long
Count = mCol.Count
End Property

Public Sub Remove(vntIndexKey As Variant)
mCol.Remove vntIndexKey
End Sub

Public Property Get NewEnum() As IUnknown
Set NewEnum = mCol.[_NewEnum]
End Property

Private Sub Class_Initialize()
Set mCol = New Collection
End Sub

Private Sub Class_Terminate()
Set mCol = Nothing
End Sub


Form - frmMain:

Private m_oMessage As CMessage
Private m_colMessages As New CMessages
_____________________________________________________

Private Sub ListMessages()

Dim oMes As CMessage
Dim lvItem As ListItem

For Each oMes In m_colMessages
Set lvItem = lvMessages.ListItems.Add
lvItem.Key = oMes.MessageID
lvItem.Text = oMes.From
lvItem.SubItems(1) = oMes.Subject
lvItem.SubItems(2) = oMes.SendDate
lvItem.SubItems(3) = oMes.Size
Next

End Sub


det er alt...??




Tomas Christiansen (05-07-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 05-07-02 23:26

Tajen citerede Tomas:
> > Hvilken fejlkode/besked får du?

Men svarede alligevel ikke på det ellers ikke så utrolig, fantastisk,
vanvittig komplicerede spørgsmål!

Okay, så må jeg jo til at gætte igen...

Mit gæt er, at du ikke har sat de rigtige attributter på NewEnum
property'en:

> Public Property Get NewEnum() As IUnknown
> Set NewEnum = mCol.[_NewEnum]
> End Property

Du skal sætte markøren på "Public Property Get NewEnum ..." linien og
trykke Tools, Procedure Attributes. Derefter trykker du på Advanced og
sætter Procedure ID til -4 og sætter "hak" i Hide this member.

-------
Tomas


Tajen (20-07-2002)
Kommentar
Fra : Tajen


Dato : 20-07-02 18:25

Det virkede...??

Kan du sige lidt om hvorfor? For jeg forstår det ikk





Tomas Christiansen (20-07-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 20-07-02 23:56

Tajen skrev:
> Det virkede...??
>
> Kan du sige lidt om hvorfor? For jeg forstår det ikk

Nej, jeg kan såmænd heller ikke huske helt præcis hvorfor det skal
være sådan, men det har noget at gøre med, at man implementerer en
funktion i IUnknown interfacet, og der er altså nogle krav til
attributterne. I visse andre sammenhænge, kan der være andre
attribut-krav, som skal overholdes, men det er generelt noget som man
kun _meget_ sjældent har brug for at "pille" ved.

Jeg kan næsten kun referere til et citat fra teksten "Guidelines for
Creating Collection Classes":

"NewEnum:
Returns the IUnknown interface of an enumerator object that For Each .
Next can use to iterate over the items in a collection. Should be
hidden in the type library. Must have a Procedure ID value of -4 to
work with For Each . Next."

Søg evt. selv efter ordene: iunknown "procedure id"

-------
Tomas


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste