TX Text Control ActiveX
Moderator: Moderatoren
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
TX Text Control ActiveX
Hallo
arbeitet jemand mit dem Tool "TX Text Control ActiveX" ?
Gibt es irgendwo einige Beispiele wie man mit dem Teil in Xbase++ einen einfachen HTML - Mail Editor baut?
arbeitet jemand mit dem Tool "TX Text Control ActiveX" ?
Gibt es irgendwo einige Beispiele wie man mit dem Teil in Xbase++ einen einfachen HTML - Mail Editor baut?
Valar Morghulis
Gruss Carlo
Gruss Carlo
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: TX Text Control ActiveX
Nur mal ganz auf die Schnelle als Anregung eine kurze Funktion von mir:
Den Text kannst man dann je nach Parameter p in verschiedenen Formaten abspeichern (oTxControl:SaveToMemory(p).
Code: Alles auswählen
******************************************************************************
Procedure BuildTx(oTxDlg, oTxC, aTxt, nTxEditmode)
LOCAL br := oTxDlg:Drawingarea:CurrentSize()[1]
LOCAL ho := oTxDlg:Drawingarea:CurrentSize()[2]
LOCAL oTxButtons, oTxRuler
oTxButtons := XbpActiveXControl():New(oTxDlg:Drawingarea, oTxDlg:Drawingarea, {0, ho - 28}, {br, 28})
oTxButtons:CLSID := CLSID_TXBUTTBAR
oTxButtons:Create()
oTxButtons:PosStyle := 0
oTxButtons:Appearance := 3
oTxButtons:Style := 3
oTxButtons:BorderStyle := 0
oTxRuler := XbpActiveXControl():New(oTxDlg:DrawingArea, oTxDlg:DrawingArea, {0, ho - 56}, {br, 28})
oTxRuler:CLSID := CLSID_TXRULER
oTxRuler:Create()
oTxRuler:BorderStyle := 0
oTxC := XbpActiveXControl():New(oTxDlg:Drawingarea, oTxDlg:Drawingarea, {0, 0}, {br, ho - 52})
oTxC:CLSID := CLSID_TXCONTROL
oTxC:License := TXCONTROL_KEY
oTxC:Create()
oTxC:ZoomFactor := 100 * M->oGDL:nSpFakt
oTxC:ViewMode := 0
oTxC:ButtonBarHandle := oTxButtons:hWnd
oTxC:RulerHandle := oTxRuler:hWnd
oTxC:TabKey := .T.
oTxC:FontName := "Arial"
oTxC:FontSize := 11
oTxC:BorderStyle := 0
if .not. empty(aTxt)
oTxC:LoadFromMemory(aTxt[1], aTxt[2], .T.)
endif
oTxC:EditMode := nTxEditmode
oTxC:PageMarginR := 1080 /* 1,5 cm */
oTxC:PageMarginL := 1080
oTxC:Refresh()
return
Viele Grüße
Wolfgang
Wolfgang
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: TX Text Control ActiveX
Hallo Wolfgang
Danke für den Code.
Woher hast du denn die Werte für CLSID_TXRULER und CLSID_TXBUTTBAR ?
Danke für den Code.
Woher hast du denn die Werte für CLSID_TXRULER und CLSID_TXBUTTBAR ?
Valar Morghulis
Gruss Carlo
Gruss Carlo
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: TX Text Control ActiveX
Hallo Carlo !
Das bekommst du zb. mit dem ActiveXHelper von http://www.nirsoft.net/ raus:Woher hast du denn die Werte für CLSID_TXRULER und CLSID_TXBUTTBAR ?
--
Hans-Peter
Hans-Peter
- Marcus Herz
- 1000 working lines a day
- Beiträge: 862
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: TX Text Control ActiveX
Du kannst bei CLSID auch den Namen des Controls übergeben, sogar ohne die Version
:clsid := "TIS.TX.TextControl"
:clsid := "TIS.TX.TextControl"
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: TX Text Control ActiveX
Danke Hans-Peter und Marcus für die Tips mit der CLSID.
Im Moment mühe ich mich mit einer Fehlermelung ab.
Dazu gibts hier im Forum auch schon einige ältere Beiträge die mich aber nicht weiterbrachten. ....
Im Moment mühe ich mich mit einer Fehlermelung ab.
Code: Alles auswählen
oError:description : Could not create ActiveX control
oError:filename : NIL
oError:genCode : 6503
oError:operation : XBPACTIVEXCONTROL:CREATE
oError:osCode : NIL
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: TX Text Control ActiveX
Schau mal, ob du die MS C++ Runtime 2008 und 2013 installiert hast, sonst scheitert es.
2008 vcredist_x86.exe https://www.microsoft.com/de-de/downloa ... x?id=26368
2013 vcredist_x86.exe https://www.microsoft.com/de-de/downloa ... x?id=40784
2008 vcredist_x86.exe https://www.microsoft.com/de-de/downloa ... x?id=26368
2013 vcredist_x86.exe https://www.microsoft.com/de-de/downloa ... x?id=40784
Viele Grüße
Wolfgang
Wolfgang
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: TX Text Control ActiveX
Hier die von mir verwendeten CLSIDs:
Code: Alles auswählen
#define CLSID_TXCONTROL "TIS.TX.TextControl.28"
#define CLSID_TXBUTTBAR "TIS.TX.ButtonBarControl.28"
#define CLSID_TXRULER "TIS.TX.RulerBarControl.28"
Viele Grüße
Wolfgang
Wolfgang
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: TX Text Control ActiveX
Gibt es einen Weg die Button und Ruler Zeile nach der Erstellung zu verschieben (Resize) ?
Das Text Control selbst lässt sich einfach "resizen".
Das Text Control selbst lässt sich einfach "resizen".
Valar Morghulis
Gruss Carlo
Gruss Carlo
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: TX Text Control ActiveX
Über Umwege geht es auch mit dem kompletten Resize des Editors.
Der folgende Code zeigt meinen Entwurf des HTML-Editors an dem ich jetzt weiterarbeite.
Der folgende Code zeigt meinen Entwurf des HTML-Editors an dem ich jetzt weiterarbeite.
Code: Alles auswählen
#include "Xbp.ch"
#include "common.ch"
#include "fileio.ch"
#include "appevent.ch"
#include "activex.ch"
#pragma Library( "ascom10.lib" )
// #define CLSID_TXCONTROL "{A2DF4C01-D18D-11EA-8340-A0481C909AC9}" // "TIS.TX.TextControl.29"
#define CLSID_TXCONTROL "TIS.TX.TextControl.29"
#define CLSID_TXCONTROLNAME "tx4ole29.ocx"
#define CLSID_TXBUTTBAR "TIS.TX.ButtonBarControl.29"
#define CLSID_TXRULER "TIS.TX.RulerBarControl.29"
#define TXCONTROL_KEY "TS-XXXXXXXXXXX" // Private Pers”nliche Serial Nummer
TxTextControl_RTFHTML_Editor(nil, nil, "HTML", "test.html", .t.,{|y,x|x:ZoomFactor:=150} )
******************************************************************************
function TxTextControl_RTFHTML_Editor(oParent, cTitel, cTextTyp, xText, lIsxTextFile, oSetupBlock )
local br, ho, oTxC
local oTxDlg, oTxButtons, oTxRuler, oXbp2, oXbp1, lSave := .f., arr1, nTextTyp, lExit := .f., nEvent, oXbp, mp1, mp2, i, t
local WindowsName := "TX-Text-HTML-Editor"
default oParent to setappwindow(), cTitel to "HTML-Editor", oSetupBlock to {||nil}
arr1 := u992SaveGetWinPos( "G" , oParent, WindowsName )
oTxDlg := XbpDialog():new( AppDesktop(), oParent , {arr1[1],arr1[2]}, {arr1[3],arr1[4]}, , .F.)
oTxDlg:taskList := .t.
oTxDlg:icon := 100
oTxDlg:title := cTitel
oTxDlg:create()
oTxDlg:show()
do while .t.
do case
case upper(cTextTyp) == "HTML"
nTextTyp := 4
case upper(cTextTyp) == "RTF"
nTextTyp := 5
otherwise
msgbox("Texttyp: "+ cTextTyp +" im Aufruf ist falsch" )
exit
endcase
if ! AutomationObject():isInstalled( CLSID_TXCONTROL )
if ask_y_nW( CLSID_TXCONTROLNAME + " kann nicht erkannt werden oder ist nicht installiert. Aufruf des Editors abbrechen?", oTxDlg, "J")
exit
endif
endif
br := oTxDlg:Drawingarea:CurrentSize()[1]
ho := oTxDlg:Drawingarea:CurrentSize()[2]
oTxDlg:close := {||lExit := iif(lSave .or. ask_y_nW("Abbruch ohne Speichern?", oTxDlg, "N"), .t. , .f. ) }
oTxC := XbpActiveXControl():New(oTxDlg:Drawingarea, oTxDlg:Drawingarea, {0, 30}, {br, ho - 52-34})
oTxC:CLSID := CLSID_TXCONTROL
oTxC:License := TXCONTROL_KEY
oTxC:Create()
oTxC:ZoomFactor := 100
oTxC:ViewMode := 0
oTxC:TabKey := .T.
oTxC:FontName := "Verdana"
oTxC:FontSize := 11
oTxC:BorderStyle := 0
if lIsxTextFile
if file(xText)
oTxC:load(xText, 0, nTextTyp, .f.) // .f. = Replace
endif
else
oTxC:LoadFromMemory(xText, nTextTyp, .f.)
endif
oTxC:EditMode := 0
oTxC:PageMarginR := 1080 /* 1,5 cm */
oTxC:PageMarginL := 1080
oTxC:PageWidth := 14000 // 1 Tick = 0.01388mm
oTxC:PageHeight := 20677 // 1 Tick = 0.01388mm
oXbp1 := XbpPushButton():new( oTxDlg:drawingArea, oTxDlg:drawingArea , {4,4}, {124,24} )
oXbp1:caption := "Speichern + Ende"
oXbp1:clipSiblings := .T.
oXbp1:tabStop := .T.
oXbp1:create()
oXbp1:activate := {||lSave := .t., postAppEvent( xbeP_Close) }
oXbp2 := XbpPushButton():new( oTxDlg:drawingArea, oTxDlg:drawingArea, {br-4-128,4}, {124,24} )
oXbp2:caption := "ABBRUCH"
oXbp2:clipSiblings := .T.
oXbp2:tabStop := .T.
oXbp2:create()
oXbp2:activate := oTxDlg:close
oTxDlg:drawingArea:resize := {||resize( @oTXDlg, @oTxC, @oTxButtons, @oTxRuler, @oXbp2) }
resize( @oTXDlg, @oTxC, @oTxButtons, @oTxRuler, @oXbp2)
eval( oSetupBlock, @oTXDlg, @oTxC )
setappwindow( oTxDlg )
setappfocus( oTxC )
oTxDlg:setModalState( XBP_DISP_APPMODAL )
nEvent := xbe_None
DO WHILE !lExit // nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
if nEvent != xbe_None
oXbp:handleEvent( nEvent, mp1, mp2 )
endif
ENDDO
u992SaveGetWinPos( "S" , oTxDlg, WindowsName )
if lSave
if lIsxTextFile
if nTextTyp = 4
t := oTxC:SaveToMemory( nTextTyp)
i := at( '<meta content="TX29_HTM', t )
if i != 0
t := stuff(t, i, at(chr(10), t, i)+1-i , "" )
endif
strfile( t, xText)
else
oTxC:save(xText, 0, nTextTyp)
endif
else
xText := oTxC:SaveToMemory( nTextTyp)
if nTextTyp = 4
i := at( '<meta content="TX29_HTM', xText )
if i != 0
xText := stuff(xText, i, at(chr(10), xText, i)+1-i , "" )
endif
endif
endif
endif
oTxC:destroy()
exit
enddo
oTxDlg:setModalState( XBP_DISP_MODELESS )
oTxDlg:destroy()
setappwindow( oParent )
return(lSave)
static function resize( oTXDlg, oTxC, oTxButtons, oTxRuler, oXbp2 )
local br := oTxDlg:Drawingarea:CurrentSize()[1]
local ho := oTxDlg:Drawingarea:CurrentSize()[2]
oXbp2:setpos( {br-4-128,4} )
if oTxButtons != nil
oTxButtons:destroy()
oTxButtons := nil
endif
if oTxRuler != nil
oTxRuler:destroy()
oTxRuler := nil
endif
oTxC:setposandsize( {0, 30}, {br, ho - 52 -34} )
oTxButtons := XbpActiveXControl():New(oTxDlg:Drawingarea, oTxDlg:Drawingarea, {0, ho - 28}, {br, 28})
oTxButtons:CLSID := CLSID_TXBUTTBAR
oTxButtons:Create()
oTxButtons:PosStyle := 0
oTxButtons:Appearance := 3
oTxButtons:Style := 3
oTxButtons:BorderStyle := 0
oTxRuler := XbpActiveXControl():New(oTxDlg:DrawingArea, oTxDlg:DrawingArea, {0, ho - 56}, {br, 28})
oTxRuler:CLSID := CLSID_TXRULER
oTxRuler:Create()
oTxRuler:BorderStyle := 0
oTxC:ButtonBarHandle := oTxButtons:hWnd
oTxC:RulerHandle := oTxRuler:hWnd
oTxC:Refresh()
setappfocus( oTxC )
return(nil)
Valar Morghulis
Gruss Carlo
Gruss Carlo
Re: TX Text Control ActiveX
Hallo Carlo
Wir sind auch gerade am Überlegen, wie man einen HTML-Editor sinnvoll in unser xBase-Programm integrieren könnte. Müssen denn auf jedem PC, welcher auf den TextControlActiveX-Editor zugreift, die MS C++ Runtime 2008 und 2013 installiert sein? Ich denke, das wäre für ein Update bei bestehenden Kunden ziemlich aufwändig...
Gruss Marco
Wir sind auch gerade am Überlegen, wie man einen HTML-Editor sinnvoll in unser xBase-Programm integrieren könnte. Müssen denn auf jedem PC, welcher auf den TextControlActiveX-Editor zugreift, die MS C++ Runtime 2008 und 2013 installiert sein? Ich denke, das wäre für ein Update bei bestehenden Kunden ziemlich aufwändig...
Gruss Marco
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: TX Text Control ActiveX
Eigentlich enthält der Satz redistrierbutierbarer Dateien der Komponente alles, was man braucht. Man muss es nur registrieren oder in die Manifest-Datei aufnehmen. Wir haben TX als Quasi-Replacement für MLEs mit unseren Anwendungen auf tausenden Rechnern im Einsatz. "Could not create ..." tritt so gut wie nie auf.Müssen denn auf jedem PC, welcher auf den TextControlActiveX-Editor zugreift, die MS C++ Runtime 2008 und 2013 installiert sein?
Herzlich,
Tom
Tom
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: TX Text Control ActiveX
Ja, die werden benötigt. Kann man aber unbeaufsichtigt z.B. in ein Innosetup-Script einbauen (habe ich jedenfalls gemacht, weil meist am PC eine der beiden C++ Runtimes fehlte).die MS C++ Runtime 2008 und 2013 installiert sein?
Viele Grüße
Wolfgang
Wolfgang
Re: TX Text Control ActiveX
Vielen Dank für die Infos.
@Tom:
Kannst Du mir sagen, wie man dies in die Manifest-Datei integrieren kann, um die manuelle Registrierung der einzelnen Komponenten zu umgehen?
Danke und Gruss
Marco
@Tom:
Kannst Du mir sagen, wie man dies in die Manifest-Datei integrieren kann, um die manuelle Registrierung der einzelnen Komponenten zu umgehen?
Danke und Gruss
Marco
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: TX Text Control ActiveX
Hallo, Marco.
Das Thema hatten wir hier schon x-fach, beispielsweise hier:
https://www.xbaseforum.de/viewtopic.php ... 51#p121851
Wir installieren meines Wissens keine C++-Runtimes mit, damit TX funktioniert.
Das Thema hatten wir hier schon x-fach, beispielsweise hier:
https://www.xbaseforum.de/viewtopic.php ... 51#p121851
Wir installieren meines Wissens keine C++-Runtimes mit, damit TX funktioniert.
Herzlich,
Tom
Tom
Re: TX Text Control ActiveX
Danke Tom für den Link und die Info. Werde es mal mit der Demoversion austesten.
Gruss, Marco
Gruss, Marco
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: TX Text Control ActiveX
Servus,
wer Interesse hat, ich hab mir gestern einen externen HTML-Editor gemacht, der über die Zwischenablage mit Xbase++ und natürlich anderen Programmen kommuniziert:
wer Interesse hat, ich hab mir gestern einen externen HTML-Editor gemacht, der über die Zwischenablage mit Xbase++ und natürlich anderen Programmen kommuniziert:
- Zwischenablage mit HTML-Code bestücken
- Externen Editor starten (der liest die Zwischenablage aus und zeigt den Code an)
- Bearbeiten und formatieren nach belieben, externen Editor schließen (neuer HTML-Code wird als Text in die Zwischenablage gestellt)
- Xbase++ - Programm HTML-Text aus der Zwischenablage auslesen lassen
- Anzeige in Xbase++ dann z. B. mit XbpHTMLWindow() oder XbpHTMLStatic()
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: TX Text Control ActiveX
Hallo Tom
richtig, das kann man.
Am besten liefert man dazu msvcr120.dll + mfc120u.dll und die dazu nötigen abhängigen DLL zusammen mit den eigenen DLL's aus. Das reicht und funktioniert sorglos nachdem TX registriert ist.
Ohne dass die erwähnten DLL's auf dem PC vorhanden sind und gefunden werden (durch mitgeliefert oder Inst. Runtime) läuft TX Control allerdings wirklich gar nicht.
Valar Morghulis
Gruss Carlo
Gruss Carlo
Re: TX Text Control ActiveX
Bin gerade etwas am Kämpfen was das Einfügen von Grafiken in TxControl anbelangt. Gibt es allenfalls einen Button, mit welchem Grafiken eingefügt werden können? Oder muss dies immer über die Zwischenablage erfolgen?
Zudem bleibt bei mir die Position der Grafik im generierten HTML-File nicht erhalten. Sobald die Grafik nicht linksbündig ist erscheint sie im erstellten File ganz rechtsbündig... Habt ihr vielleicht einen Tipp für mich?
Gruss Marco
Zudem bleibt bei mir die Position der Grafik im generierten HTML-File nicht erhalten. Sobald die Grafik nicht linksbündig ist erscheint sie im erstellten File ganz rechtsbündig... Habt ihr vielleicht einen Tipp für mich?
Gruss Marco
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: TX Text Control ActiveX
Bei mir funktioniert das mit dem Kontextmenu (rechte Maustaste) Hinzufügen - Bild.
Viele Grüße
Wolfgang
Wolfgang
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: TX Text Control ActiveX
Tabelle einfügen, Tabelle bearbeiten(Linienfarbe), Bild in Tabellenfeld einfügen - wäre ein einfacher Weg die Position des Bildes zu bestimmen.
Valar Morghulis
Gruss Carlo
Gruss Carlo
Re: TX Text Control ActiveX
Vielen Dank für den Tipp mit der Tabelle! So klappt es prima!!
Gruss Marco
Gruss Marco