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