Seit ein paar Tagen beschäftige ich mich mit dem TX TextControl in FoxPro.
Dabei musste ich ein paar wirklich "nervtötende" Bugs hinnehmen.
Z.bsp. ist das Control nicht auf einem FoxPro Pageframe lauffähig.
Wenn das Control z.bsp. auf der 2. Page liegt kommt es unter bestimmten Umständen dazu dass das Control auf allen pages (Also auch !=2) sichtbar ist. Sozusagen durchscheint.
Auf meine Anfrage zum Support wurde mir bestätigt dass das Problem bei FoxPro / Com liegt und nicht behoben werden kann.
Als Workaraound hilft es das control auszublenden wenn das PageFrame auf dem das Control liegt, nicht sichtbar ist. Auch das ist aber nicht wirklich schön...
Ein weiteres Problem ist, dass das Control sich u.U. nicht so verhält wie man es erwartet. Wir setzen das Control als HTML Editor ein. Prinzipiel funktioniert das auch sehr gut. Funktionalitäten wie Export nach PDF etc ist toll.
Allerdings bekommt man Probleme wenn man folgndes durchführt:
- Text in dem Control schreiben & Formatieren
- Text in eine Varibale laden
- Text von der Variablen in das Control laden
- Text wieder aus dem Contorl laden in eine Variable laden
dann ist der HTML Code von 4. nicht mehr der Code den man bei 2. bekommen hat. Gerade Programme die mit OldVal prüfen ob isch ein Textgeändert haben bekommen dann probleme, da der Text sich ja "immer" ändert.
Auch dieses Problem wurde mir bestätigt und als nicht behebbar deklariert. Der Knackpunkt ist dass das Contorl intern ja ein eigenes Format != HTML hat.
Dies hat zurfolge dass jedes mal wenn man HTML abruft man einen HTML Export auslöst. Dieser muss nicht zwangsläufig das gleiche gernerieren wie das was das Control reinbekommen hat.
Man kann sich nur damit helfen das interne Format Wegzuschreiben, man bekommt da ein doublebyte ByteArray zurück. Dummerweise kann man das nicht in FoxPro "normalen" Memos speichern.
Dafür wird dann eine Base64 encodierung benötigt. Allerdings kann man dann wiederum nicht mehr in MEmos nach inhalten suchen, da Base64 keine Klarschrift mehr ist.
Das Umwandeln in Base64 und zurück sieht in FoxPro so aus:
* Abrufen des Textes im intenren Format als ByteArray
lca = thisform.olecontrol1.saveToMemoryBuffer("",3,.f.)
* Base64 Encodieren
lcBase = STRCONV(lca,13)
*... Code zum speichern & Laden in einem MEmo
*Beim laden DEcodieren wir zunächst das Base64 allerdings ist das ergebnis
* ein STring mit steuerzeichen statt eines BinaryArrays Deswgen dann der Binary aufruf
lcplain = CREATEBINARY(STRCONV(lcbase,14))
* Laden des Textes im internen format
thisform.olecontrol1.text =""
thisform.olecontrol1.loadFromMemory(lcPLain,3,.f.)
Falls jemand Lösungen für das HTML "Veränderungs" Problem kennt würde ich mich über Feedback freuen, auch hätte ich gerne Feedback darüber was ihr kennt was sonst noch so an dem Control Probleme bereiten kann
Das Problem dass der HTML string sich ändert tritt logischerweise auch in .NET auf. Das Problem das das Control afu Pageframes durchscheint nur in FoxPro (über Com).