Autor Thema: Dateigröße abfragen (RTF)  (Gelesen 11057 mal)

Offline Andreas Huhn

  • Senior Mitglied
  • ****
  • Beiträge: 251
  • Geschlecht: Männlich
    • Private Homepage + eigene Software-Tools
Dateigröße abfragen (RTF)
« am: 27.09.05 - 08:09:13 »
Hallo,

in ein RichText-Feld soll eine Datei per Drag&Drop gezogen werden. Ab einer bestimmten Dateigröße soll eine Warnung ausgegeben werden. Wie kann ich die Größe der gedroppten Datei abfragen?

Viele Grüße,

Andreas

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Dateigröße abfragen (RTF)
« Antwort #1 am: 27.09.05 - 08:12:53 »
RTFM zu @AttachmentLengths( excludeMIMEBody )
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Dateigröße abfragen (RTF)
« Antwort #2 am: 27.09.05 - 08:15:47 »
Hi,

schau dir mal in der Designer-Hilfe die Eigenschaft FileSize aus der Klasse NotesEmbeddedObject an.

Beispiel aus der Hilfe:

Dim doc As NotesDocument
Dim rtitem As Variant
Dim object As NotesEmbeddedObject
Dim sizeInBytes As Long
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
  Set object = rtitem.GetEmbeddedObject( "City picture" )
  sizeInBytes = object.FileSize
End If


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

klaussal

  • Gast
Re: Dateigröße abfragen (RTF)
« Antwort #3 am: 27.09.05 - 08:17:29 »
Ich denke mal, das geht so alles nicht, wenn er die Grösse VORHER wissen will. Kenne da aber auch keine Lösung  :'(

Offline Andreas Huhn

  • Senior Mitglied
  • ****
  • Beiträge: 251
  • Geschlecht: Männlich
    • Private Homepage + eigene Software-Tools
Re: Dateigröße abfragen (RTF)
« Antwort #4 am: 27.09.05 - 08:21:40 »
Guten Morgen ihr beiden,

also es sind evtl. auch mehrere RTs vorhanden in die gedroppt werden soll. @AttachmentLengths liefert aber ja immer die gesamte Liste, wenn ich die Hilfe richtig verstanden hab.

Die Eigenschaft FileSize sieht sehr interessant aus. Aber welchem Ereignis soll ich diesen Code zuweisen? Dem RT OnChange?

Den Code versteh ich leider nicht ganz. Da das doch eine Funktion ist die unabhängig von der Datenbank wahrscheinlich öfter benötigt wird... habt ihr da vielleicht eine fertige Funktion?

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Dateigröße abfragen (RTF)
« Antwort #5 am: 27.09.05 - 08:33:29 »
Morgen,

Du willst also vor dem Attachen die Grösse der Datei wissen? Dann öffne die Datei zuerst als Stream (s.h. Hilfe) anschliessend kannst Du mit  dem Property "Bytes" auf die Anzahl Bytes, sprich die Dateigrösse zugreifen.

Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Dateigröße abfragen (RTF)
« Antwort #6 am: 27.09.05 - 08:41:31 »
Hi,

RTF-Felder haben die "manchmal unangenehme" Eigenschaft, dass das Dokument erstmal gespeichert, geschlossen und wieder geöffnet werden muss, damit man sauber mit Script darauf zugreifen kann.

Der OnChange-Event wird nicht immer zuverlässig ausgeführt. Ich würde es mal in QuerySave-Event der Maske versuchen.

Was verstehst du am Code nicht. In der Hilfe ist doch alles gut beschrieben.

... habt ihr da vielleicht eine fertige Funktion?

Was bringt dir eine fertige Funktion, wenn dir die Funktionsweise unklar ist? die Funktion setzt du dann ein und hoffst das sie funktioniert. Wenn nicht, oder wenn Anpassungen gemacht werden müssen, stehst du wieder da und weißt nicht was du machen musst.

Sei mir nicht böse, aber ich habe es schon oft erlebt, dass es heisst: ich habe mit den Code aus dem Internet gezogen und in meine DB übernommen und nun geht nix. Das bringt nix. Du musst verstehen was du machst.

Bei Problemen helfen wir gerne, aber erwarte von uns keine fertigen Problemlösungen.

Axel
  
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Dateigröße abfragen (RTF)
« Antwort #7 am: 27.09.05 - 08:57:03 »
Ich würde es mal in QuerySave-Event der Maske versuchen.

Ich habe mal ein bisschen probiert. Im QuerySave funktionierts nicht sauber. Bei einem neuen Dokument kann man nicht auf das RTF-Feld zugreifen (weil RTF-Feld erst nach dem Speichern "wirklich ansprechbar" ist). Nach dem ersten Speichern geht's. Im PostSave-Event funktioniert das Ganze. Wenn du nur eine Warnung ausgeben willst, reicht es.


Axel


Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Andreas Huhn

  • Senior Mitglied
  • ****
  • Beiträge: 251
  • Geschlecht: Männlich
    • Private Homepage + eigene Software-Tools
