Domino 9 und frühere Versionen > ND7: Entwicklung
RTF Feld an mehreren Positionen anzeigen...
(1/1)
RKuehle:
Hallo Forum,
meine Frage hat bestimmt eine gaaanz einfache Lösung, aber ich habe im Moment keine Idee dazu:
In einer Maske habe ich ein RTF-Feld welches durch Nutzer befüllt werden kann. In aller Regel ein jpg-Image.
Nun möchte ich den Feldinhalt (also das Image) nochmals an anderer Stelle in der Maske anzeigen.
Dort soll es allerdings wirklich nur dargestellt werden. Der Inhalt sollte also auch nur in einem Feld gespeichert werden müssen.
Hat jemand ein Stichwort, Wegweiser für mich ???
Grüße Ricardo
marschul:
Mmmh - dumm, dass sich sich ein RT-Feld nicht per Formel berechnet ;)
Folgendes habe ich mal auf die Schnelle probiert und es klappt, benötigt aber Feinschliff bzw. eine Idee, wo das Duplizieren am besten hinpasst:
Maske mit 2 Richtext-Feldern "Body1" & "Body2", erstes ist bearbeitbar, letzteres berechnet mit Formel @ThisValue (nur, damit es nicht bearbeitbar ist und etwas im Formelfenster steht).
Dann
--- Code: ---Sub Postsave(Source As Notesuidocument)
Dim oAktDoc As NotesDocument
Dim rt1 As NotesRichTextItem
Dim rt2 As NotesRichTextItem
Set oAktDoc = Source.Document
Set rt1 = oAktDoc.GetFirstItem("Body1")
Set rt2 = oAktDoc.GetFirstItem("Body2")
If Not rt2 Is Nothing Then rt2.remove
Set rt2 = New NotesRichTextItem(oAktDoc, "Body2")
rt2.AppendRTItem rt1
oAktDoc.Save True, False
End Sub
--- Ende Code ---
Nach Strg+S sind die Änderungen natürlich nicht sichtbar, Dok muss geschlossen & neu geöffnet werden, aber wenn man diese Idee z.B. in eine Schaltfläche packt, die das auch noch übernimmt, kommst Du Deinem Ziel näher.
Dumm nur, dass dann sämtliche RT-Inhalte doppelt / mehrfach im Dokument gespeichert sind (was mich selbst daran hindern würde, diese Idee je zum Einsatz zu bringen ;)).
Und: Der Codeschnipsel enthält keinerlei Errorhandling (wird hier richtigerweise gern kritisiert, aber das Beispiel soll auch nur eine Idee liefern) und kümmert sich auch nicht um irgendwelche $File-Items.
Schönes WE!
RKuehle:
Ich habe jetzt folgende Lösung gefunden. Vielleicht kann ja jemand sagen ob das so okay ist.
Grüße Ricardo
Bild -> das wirkliche Bild als RTF mit embedded Object
Bild_pseudo -> das "Anzeigefeld" des Bildes an anderer Position, auch RTF
Beide Felder sind normal bearbeitbar
Hier der Code im PostOpen des Dokumentes:
On Error Goto ProcessError
' Item und doc werden gebraucht um per Savetodisk das "Anzeigefeld" nicht zu speichern
Dim item As NotesItem
Dim doc As NotesDocument
Set doc=source.Document
Set item=doc.GetFirstItem("Bild_pseudo")
item.SaveToDisk = False
' Hier gehts eigentlich los
currentfield = source.CurrentField
' EditMode muss sein, da ansonsten das ganze Dokument selected wird
If source.EditMode = False Then source.EditMode = True
Call source.GotoField("Bild")
Call source.SelectAll
' Die vorige Zeile bringt Fehler 4407 wenn Feld Bild leer ist, dann processError
Call source.Copy
Call source.GotoField("Bild_pseudo")
Call source.Paste
Call source.refresh
Exit Sub
processError:
If Err = 4407 Then Exit Sub
Peter Klett:
Nicht schön an der Lösung ist, dass das Dokument bearbeitet werden muss. Damit muss jeder Leser des Dokuments Autorenrechte auf dem Dokument haben.
Was es an Replizierkonflikten gibt, wenn jeder "Leser" das Dokument beim Verlassen speichert, kann ich so nicht beurteilen.
Ich hatte mal damit experimentiert, ein Bild aus einem anderen Dokument im geöffneten Dokument anzuzeigen. Fiel mir gerade ein, hab da mal in der "Kramkiste" gesucht und das gefunden:.
Ich nahm ein Textfeld "berechnet zur Anzeige" mit sinngemäß dieser Formel:
tmp := @DbLookup (""; ""; "ansicht"; Schlüsselfeld; "Bild");
@If (@IsError (tmp); ""; tmp)
Das lief unter Notes 5 bis zu einer gewissen Größe von Bildern zuverlässig.
Vielleicht kannst Du versuchen, mittels DBLookup aus dem gleichen Dokument das Bild zu berechnen? Schlüssel könnte die UniversalID sein.
EDIT: Noch viel einfacher: Nimm ein Textfeld, berechnet zur Anzeige, und schreibe in den Vorgabewert den Namen des Richtextfeldes (also bei Dir: Bild). Habe ich in der "Kramkiste" ausprobiert, funktioniert (allerdings Notes 5, müsste sonst die andere Maschine booten ...).
EDIT 2: Funktioniert auch noch unter 7.0.3 und 8.5.1, das Dokument kann aber nicht gespeichert werden, wenn das Bild zu groß ist (Fehlermeldung: Feld ist zu groß (32K)). Ein Screenshot in Paint als jpg-Datei gespeichert und davon so etwa 9 x 9 cm ausgeschnitten, lässt sich speichern. Habe dann das Display-Feld problemlos mehrfach kopiert, es zeigt mir die Bilder auch noch öfter im selben Dokument an. Es hängt jetzt von Deinem Einsatzzweck ab, ob das genügt (Passbilder, kleine Produktfotos o.ä. könnten gehen).
RKuehle:
Hallo Peter,
du hast völlig recht. Autorenzugriff für alle Nutzer nur um reinzugucken ist unsinnig. Zumal, es ist wirklich eine Personal-DB, da sind die Leute sowieso sehr sensibel!
Dass man in einem reinen Textfeld auch Inhalte aus RTF-Feldern anzeigen kann, war mir so nicht bekannt. Daher ja der ganze Aufriss ;-( Und wieder was gelernt ;-)
Die Bilder sind wirklich eher "Passfotos", so gibts bei der Größe keine Probleme.
Ich sag nur: Herzlichen Dank für den Hinweis und deine Tests !!!
Grüße Ricardo
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln