Hallo, Peter.
TX besteht aus mehreren Controls, nämlich einmal dem TextControl selbst (das dann Dein MLE-Replacement wäre), dann noch Ruler- und Buttonbars. Die beiden letztgenannten kann man natürlich auch selbst bauen, also einfach eigene Buttons einbauen und die entsprechenden Funktionen auslösen (z.B. den markierten Bereich des Textes fett setzen). Einfacher ist es aber mit den hauseigenen Controls.
Ich nutze eine allgemeine Funktion "MyCreateTxControl", um die Controls einzubinden. Die Objekte oTxMenu,oTxButtonBar und oTxStatusBar werden per Reference übergeben, damit man sie in der aufrufenden Funktion manipulieren kann. So funktioniert dann eine einfache Einbindung (es entsteht außerdem ein Kontextmenü - rechte Maustaste):
Code: Alles auswählen
FUNCTION MyCreateTxControl(oTxMenu,lResizeable,lEditAble,oOwner,oWindow, oDlgArea,oTxControl,oTxButtonBar,oTxStatusBar,cMemoText,lIsDatei )
Local oThread,cTxFile, oTwDlg
Local w,h,hbutton,htext,hstatus
DEFAULT lIsDatei TO .F.
w:=oDlgArea:currentSize()[1]
h:=oDlgArea:currentSize()[2]
hButton := if(lEditAble,32,0)
hstatus := 20
htext := h-(hbutton+hstatus)
oTxControl := XbpActiveXControl():new( oDlgArea )
oTxControl:CLSID := 'TIS.TX.TextControl.'+cTextConVersion
oTxControl:license := cTextConLicense
oTxControl:create(oDlgArea,,{0,hstatus},{w,htext} )
oTxControl:Userevents := .F.
if lEditable
// Buttonbar
oTXButtonBar := XbpActiveXControl():new( oDlgArea )
oTXButtonBar:CLSID := 'TIS.TX.ButtonBarControl.'+cTextConVersion
oTXButtonBar:create(oDlgArea,,{0,hstatus+htext},{w,hbutton} )
oTxButtonBar:Userevents := .F.
endif
// Statusbar
oTXStatusBar := XbpActiveXControl():new( oDlgArea )
oTXStatusBar:CLSID := 'TIS.TX.StatusBarControl.'+cTextConVersion
oTXStatusBar:create(oDlgArea,,{0,0},{w,hstatus} )
oTxStatusBar:Userevents := .F.
if lEditAble
oTxControl:ButtonBarHandle := oTXButtonBar:hWnd
oTXButtonBar:Enabled := .T.
oTXButtonBar:Language := 49
oTXButtonBar:Appearance := 2
oTXButtonBar:PosControlChars := 1
endif
oTxControl:StatusBarHandle := oTXStatusBar:hWnd
oTXStatusBar:Enabled := .T.
oTXStatusBar:Language := 49
oTXControl:Enabled := .T.
oTXControl:EditMode := if(lEditAble,0,1)
oTxControl:InsertionMode := .T.
oTXControl:PageHeight := 16160
oTXControl:ScrollBars := 3
oTXControl:SizeMode := 0
oTXControl:FontName := "Tahoma"
oTXControl:FontSize := 12
oTXStatusBar:TextColumn := "Spalte"
oTXStatusBar:TextLine := "Zeile"
oTXStatusBar:TextPage := "Seite"
oTXStatusBar:FontName := "Tahoma"
if len(cMemoText) > 0
if lIsDatei
oTXStatusBar:Text := (cMemoText)
oTxControl:RTFImport(cMemoText)
else
if left(cMemoText,5) = "{\rtf"
oTxControl:RTFSelText := cMemoText
else
oTxControl:Text := (hardcr(cMemoText))
endif
endif
endif
if lEditable
oTxMenu := XbpMenu():new( oDlgArea):create()
oTxMenu:AddItem( {"Formatieren (Schrift)",{ || oTxControl:FontDialog(),SetAppFocus(oTxControl) } } )
oTxMenu:AddItem( {NIL, NIL, XBPMENUBAR_MIS_SEPARATOR, 0 } )
oTxMenu:AddItem( {"L”schen",{ || oTxControl:Clip(4) } } )
oTxMenu:AddItem( {"Ausschneiden",{ || oTxControl:Clip(1) } } )
oTxMenu:AddItem( {"Kopieren",{ || oTxControl:Clip(2) } } )
oTxMenu:AddItem( {"Einfgen",{ || oTxControl:Clip(3) } } )
oTxControl:RbDown := { |mp1, mp2, obj|oTxMenu:PopUp ( oDlgArea, mp1 , 1 ) }
endif
RETURN oTxControl
"cMemoText" kann ein unformatierter Text ODER ein RTF-Text sein. Wenn "lIsDatei" auf .T. steht, lädt das Ding aus einer RTF-Textdatei. Das ist sehr rock-bottom und kann noch erweitert werden. In der entsprechenden Darstellungsroutine muss dann noch dafür gesorgt werden, dass der Text am Ende wieder weggespeichert wird, außerdem kann man dort Buttons für Ausdruck und ähnliches einbauen. "cTextConVersion" ist ein Static oder Public mit der Versionsnummer von TX, analog dann bei der CLSID.