Announcement

Collapse
No announcement yet.

Bitmap oder ähnliches im Outlook plazieren v. Delphi

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bitmap oder ähnliches im Outlook plazieren v. Delphi

    Hi,

    Ich möchet von Delphi2 in eine Outlook.Mail eine Bitmap einfügen wie Geht das ? (Bitmap wird von Quickreporterzeugt, funktioniert. Soll aber keine Anlage werden)

    (Lösungsansatz event. der ?

    myOlApp := CreateOLEObject('Outlook.Application');
    myItem := myOlApp.CreateItem(olMailItem);
    myItem.Subject := table1.fieldbyname('betrifft').asstring;
    myRecipient := myItem.Recipients.Add(combobox3.text);
    bmp.loadfromFile('bitmap.bmp');

    myitem.body : = ???? ??((((canvas.draw(0,0,bmp)));

    Gruß Horst und Vielen Dank

  • #2
    Hallo,

    man darf dem eMail-Body einen fertig formatierten RTF-Text übergeben, er beliebige Grafiken enthalten darf. Das folgende Beispiel aus meinem Buch <i>COM/DCOM/COM+ mit Delphi</i> demonstriert dies am Beispiel von einem Microsoft Word 2000-Dokument:
    <pre>
    uses ComObj, Outlook_TLB, ActiveX;

    var
    dwStart, dwEnd : DWord; // Ausführungszeit stoppen

    procedure TFormMain.BitBtnMailClick(Sender: TObject);
    const
    RTF_NAME = 'Rich Text Format';
    RTF_NAME_MAX = 254;
    var
    aDataObject : IDataObject;
    aEnumFmt : IEnumFORMATETC;
    aFormatEtc : TFormatEtc;
    aMedium : TStgMedium;
    pFmtName : PChar;
    bFmtFound : Boolean;
    pRTFData : PChar;
    aIUnknown : IUnknown;
    //
    aOutlook : _Application;
    aMAPI : NameSpace;
    aOutbox : MAPIFolder;
    aMail : MailItem;
    aReci : Recipient;
    vDOCPath : OleVariant;
    vReadOnly : OleVariant;
    begin
    vDOCPath := 'C:\Temp\Test.rtf';
    vReadOnly := True;
    WordApplication1.Connect;
    WordApplication1.Documents.OpenOld(vDOCPath, EmptyParam, vReadOnly,
    EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam);
    WordDocument1.ConnectTo(WordApplication1.ActiveDoc ument);

    aIUnknown := WordApplication1.ActiveDocument as IUnknown;
    aIUnknown.QueryInterface(IDataObject, aDataObject);
    // IDataObject der Quelle ok ?
    if aDataObject = nil then
    Abort;
    // cfFormat-Wert für den RTF-Inhalt des Word-Dokuments ermitteln
    bFmtFound := False;
    OleCheck(aDataObject.EnumFormatEtc(DATADIR_GET, aEnumFmt));
    while (not bFmtFound) and
    (aEnumFmt.Next(1, aFormatEtc, nil) = S_OK) do
    begin
    pFmtName := AllocMem(RTF_NAME_MAX + 1);
    GetClipBoardFormatName(aFormatEtc.cfFormat, pFmtName, RTF_NAME_MAX);
    if (String(pFmtName) = RTF_NAME) then
    bFmtFound := True;
    FreeMem(pFmtName);
    end;
    if not bFmtFound then
    Abort;
    OleCheck(aDataObject.GetData(aFormatEtc, aMedium));
    // RTF-Format wird über einen globalen Puffer übergeben
    pRTFData := GlobalLock(aMedium.hglobal);
    try
    //ShowMessage(pRTFData);
    StatusBar1.SimpleText := 'eMail wird über Outlook verschickt...';
    dwStart := GetTickCount;
    Screen.Cursor := crHourglass;
    aOutLook := CoOutlookApplication.Create;
    try
    aMAPI := aOutlook.GetNameSpace('MAPI');
    aOutbox := aMAPI.GetDefaultFolder(olFolderOutbox);
    aMail := aOutbox.Items.Add(olMailItem) as MailItem;
    aReci := aMail.Recipients.Add(EditMailAddress.Text);
    aReci.Type_ := olTo;
    // Empfänger prüfen (falls nicht bekannt -> Exception)
    aReci.Resolve;
    aMail.Subject := EditMailSubject.Text;
    aMail.Body := pRTFData;
    // eMail senden
    aMail.Send;
    finally
    aOutlook := nil;
    Screen.Cursor := crDefault;
    end;
    finally
    GlobalUnlock(aMedium.hglobal);
    end;
    dwEnd := GetTickCount;
    StatusBar1.SimpleText := Format('Ausführungszeit: %d Windows-Ticks',
    [dwEnd - dwStart]);
    end;

    initialization
    OleInitialize(nil);

    finalization
    OleUninitialize;
    </pre&gt

    Comment

    Working...
    X