Autor Beitrag
Ms.Invisible
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 10.09.10 16:44 
Hallo,

ich bin neu hier und weiß auch grad nicht wirklich wo ich meine Frage hätte sonst erstellen sollen.
Also seid mir nicht böse, wenn ich hier ganz falsch bin.

Ich habe ein Problem, wenn ich versuche mit Delphi (2010) auf mein Outlook (2007) zu zugreifen um eine Email zu verschicken.

Ich habe folgenden Code...

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
procedure EmailErstellen(const EmailText,Betreff,Empfaenger:string);
Var
   OutlookApp: Variant;
   Mail,ObjectInspector,WordEditor: OleVariant;
   s:string;
begin
   try
      OutlookApp := CreateOleObject('Outlook.Application');
      OutlookApp.ActiveWindow;
      try
      //Neue Email erstellen
       Mail := OutlookApp.CreateItem(olMailItem);
       try
         Mail.subject := Betreff;
                  //Signatur ermitteln
         ObjectInspector := Mail.getinspector;
         WordEditor := ObjectInspector.WordEditor;
         //Text vor Signatur stellen
         WordEditor.Characters.item(1).InsertBefore(EmailText); // <- hier tritt eine Zugriffsverletzung auf
         Mail.Recipients.Add(EmpfaengerAN);

         //Mail anzeigen, zum Bearbeiten
         Mail.display;
       finally
         Mail := Unassigned;
       end;
     finally
       OutlookApp := Unassigned;
     end;
   except
      on E: EOleSysError do
         begin
         end;
   end;
end;


Starte ich meine Prozedur und mein Outlook ist bereits geöffnet, ist alles wunderbar.
Ist mein Outlook allerdings geschlossen, öffnet es sich zwar, kommt aber nicht über die oben
gekennzeichnete Stelle... Ich bekomme dann folgende Meldung "Zugriffsverletzung bei Adresse 50082121 in Modul 'rtl140.bpl'. Lesen von Adresse 00000000."
Leider kann ich damit nicht wirklich etwas anfangen...

Hoffe ihr könnt mir helfen!

Vielen Dank schonmal,
Ms.Invisible

Moderiert von user profile iconNarses: Highlight-Tags im Code eingefügt.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1338
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Fr 10.09.10 17:53 
Hi und :welcome: in der EE!

Versuch es doch mal ohne die Zeile in der der Fehler auftritt. Funktioniert es dann?
ausblenden Delphi-Quelltext
1:
         WordEditor.Characters.item(1).InsertBefore(EmailText); // <- hier tritt eine Zugriffsverletzung auf					

Dei Meldung deutet darauf hin das versucht wird auf ein Objekt zuzugreifen das es nicht gibt.
Bist du dir sicher das es ein "item(1)" gibt? Hast du es mal mit "item(0)" probiert?
Indices von Arrays oder Listen gehen immer von 0 los, wieso also nicht auch hier.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Ms.Invisible Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 12.09.10 12:41 
Danke für den Tip mit dem Item(0), werd ich morgen direkt mal ausprobiern!
Und ja ohne die Zeile funktioniert es.
Aber ist ja trotzdem komisch, dass es bei der Zeile zu einem Fehler kommt, wenn Outlook vorher geschlossen ist, aber alles prima läuft wenn Outlook bereits gestartet ist...
Oder?? ^^
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 12.09.10 12:57 
Kann es sein, dass Outlook an der Stelle schlicht noch nicht fertig geladen ist? Wenn es schon gestartet ist, muss es nicht mehr geladen werden, deshalb funktioniert es dann.

Ich kenne die Schnittstelle zu Outlook nicht, weiß also nicht wie das abläuft. Aber es wäre eine logische Erklärung (das mit dem Index auch, allerdings wäre es dann komisch, dass es geht, wenn es schon läuft).
Ms.Invisible Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 14.09.10 08:20 
Okay ich hab es jetzt mit dem Index 0 ausprobiert, die Zugriffsverletzung krieg ich trotzdem noch.
Ob Outlook nicht fertig geladen ist? Ich weiß es nicht... es Öffnet sich ja, nur die Email wird nicht erstellt.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Ich habe die Ursache des Problems gefunden, weiß jedoch leider noch nicht, wie ich es behebe.
Und zwar wird mein Outlook mit meiner Prozedur ja geöffnet und dann minimiert es sich und da liegt (scheinbar)
das Problem, denn wenn ich es maximiere, kurz nachdem es gestartet wurde, zeigt der mir die Email die ich generiere an...
Wie krieg ich jetzt aber Outlook maximiert? Zufüllig jemand eine Idee?

Auf jeden Fall schonmal Danke bis hierhin!

E: Um es vielleicht besser verständlich zu machen, Outlook minimiert sich in den Systray und verschwindet aus der Taskleiste.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1338
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 14.09.10 10:08 
Ich weis jetzt nicht ob das dass gleiche ist wie die OLE Schnittstelle, aber ich verwende zum Zugriff auf Outlook die MAPI. Darüber gibt es ausführliche Infos im MSDN.
Da hatte ich bisher keine Probleme mit Schutzverletzungen oder Nullpointern beim Zugriff auf Outlook, auch wenn nicht offen. Wobei ich erwähnen muss das ich nicht direkt auf ein lokal ausgeführtes Outlook sondern auf ein Exchangeserverprofil zugreife.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Ms.Invisible Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 14.09.10 10:51 
Ich hatte auch schon bei MSDN nachgeschaut und habe die WindowState Property entdeckt.
Allerdings weiß ich nicht so genau wie ich die benutzen soll.
Habe versucht 'OutlookApp.WindowState := olMAximized' zu benutzen, aber es folgte eine Fehlermeldung, dass das so nicht unterstützt wird.
Also habe ich es mit 'OutlookApp.ActiveWindow.WindowState := olMaximized' probiert, aber Outlook wird nicht einmal mehr gestartet.
Beides habe ich nach der 'CreateOleObject'-Anweisung aufgerufen...