|
| 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
| |
|
|