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
Memoedit ersatz durch TxTextControl
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 105 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Memoedit ersatz durch TxTextControl
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):
"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.
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
Herzlich,
Tom
Tom
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
Re: Memoedit ersatz durch TxTextControl
Hallo Tom,
vielen Dank für die schnelle Antwort.
Werden das gleich am Montag mal versuchen.
Gruß Peter
vielen Dank für die schnelle Antwort.
Werden das gleich am Montag mal versuchen.
Gruß Peter
Gruss Peter