TX Text Control ActiveX

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2216
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 10 Mal
Danksagung erhalten: 38 Mal

TX Text Control ActiveX

Beitrag von ramses »

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?
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8494
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 24 Mal
Danksagung erhalten: 101 Mal
Kontaktdaten:

Re: TX Text Control ActiveX

Beitrag von Tom »

1. Ja.
2. Ja. Nächste Woche. Bin im Urlaub.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2216
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 10 Mal
Danksagung erhalten: 38 Mal

Re: TX Text Control ActiveX

Beitrag von ramses »

Tom hat geschrieben: Di, 20. Jul 2021 20:58 2. Ja. Nächste Woche. Bin im Urlaub.
Gerne, Danke.

Schönen Urlaub.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2742
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 4 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: TX Text Control ActiveX

Beitrag von Wolfgang Ciriack »

Nur mal ganz auf die Schnelle als Anregung eine kurze Funktion von mir:

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
Den Text kannst man dann je nach Parameter p in verschiedenen Formaten abspeichern (oTxControl:SaveToMemory(p).
Viele Grüße
Wolfgang
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2216
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 10 Mal
Danksagung erhalten: 38 Mal

Re: TX Text Control ActiveX

Beitrag von ramses »

Hallo Wolfgang

Danke für den Code.

Woher hast du denn die Werte für CLSID_TXRULER und CLSID_TXBUTTBAR ?
Valar Morghulis

Gruss Carlo
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 916
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 12 Mal
Danksagung erhalten: 5 Mal

Re: TX Text Control ActiveX

Beitrag von HaPe »

Hallo Carlo !
Woher hast du denn die Werte für CLSID_TXRULER und CLSID_TXBUTTBAR ?
Das bekommst du zb. mit dem ActiveXHelper von http://www.nirsoft.net/ raus:
TxTextControl.jpg
TxTextControl.jpg (408.16 KiB) 270 mal betrachtet
--
Hans-Peter

Organisator der XUG Stuttgart
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 410
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 13 Mal
Danksagung erhalten: 62 Mal
Kontaktdaten:

Re: TX Text Control ActiveX

Beitrag von Marcus Herz »

Du kannst bei CLSID auch den Namen des Controls übergeben, sogar ohne die Version
:clsid := "TIS.TX.TextControl"
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2216
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 10 Mal
Danksagung erhalten: 38 Mal

Re: TX Text Control ActiveX

Beitrag von ramses »

Danke Hans-Peter und Marcus für die Tips mit der CLSID.


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
Dazu gibts hier im Forum auch schon einige ältere Beiträge die mich aber nicht weiterbrachten. ....
Valar Morghulis

Gruss Carlo
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2742
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 4 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: TX Text Control ActiveX

Beitrag von Wolfgang Ciriack »

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
Viele Grüße
Wolfgang
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2742
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 4 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: TX Text Control ActiveX

Beitrag von Wolfgang Ciriack »

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
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2216
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 10 Mal
Danksagung erhalten: 38 Mal

Re: TX Text Control ActiveX

Beitrag von ramses »

Hallo Wolfgang

Danke für den Tip mit den Runtimes. Das war es.
Valar Morghulis

Gruss Carlo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2216
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 10 Mal
Danksagung erhalten: 38 Mal

Re: TX Text Control ActiveX

Beitrag von ramses »

Gibt es einen Weg die Button und Ruler Zeile nach der Erstellung zu verschieben (Resize) ?
Das Text Control selbst lässt sich einfach "resizen".
Valar Morghulis

Gruss Carlo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2216
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 10 Mal
Danksagung erhalten: 38 Mal

Re: TX Text Control ActiveX

Beitrag von ramses »

Ü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.

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
Antworten