TxTextControl
Moderator: Moderatoren
TxTextControl
Nachdem mehrfach das TxTextControl empfohlen wurde, habe ich mir die Trial-Version installiert und versuche sie vergeblich, in mein Programm einzubinden. Ich habe aus dem Beitrag
http://www.xbaseforum.de/viewtopic.php? ... rol#p38867
die Funktion MyCreateTxControl(...) übernommen.
Beim oTxControl:create erhalte ich immer nur den Fehler 6500:
oError:description : Could not create ActiveX control
oError:filename : NIL
oError:genCode : 6503
oError:operation : XBPACTIVEXCONTROL:CREATE
oError:osCode : NIL
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
So werden meine Annäherungsversuche an dieses Tool im Keim erstickt. Gibt es irgendwo ein Mini-Standalone Beispiel, so wie beim XbpRTF unter Alaska\xppw32\source\samples\activex\editor. Habe zwar kaum Erfahrung mit der Anbindung von ActiveX, aber mit den Beispielen aus den msexcel und msword-Ordnern der Alaska-Samples war es z.B. ein leichtes, ein Excelsheet zu erzeugen und zu füllen oder eine Word-Datei aufzurufen. Aber hier komm ich mir grad wie der Depp vor...
http://www.xbaseforum.de/viewtopic.php? ... rol#p38867
die Funktion MyCreateTxControl(...) übernommen.
Beim oTxControl:create erhalte ich immer nur den Fehler 6500:
oError:description : Could not create ActiveX control
oError:filename : NIL
oError:genCode : 6503
oError:operation : XBPACTIVEXCONTROL:CREATE
oError:osCode : NIL
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
So werden meine Annäherungsversuche an dieses Tool im Keim erstickt. Gibt es irgendwo ein Mini-Standalone Beispiel, so wie beim XbpRTF unter Alaska\xppw32\source\samples\activex\editor. Habe zwar kaum Erfahrung mit der Anbindung von ActiveX, aber mit den Beispielen aus den msexcel und msword-Ordnern der Alaska-Samples war es z.B. ein leichtes, ein Excelsheet zu erzeugen und zu füllen oder eine Word-Datei aufzurufen. Aber hier komm ich mir grad wie der Depp vor...
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9358
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: TxTextControl
Hallo, lesny.
In dieser Zeile:
wird die CLSID für das Control gebaut, und diese ist versionsabhängig. Wenn Du eine aktuelle Trialversion zu TX 16 geladen hast, muss "cTextConVersion" "16" enthalten. Da die Variable später (bei ButtonBar usw.) noch genutzt wird, wäre empfehlenswert, sie irgendwo am Anfang zu bestücken. Dann müsste das Control auch entstehen.
Der Aufruf dieser Funktion sollte mit lokalen Variablen erfolgen (oTxControl,oTxButtonBar,oTxStatusBar) erfolgen, die dann, damit man sie im aufrufenden Dialog nutzen kann, per reference (also jeweils mit führendem @) übergeben werden sollten.
In dieser Zeile:
Code: Alles auswählen
'TIS.TX.TextControl.'+cTextConVersion
Der Aufruf dieser Funktion sollte mit lokalen Variablen erfolgen (oTxControl,oTxButtonBar,oTxStatusBar) erfolgen, die dann, damit man sie im aufrufenden Dialog nutzen kann, per reference (also jeweils mit führendem @) übergeben werden sollten.
Herzlich,
Tom
Tom
Re: TxTextControl
Hallo Tom,
zunächst danke für die prompte Antwort.
"cTextConVersion": Ich hatte es mit "16" und mit "16.0" versucht. Immer der gleiche Fehler.
Was muss eigentlich in diese Zeile?
Bei der Trial habe ich ja keine Lizenznummer, ich habe hier einen leeren String eingesetzt. Ob es daran liegt?
Stefan
zunächst danke für die prompte Antwort.
"cTextConVersion": Ich hatte es mit "16" und mit "16.0" versucht. Immer der gleiche Fehler.
Was muss eigentlich in diese Zeile?
Code: Alles auswählen
oTxControl:license := cTextConLicense
Stefan
Re: TxTextControl
Hallo Tom,
ich habe jetzt mal mit deiner Funktion ein Mini-Standalone-Beispiel gemacht:
Auch hier bekomme ich den gleichen Fehler:
Weil ich so grundlegend scheitere, habe ich mal eine virtuelle XP 32-bit Maschine gestartet und dort Alaska und TxTextControl V16 Trial installiert. Und siehe da: dort läuft dieses Beispiel. Kann es sein, dass TxTextControl mit ActiveX nicht kompatibel ist zu Windows 7 64-bit? Das wäre ja ein "Totschlag"-Argument gegen diese Komponente. Dann müsste ich gleich was anderes suchen.
ich habe jetzt mal mit deiner Funktion ein Mini-Standalone-Beispiel gemacht:
Code: Alles auswählen
#include "Xbp.ch"
#include "Appevent.ch"
#include "DLL.CH"
#include "activex.ch"
#PRAGMA LIBRARY( "ASCOM10.LIB" )
PROCEDURE Main()
LOCAL nEvent
LOCAL mp1 := NIL, mp2 := NIL, oXbp := NIL
LOCAL oForm
local oTxMenu
local oTxButtonbar
local oTxControl
local oTxStatusbar
oForm := XbpDialog():new( AppDesktop() )
oForm:taskList := .T.
oForm:title := "TxTextControl mit ActiveX"
oForm:drawingArea:clipChildren := .T.
oForm:create( ,,{100,100}, {640,480},, .F. )
oForm:close := {|| PostAppEvent( xbeP_Quit ) }
MyCreateTxControl(@oTxMenu,.t.,.t.,AppDesktop(), setAppWindow(), oForm:drawingarea, @oTxControl, @oTxButtonbar, @oTxStatusBar, "", .f. )
oForm:Show()
SetAppWindow( oForm )
SetAppFocus( oForm )
DO WHILE nEvent != xbeP_Quit
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
RETURN
PROCEDURE AppSys()
RETURN
FUNCTION MyCreateTxControl(oTxMenu,lResizeable,lEditAble,oOwner,oWindow, oDlgArea,oTxControl,oTxButtonBar,oTxStatusBar,cMemoText,lIsDatei )
Local oThread,cTxFile, oTwDlg
Local w,h,hbutton,htext,hstatus
local cTextConVersion := "16"
local cTextConLicense := ""
// 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
Code: Alles auswählen
------------------------------------------------------------------------------
FEHLERPROTOKOLL von "c:\Alaska\txtextcontrol\test\TXTEXT.EXE" Datum: 21.01.2011 15:51:29
Xbase++ Version : Xbase++ (R) Version 1.90.350
Betriebssystem : Windows Vista 06.01 Build 07600
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: O CLASS: XbpIWindow
-> VALTYPE: U VALUE: NIL
-> VALTYPE: A VALUE: {0, 20}
-> VALTYPE: A VALUE: {624, 390}
-> VALTYPE: U VALUE: NIL
-> VALTYPE: L VALUE: .T.
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Could not create ActiveX control
oError:filename : NIL
oError:genCode : 6503
oError:operation : XBPACTIVEXCONTROL:CREATE
oError:osCode : NIL
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
oError:thread : 1
oError:tries : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Called from MYCREATETXCONTROL(56)
Called from MAIN(23)
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9358
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: TxTextControl
Hallo, lesny.
Nein, das läuft unter 7/64, auch unter 2008/64.
Du musst mit der Trialversion einen Lizensierungsstring zum Testen bekommen haben. Der gehört in die Variable "cTextConLicense". Außerdem muss das Control auf jedem Rechner, auf dem es benutzt wird, registriert werden (dafür gibt es meiner Erinnerung nach eine EXE, die mit TX ausgeliefert wird, ansonsten "REGSVR32 TX4OLE16.OCX").
Nein, das läuft unter 7/64, auch unter 2008/64.
Du musst mit der Trialversion einen Lizensierungsstring zum Testen bekommen haben. Der gehört in die Variable "cTextConLicense". Außerdem muss das Control auf jedem Rechner, auf dem es benutzt wird, registriert werden (dafür gibt es meiner Erinnerung nach eine EXE, die mit TX ausgeliefert wird, ansonsten "REGSVR32 TX4OLE16.OCX").
Herzlich,
Tom
Tom
Re: TxTextControl
Hallo Tom,
ich habe keinen Lizenzierungsstring bekommen, einfach einen Downloadlink per E-Mail. Aber in XP läuft es mit leerem licensecode.
Regsvr32 hatte ich durchgeführt. Musste bei Win7 allerdings ein cmd-Fenster als Administrator ausführen.
Durch Zufall habe ich meine Anwendung spaßeshalber auch mal mit "Als Administrator ausführen" gestartet - und siehe da, das Control erschien! Scheint also ein Rechteproblem der ocx-Registrierung zu sein. Wenn ich regsvr32 in einem normalen cmd-Fenster ausführe, kommt der Hinweis, dass die Register-Routine nicht durchgeführt werden konnte.
Danke, Tom, für deine Unterstützung.
Stefan
ich habe keinen Lizenzierungsstring bekommen, einfach einen Downloadlink per E-Mail. Aber in XP läuft es mit leerem licensecode.
Regsvr32 hatte ich durchgeführt. Musste bei Win7 allerdings ein cmd-Fenster als Administrator ausführen.
Durch Zufall habe ich meine Anwendung spaßeshalber auch mal mit "Als Administrator ausführen" gestartet - und siehe da, das Control erschien! Scheint also ein Rechteproblem der ocx-Registrierung zu sein. Wenn ich regsvr32 in einem normalen cmd-Fenster ausführe, kommt der Hinweis, dass die Register-Routine nicht durchgeführt werden konnte.
Danke, Tom, für deine Unterstützung.
Stefan
Re: TxTextControl
Hallo Tom,
nach einigen Tests bin ich nun ein Stück schlauer: Auf Win7 64-bit kann ich das TxTextControl-ActiveX-Objekt nur aufrufen, wenn mein Xbase-Programm explizit als Administrator aufgerufen wird. Ansonsten gibt's immer den Fehler "Could not create ActiveX control". Da die TxTextControl-Demo auch ohne Administrator-Aufruf läuft, schätze ich, dass das ein Xbase-Problem ist. Aber das ist für mich jetzt erst mal nicht brisant, da der überwiegende Teil meiner Kunden wohl noch mit XP 32-bit unterwegs ist. Die anderen können ggf. meine Anwendung als Workaround immer als Administrator starten.
Ich hätte aber noch zwei Fragen zu deinem Beispiel MyCreateTxControl:
1. In der TxTextControl-Demo ist ein wunderschönes komplettes Menü mit allen Funktionen. Kann man dieses Standardmenü mit einem Befehl aufrufen oder hast du da auch ein fertiges Beispiel oder muss ich das wirklich alles "zu Fuß" einzeln Befehl für Befehl erzeugen?
2. Das Kontextmenü erscheint bei rechter Maustaste, ist aber funktionslos, wenn man etwas auswählt.
Nachtrag zu 2 (Problem behoben):
Habe eine Zeile geändert:
Stefan
nach einigen Tests bin ich nun ein Stück schlauer: Auf Win7 64-bit kann ich das TxTextControl-ActiveX-Objekt nur aufrufen, wenn mein Xbase-Programm explizit als Administrator aufgerufen wird. Ansonsten gibt's immer den Fehler "Could not create ActiveX control". Da die TxTextControl-Demo auch ohne Administrator-Aufruf läuft, schätze ich, dass das ein Xbase-Problem ist. Aber das ist für mich jetzt erst mal nicht brisant, da der überwiegende Teil meiner Kunden wohl noch mit XP 32-bit unterwegs ist. Die anderen können ggf. meine Anwendung als Workaround immer als Administrator starten.
Ich hätte aber noch zwei Fragen zu deinem Beispiel MyCreateTxControl:
1. In der TxTextControl-Demo ist ein wunderschönes komplettes Menü mit allen Funktionen. Kann man dieses Standardmenü mit einem Befehl aufrufen oder hast du da auch ein fertiges Beispiel oder muss ich das wirklich alles "zu Fuß" einzeln Befehl für Befehl erzeugen?
2. Das Kontextmenü erscheint bei rechter Maustaste, ist aber funktionslos, wenn man etwas auswählt.
Nachtrag zu 2 (Problem behoben):
Habe eine Zeile geändert:
Code: Alles auswählen
alt: oTxControl:RbDown := { |mp1, mp2, obj|oTxMenu:PopUp ( oDlgArea, mp1 , 1 ) }
neu: oTxControl:RbDown := { |mp1, mp2, obj|oTxMenu:PopUp ( obj, mp1 , 1 ) }
Zuletzt geändert von lesny am Di, 08. Feb 2011 15:34, insgesamt 1-mal geändert.
Re: TxTextControl
... und noch eine Frage:
Was muss man eigentlich an Kunden ausliefern?
Ich habe auf einem jungfräuliches XP die OCX-Komponte gespeichert und erfolgreich mit regsvr32 registriert. Läuft aber nicht, kommt wieder der Fehler beim Create vom ActiveXControl...
Nachtrag:
Problem gelöst. Ich habe TxTextControl gekauft und beim Aufruf nun meine Seriennummer angegeben. Damit läuft die Anwendung auch auf einem Test-Kunden-PC. Offenbar lässt sich die Trial-Version zwar auf dem Entwickler-PC verwenden, nicht aber verteilen.
Was muss man eigentlich an Kunden ausliefern?
Ich habe auf einem jungfräuliches XP die OCX-Komponte gespeichert und erfolgreich mit regsvr32 registriert. Läuft aber nicht, kommt wieder der Fehler beim Create vom ActiveXControl...
Nachtrag:
Problem gelöst. Ich habe TxTextControl gekauft und beim Aufruf nun meine Seriennummer angegeben. Damit läuft die Anwendung auch auf einem Test-Kunden-PC. Offenbar lässt sich die Trial-Version zwar auf dem Entwickler-PC verwenden, nicht aber verteilen.
-
- Cut&Paste-Entwickler
- Beiträge: 49
- Registriert: Fr, 17. Feb 2006 8:51
- Wohnort: München
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: TxTextControl
Hallo,
dank dieses Beitrages haben wir das TextControl auch zum Laufen gebracht. Jetzt stehen wir vor der Methode LoadSaveAttributes(). Hier hat man die Möglichkeit bei Übergabe eines Wertes das entsprechende Attribut auszulesen. Laut Definition im Handbuch kann ich dann per LoadSaveAttributes(37)=.t. auch einen Wert zuweisen, nur leider nicht mit XBase. Hat jemand schon mal diese Methode verwendet?
dank dieses Beitrages haben wir das TextControl auch zum Laufen gebracht. Jetzt stehen wir vor der Methode LoadSaveAttributes(). Hier hat man die Möglichkeit bei Übergabe eines Wertes das entsprechende Attribut auszulesen. Laut Definition im Handbuch kann ich dann per LoadSaveAttributes(37)=.t. auch einen Wert zuweisen, nur leider nicht mit XBase. Hat jemand schon mal diese Methode verwendet?