⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch10.htm

📁 MAPI__SAPI__TAPI
💻 HTM
📖 第 1 页 / 共 5 页
字号:
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' set user-supplied info<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Subject = cSubject <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Text = cBody <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' set stock properties <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Type = &quot;IPM.Discuss&quot; <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ConversationTopic = cTopic<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ConversationIndex = MakeTimeStamp<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.TimeSent = Now() <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.TimeReceived = .TimeSent<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Submitted = True <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Unread = True <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Sent = True<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Update ' force msg into the folder<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End With<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;objFolder.Update ' update the folder object <br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  End Sub</font></tt> </p>
</blockquote>

<hr>

<p>There are quite a few things going on in this routine. First, it locates the folder and 
message store where the message will be posted. Then a new message object is created, 
populated with the appropriate values, and posted (using the <tt><font FACE="Courier">Update</font></tt> 
method) to the target folder. </p>

<p>The <tt><font FACE="Courier">OLEMAPIReplyMsg</font></tt> is quite similar, but this 
method carries information forward from the source message to make sure that the 
conversation thread is maintained. Add the code from Listing 10.13 to your project. </p>

<hr>

<blockquote>
  <b><p>Listing 10.13. Adding the <tt><font FACE="Courier">OLEMAPIReplyMsg</font></tt> 
  routine.<br>
  </b></p>
</blockquote>

<blockquote>
  <tt><font FACE="Courier"><p>Public Sub OLEMAPIReply(FolderName As String, iCount As 
  Integer, cSubject As <font FACE="ZAPFDINGBATS">&Acirc;</font>String, cBody As String)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' post a message reply (continues existing thread)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' -----------------<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' Inputs:<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;FolderName&nbsp;&nbsp;- string name of target 
  folder<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;iCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 
  index into msg array (points to source msg)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;cSubject&nbsp;&nbsp;&nbsp;&nbsp;- user's 
  subject line (if null uses &quot;RE:&quot; &amp;&nbsp;source subject)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;cBody&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 
  user's msg body<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;-----------------<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Dim cIndex As String<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Dim uMsg As MsgType<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Dim uFolder As FolderType<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Dim objSourceMsg As Object<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' check msg pointer<br>
  &nbsp;&nbsp;&nbsp;&nbsp;If iCount &lt; 0 Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox &quot;No Message Selected&quot;, 
  vbExclamation, &quot;OLEMAPIReply&quot; <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Sub<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' get folder for posting<br>
  &nbsp;&nbsp;&nbsp;&nbsp;uFolder = GetFolderRec(FolderName)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;If uFolder.FolderID = &quot;&quot; Then <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox &quot;Unable to locate 
  folder!&quot;, vbExclamation, FolderName<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Sub<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' get source message<br>
  &nbsp;&nbsp;&nbsp;&nbsp;cIndex = MsgIndex(frmMsgs.list1, iCount) <br>
  &nbsp;&nbsp;&nbsp;&nbsp;uMsg = MsgPtr(cIndex)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Set objSourceMsg = objSession.GetMessage(uMsg.MsgID, 
  uFolder.StoreID)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;If objSourceMsg Is Nothing Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox &quot;Unable to Load selected 
  Message!&quot;, vbExclamation, uMsg.Subject<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Sub<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' open target store, folder<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Set objFolder = objSession.GetFolder(uFolder.FolderID, 
  uFolder.StoreID)<br>
  &nbsp;&nbsp;&nbsp;&nbsp;If objFolder Is Nothing Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox &quot;Unable to open target 
  folder&quot;, vbExclamation, uFolder.Name<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Sub<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' create a new blank message object<br>
  &nbsp;&nbsp;&nbsp;&nbsp;Set objMsg = objFolder.Messages.Add<br>
  &nbsp;&nbsp;&nbsp;&nbsp;If objMsg Is Nothing Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox &quot;Unable to add message to 
  folder&quot;, vbExclamation, objFolder.Name <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Sub<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' fix up target subject, if needed<br>
  &nbsp;&nbsp;&nbsp;&nbsp;If cSubject = &quot;&quot; Then<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cSubject = &quot;RE: &quot; &amp; 
  objSourceMsg.Subject<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End If<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;' now compose reply msg<br>
  &nbsp;&nbsp;&nbsp;&nbsp;With objMsg<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' user properties <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Subject = cSubject <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Text = cBody <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' stock properties <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Type = &quot;IPM.Discuss&quot; <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ConversationTopic = 
  objSourceMsg.ConversationTopic<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ConversationIndex = 
  objSourceMsg.ConversationIndex &amp; MakeTimeStamp<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.TimeSent = Now() <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.TimeReceived = .TimeSent<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Submitted = True <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Unread = True <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Sent = True<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Update ' force msg into folder<br>
  &nbsp;&nbsp;&nbsp;&nbsp;End With<br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  &nbsp;&nbsp;&nbsp;&nbsp;objFolder.Update ' update folder object <br>
  &nbsp;&nbsp;&nbsp;&nbsp;'<br>
  End Sub</font></tt> </p>
</blockquote>

<hr>

<p>That's all there is to this module. Save the module (<tt><font FACE="Courier">MAPIPOST.BAS</font></tt>) 
and the project (<tt><font FACE="Courier">DISCUSS.VBP</font></tt>) before moving on to the 
next section. </p>

<h2><a NAME="TheDiscussandMsgsForms"><b><font SIZE="5" COLOR="#FF0000">The Discuss and 
Msgs Forms</font></b></a></h2>

<p>The two main forms for the Discuss project are the MDI Discuss form and the Msgs form. 
The MDI form presents a button array and hosts all the other forms. The Msgs form is used 
to display the threaded discussion list. </p>

<p>You'll also need to add a few values to a short BAS module. These are project-level 
values that are used throughout the project. Add a BAS module, set its <tt><font
FACE="Courier">Name</font></tt> property to <tt><font FACE="Courier">ModDiscuss</font></tt> 
and save it as <tt><font FACE="Courier">MODDISCUSS.BAS</font></tt>. Now add the code shown 
in Listing 10.14 to the general declaration section of the form. </p>

<hr>

<blockquote>
  <b><p>Listing 10.14. Adding project-level declarations.<br>
  </b></p>
</blockquote>

<blockquote>
  <tt><font FACE="Courier"><p>Option Explicit<br>
  <br>
  '<br>
  ' constants<br>
  Public Const dscRead = 0<br>
  Public Const dscNewPost = 1<br>
  Public Const dscReply = 2<br>
  <br>
  '<br>
  ' variables<br>
  Public cGroup As String<br>
  Public cProfile As String<br>
  Public bThreaded As Boolean</font></tt> </p>
</blockquote>

<hr>

<p>That's all you need to add to this form. Save it (<tt><font FACE="Courier">MODDISCUSS.BAS</font></tt>) 
and close it now. </p>

<h3><a NAME="LayingOuttheDiscussForm"><b>Laying Out the Discuss Form</b></a></h3>

<p>The Discuss form is the MDI form that controls the entire project. Refer to Figure 10.3 
and Table 10.2 when laying out the Discuss form. </p>

<p><a HREF="f10-3.gif"><b>Figure 10.3 : </b><i>Laying out the Discuss form.</i></a> <br>
</p>

<p align="center"><b>Table 10.2. Controls for the Discuss form.</b> </p>
<div align="center"><center>

<table BORDERCOLOR="#000000" BORDER="1" WIDTH="80%">
  <tr>
    <td><i>Control</i></td>
    <td WIDTH="138"><i>Property</i> </td>
    <td WIDTH="177"><i>Setting</i></td>
  </tr>
  <tr>
    <td WIDTH="176"><tt><font FACE="Courier">VB.MDIForm</font></tt> </td>
    <td WIDTH="138"><tt><font FACE="Courier">Name</font></tt></td>
    <td WIDTH="177">mdiDiscuss</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">BackColor</font></tt> </td>
    <td WIDTH="177">&amp;H8000000C&amp;</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">Caption</font></tt> </td>
    <td WIDTH="177">&quot;Discuss&quot;</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">ClientHeight</font></tt> </td>
    <td WIDTH="177">5685</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">ClientLeft</font></tt> </td>
    <td WIDTH="177">735</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">ClientTop</font></tt> </td>
    <td WIDTH="177">1710</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">ClientWidth</font></tt> </td>
    <td WIDTH="177">9210</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">Height</font></tt> </td>
    <td WIDTH="177">6090</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">Left</font></tt> </td>
    <td WIDTH="177">675</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">LinkTopic</font></tt> </td>
    <td WIDTH="177">&quot;MDIForm1&quot;</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">Top</font></tt> </td>
    <td WIDTH="177">1365</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">Width</font></tt> </td>
    <td WIDTH="177">9330</td>
  </tr>
  <tr>
    <td WIDTH="176"> </td>
    <td WIDTH="138"><tt><font FACE="Courier">WindowState</font></tt> </td>
    <td WIDTH="177">2 'Maximized</td>
  </tr>
  <tr>
    <td WIDTH="176"><tt><font FACE="Courier">VB.PictureBox</font></tt> </td>
    <td WIDTH="138"><tt><font FACE="Courier">Name</font></tt></td>
    <td WIDTH="177">Picture2</td>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -