Seite 1 von 1

Memoedit ersatz durch TxTextControl

Verfasst: Fr, 30. Okt 2009 10:00
von Peter Schweizer
Hallo Leute,
ich mache gerade eine Migration von einem Clipper Programm auf xbase 1.9 und möchte meine Memoedit-Funktion durch das TxTextControl ersetzen.
Meine Texte möchte ich als RTF weiterhin in Memofeldern abspeichern und dem User ein paar Textverarbeitungs-Funktionen wie Fett,Unterstrichen,Font usw.mit anbieten.

Gibt es hierzu irgendwo einen Beispielcode und/oder eine schematische Vorgehensweise damit ich das Rad nicht neu erfinden muß ?

Ein für Tips und Tricks dankbarer Schwabe !

Gruß Peter

Re: Memoedit ersatz durch TxTextControl

Verfasst: Fr, 30. Okt 2009 10:21
von Tom
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( {"Einfgen",{ || 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.

Re: Memoedit ersatz durch TxTextControl

Verfasst: Fr, 30. Okt 2009 16:47
von Peter Schweizer
Hallo Tom,
vielen Dank für die schnelle Antwort.
Werden das gleich am Montag mal versuchen.

Gruß Peter