Memoedit ersatz durch TxTextControl

Auf dem Weg von Clipper, FoxPro u.ä. nach Xbase++

Moderator: Moderatoren

Antworten
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Memoedit ersatz durch TxTextControl

Beitrag 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
Gruss Peter
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Memoedit ersatz durch TxTextControl

Beitrag 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.
Herzlich,
Tom
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Memoedit ersatz durch TxTextControl

Beitrag von Peter Schweizer »

Hallo Tom,
vielen Dank für die schnelle Antwort.
Werden das gleich am Montag mal versuchen.

Gruß Peter
Gruss Peter
Antworten