Re: Dateigröße abfragen (RTF)
« Antwort #8 am: 27.09.05 - 13:38:13 »
Okay...

ich habs jetzt so:

Code
Sub Postsave(Source As Notesuidocument)
	Dim doc As NotesDocument
	Dim rtitem As Variant
	Dim object As NotesEmbeddedObject
	Dim sizeInBytes As Long
	
'...set value of doc...
	Set doc = source.Document
	
	
	Set rtitem = doc.GetFirstItem( "A1" )
	If ( rtitem.Type = RICHTEXT ) Then
		Set object = rtitem.GetEmbeddedObject( "City picture" )
		sizeInBytes = object.FileSize
	End If
	
End Sub


Also ich versteh das so:

Zuerst muß ich der Objektvariable doc einen Verweis auf das aktuelle Dokument geben. Das wird der Funktion über den Parameter "Source" gleich mitgegeben.

Dann suche und befülle ich die Objektvariable "rtitem" mit dem Feld namens "A1"

Jetzt überprüfe ich nocheinmal ob es sich bei dem gefundenen Objekt auch wirklich um ein RichText-Feld handelt.

Wenn ja dann weise ich der Objektvariable "object" den Inhalt des Feldes "rtitem" zu, wobei dieser Inhalt den Dateinamen "City picture" hat (???)

Als letzten Schritt lese ich aus wieviele Bytes "object" nun hat.


Hab ich das so richtige verstanden / gemacht?

Wenn ja hab ich folgendes Problem: Den Namen des EmbeddedObject ("City picture") kenne ich ja nicht vorher.

Hoffe ihr seht auch daß ich mir wirklich Mühe gebe es zu verstehen..

MfG

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Dateigröße abfragen (RTF)
« Antwort #9 am: 27.09.05 - 13:51:13 »
Hab ich das so richtige verstanden / gemacht?

Du hast das richtig verstanden.

Das Ermitteln des/der Namen(s) der Anhänge ist auch kein großen Problem.

If rtitem.Type = RICHTEXT Then
   Forall objects In rtitem.EmbeddedObjects
      If objects.Type = EMBED_ATTACHMENT Then
         Messagebox objects.Name & ": " & Str(objects.FileSize)
      End If  'If objects.Type = EMBED_ATTACHMENT
   End Forall  'Forall objects In rtitem.EmbeddedObjects

End If  'If rtitem.Type = RICHTEXT 

Du muss deinen Code so erweitern. Mit einer Forall-Schleife durchläufst du alle Objekte im RTF-Feld. Handelt es sich dabei um einen Dateianhang wird der Name und die Größe angezeigt.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dateigröße abfragen (RTF)
« Antwort #10 am: 27.09.05 - 14:08:29 »
Moment - es geht doch hier um Drag & Drop und nicht um Attachments !

Bernhard

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Dateigröße abfragen (RTF)
« Antwort #11 am: 27.09.05 - 14:15:41 »
Es geht darum die Größe eines Attachments abzufragen. Das Attachment wird über Drag & Drop angehängt, das ist schon richtig. Aber hast du eine Chance die Größe schon während des Ablegens abzufragen. Ich denke nein, oder hast du eine Lösung.

Meines Erachtens geht es nur in den Maskenevents nach dem Speichern.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Andreas Huhn

  • Senior Mitglied
  • ****
  • Beiträge: 251
  • Geschlecht: Männlich
    • Private Homepage + eigene Software-Tools
Re: Dateigröße abfragen (RTF)
« Antwort #12 am: 27.09.05 - 14:19:41 »
Vielen Dank Axel, so klappt es!

Eine Frage noch, was ist der Unterschied zwischen
EMBED_ATTACHMENT
und
EMBED_OBJECT

beide tauchen in der Hilfe zu "EmbedObject method"  auf, ohne daß auf den Unterschied näher eingegangen wird. Wann würde ich EMBED_OBJECT hernehmen?

Daß es nicht direkt bei Drag&Drop (ein herzliches Danke an umi, aber das mit den Streams bekomm ich allein nie hin) geht ist schade, aber das ist schon mal eine Lösung die ihren Zweck erfüllt.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dateigröße abfragen (RTF)
« Antwort #13 am: 27.09.05 - 14:20:38 »
Aber hast du eine Chance die Größe schon während des Ablegens abzufragen. Ich denke nein, oder hast du eine Lösung.

Für den Prozess des Ablegens gibt es leider kein Event. Ich sehe dass genauso wie Du, Axel: Erst nach dem Speichern kann man da was machen.

Allerdings: Wenn ich Drag'n Drop mache (aus dem Explorer), dann bekomme ich ein eingebettetes Objekt und kein Attachment.

Bernhard

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Dateigröße abfragen (RTF)
« Antwort #14 am: 27.09.05 - 15:06:59 »
Allerdings: Wenn ich Drag'n Drop mache (aus dem Explorer), dann bekomme ich ein eingebettetes Objekt und kein Attachment.

Ich habe das mal probiert und kann das nicht nachvollziehen. Bei mir ist das ein Attachment. Die Abfrage
If objects.Type = EMBED_ATTACHMENT Then ist wahr.

Was ist denn bei dir anders?


Axel

« Letzte Änderung: 27.09.05 - 15:19:45 von Axel »
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dateigröße abfragen (RTF)
« Antwort #15 am: 27.09.05 - 15:11:09 »
Keine Ahnung. Ich habe ein normales RTF in einem Dokument, welches in einem Fenster zum Bearbeiten geöffnet ist. In einem anderen Fenster lungert der Explorer herum. Aus diesem ziehe ich nun ein PDF-File und lasse es ins RTF im anderen Fenster fallen ... und habe ein eingebettetes PDF-Objekt (was dann zu $Files und $OLEOBJINFO im Doc führt.

Bernhard

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Dateigröße abfragen (RTF)
« Antwort #16 am: 27.09.05 - 15:29:35 »
Ich hab's auch noch mal mit einem PDF probiert. Bei mir gibt's blos ein $Files und die Abfrage nach EMBED_ATTACHMENT ergibt wahr. Ist auch nur ein normales RTF-Feld in einem einfachen Dokument. Eine spezielle Einstellung, die so was regelt habe ich auch nicht gefunden.

Seltsam.   :-:

Aber was soll's, getreu dem Motto meines früheren Ausbilders:

Zitat
Alles was ihr nicht versteht müsst ihr als gegeben hinnehmen.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dateigröße abfragen (RTF)
« Antwort #17 am: 27.09.05 - 15:55:40 »
Jo, das müssen wir wohl als gegeben hinnehmen ... Ich erinnere mich noch daran, dass ich Ende der 90er in eine Applikation eine Grössenprüfung für eingefügte Bilder extra deswegen noch erweitern musste, weil es immer wieder Spezies fertig brachten, per Drag&Drop Objekte (!) in dem RTF für Bilder zu erzeugen (die dann natürlich sichtbar waren und auf den ersten Blick wie importierte Images aussahen).

Ich hab' jetzt extra nochmal nachgeschaut:
Code
		If docCurrent.HasItem ("$OLEOBJINFO") Then
			Set itemToRemove = docCurrent.GetFirstItem ("$OLEOBJINFO")
			While Not (itemToRemove Is Nothing)
				Call itemToRemove.Remove
				Set itemToRemove = docCurrent.GetFirstItem ("$OLEOBJINFO")
			Wend
		End If	

Wäre interessant zu wissen, welche Einstellung zu Anhängen und welche zu OLE Objekten führt ...

Bernhard

Offline Andreas Huhn

  • Senior Mitglied
  • ****
  • Beiträge: 251
  • Geschlecht: Männlich
    • Private Homepage + eigene Software-Tools
Re: Dateigröße abfragen (RTF)
« Antwort #18 am: 28.09.05 - 10:54:17 »
Hallo,

ich nochmal mit 2 kleinen Problemen.


[1] Wenn im RT mal keine Datei ist und das Dokument gespeichert wird (kommt ja auch mal vor) dann kommt die Fehlermeldung "Type Missmatch"

[2] Ich hab versucht eine Größenabfrage einzubauen, damit die Warnung nur angezeigt wird wenn die Datei mehr als 3MB groß ist. Aber das funktioniert nicht, die "Then"-Bedingung wird nicht mehr durchlaufen.

Der Code:

Code
Sub Postsave(Source As Notesuidocument)
	Dim doc As NotesDocument
	Dim rtitem As Variant
	Dim object As NotesEmbeddedObject
	Dim sizeInBytes As Long
	
'...set value of doc...
	Set doc = source.Document
	
	
	Set rtitem = doc.GetFirstItem( "A1" )
	
	If rtitem.Type = RICHTEXT Then
		Forall objects In rtitem.EmbeddedObjects
			Messagebox objects.FileSize
			If objects.Type = EMBED_ATTACHMENT And objects.FileSize > 3145728 Then ' 3MB Grenze
				Messagebox "Achtung: Die Datei " & objects.Name & " ist " & Trim(Str(Round(objects.FileSize / 1048576 ,2))) & _
				"MB groß!" &  _
				|
(Falls möglich sollte eine Konvertierung in ein speicherschonenderes Format erwogen werden. Z.B. BMP -> JPEG)|, 0+64,"Hinweis"
			End If 
		End Forall
	End If
	
End Sub

Könnt ihr mir sagen wo meine Fehler liegen?

Andreas

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Dateigröße abfragen (RTF)
« Antwort #19 am: 28.09.05 - 12:05:20 »
Hi,

zu [1]

du kannst mit doc.HasEmbedded abfragen, ob es im Dokument eingebettete Objekte oder Dateianhänge gibt.

If doc.HasEmbedded Then
   If rtitem.Type = RICHTEXT Then
                ...

End If
....


zu [2]

Wie hat denn deine If-Abfrage ausgesehen?


Axel


Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz