hab mir mal was gebastelt, was es ansatzweise löst, ohne API.
btw: über Notespeek kann man erkennen, daß er einen
"record-type Graphic" auslesen kann, da ich mich aber mit den externen Funktionen nicht auskenne, wüßte ich nicht, wie man á la NotesPeek an diese Info herankommt, ob eine importierte Grafik vorliegt.
Daher ein anderer Weg:
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Dim doc As NotesDocument
Set doc = uidoc.Document
Dim rtitem As Variant
Dim plainText As String
Dim fileNum As Integer
Dim laenge As Integer
Dim laenge1 As Integer
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
plainText = rtitem.GetFormattedText( False, 0 )
laenge = Len(plainText$)
laenge1 = rtitem.valuelength
End If
Entscheidend ist der zu-Fuß-Ansatz:
laenge = Len(plainText$)
laenge1 = rtitem.valuelength
"laenge" gibt mir nur die Länge des Textes an, ohne Anhänge und andere embedded Objects.
"lange1" gibt mir den Size vom RichText an, ohne Anhänge und andere embedded Objects, aber mit Bildern (lt. Help: the number of bytes in the database used to store the item's values. This number includes internal overhead)
Aufgrund des "internal overhead" ist
-bei einem eingebenen String von 15 Zeichen
laenge = 15
laenge1 = 112
-bei einem eingebenen String von 30 Zeichen
laenge = 30
laenge1 = 126
-bei einem eingebenen String von 60 Zeichen
laenge = 60
laenge1 = 156
Importiert man nun in das "60 Zeichen"-Beispiel ein Bild von der Größe 13.619 Byte (jpeg) ergeben sich folgende Werte:
laenge = 60 (vorher: 60 byte)
laenge1 = 13860 (vorher: 156 byte)
btw: das Bild scheint einen weiteren, kleinen Zusatz-Overhead von zusätzlichen 85 Byte zu produzieren, was nicht überraschen mag: laenge1_vorher(156)+bild(13.619)=13.775byte
Differenz: 13.860byte angezeigte ValueLength-13.775 rechnerisch=85 Byte overhead (hängt sicher davon ab, wie Notes intern das jpeg abspeichert bzgl. Farbtiefe etc...)
-bei einem eingebenen String von 60 Zeichen und 1 Grafik von 13.619 byte und 1 Tabelle 1x1 ohne Text:
laenge = 64 (vorher 60 byte, +4 byte)
laenge1 = 14140 (vorher 13.860 byte, +280 byte)
-bei einem eingebenen String von 60 Zeichen und 1 Grafik von 13.619 byte und 1 Tabelle 2x2 ohne Text:
laenge = 68 (vorher 64 byte, +4 byte)
laenge1 = 14318 (vorher 14.140 byte, +178 byte)
Und was soll nun das Ganze?
Anhand des Vergleichs von der Länge des reinen Textes zu ValueLength könnte man logisch darauf zurückschließen, daß im RT ein Image vorliegen könnte. Bzw. mehrere, daß weiß man natürlich nicht. Man muß das Verfahren ins QuerySave hängen zB und kann darüber ein Flag in einem versteckten Feld setzen, daß anzeigt, ob wahrscheinlich importierte Bilder vorliegen.
Anhänge und Embedded Objects spielen hierbei dennoch eine Rolle. Lt. Hilfe filtert ValueLength solche Objekte bei der Messung aus. Stimmt aber nicht ganz, da zB ein eingebettes Element mit Icon in einem meiner Tests ValueLength dennoch erhöht hat, und zwar um ca. 6000 Byte. Aber das Problem kann man sicherlich umgehen, indem man die Anzahl der EmbeddedObjects auszählt und dadurch ValueLength um einen gewissen Faktor bereinigt.
Ein weiterer, gangbarer Weg wäre, über eine Schleife per item.size Methode sämtliche Items des Docs auszulesen, um zuverlässig die Gesamtgröße des Docs zu haben, abzgl. aller Attachements und anderen Embedded Objects. Vergleicht man dann den Wert von GetformattedText zur Gesamtgröße abzgl. aller Item.Sizes, sollte es auch gehen.
Letztlich?
Weiß nicht, ob sich dieser ganze Schmodder lohnt, besser wäre es, mit eine API C++ Methode das ganze auszulesen, so wie es das Midas Tool macht. Denn eines dabei ist n.n. berücksichtigt: wenn man den Text im RichText formatiert, kommen natürliuch weitere Bytes hinzu. Irgendwann wird der Abstand von Getformatted zu ValueLength so groß, daß man fälschlicherweise annehmen würde, daß Bilde im RT importiert sind.