ActiveX oder COM Komponenten
Beschreibung
ActiveX und COM sind zwei Konzepte, die in verschiedener Art und Weise eine Interaktion zwischen Benutzer und Anwendung ermöglichen.
Sie werden in Xbase++ über die Klasse AutomationObject() bereitgestellt.
Von AutomationObject() abgeleitete Klassen sind:
die ihrerseits wieder Subklassen bereitstellen.
Durch diese Klassen bzw. die abgeleiteten Subklassen können bestimmte Windows-Controls in Xbase++-Programme eingebunden werden, bzw. Interaktionen mit Programmen durchgeführt werden, für die entsprechende COM-Schnittstellen zur Verfügung stehen.
Beispiel für eine COM-Anwendung
Über SQLExpress oder die ODBCDBE kann ein Zugriff auf in Excel-Dateien hinterlegte Daten durchgeführt werden, und zwar sowohl lesend als auch schreibend.
Muss jedoch z.B. eine Formatierung geändert werden, scheiden diese beiden Möglichkeiten aus. Ein auf Excel basierendes AutomationObject() kann jedoch Formatierungen ändern, Funkionen einfügen - quasi alles, was ein menschlicher Sachbearbeiter in Excel auch durchführen kann, automatisiert allerdings.
Beispiel für die Nutzung eines ActiveX Controls
Xbase++ verfügt nicht über eine native Control, mit der man ein Datum aus einem "Kalender" auswählen kann. Es ist jedoch möglich, auf die ActiveX-Control DatePicker zuzugreifen und diesen in ein Xbase++ Programm einzubinden.
Liste der Xbase++-Klassen
Beispiele
Drucken über Word
Hier ein Beispiel von mir. Es wird eine Datei zum Drucken an Word übergeben. Die Datei "filbestandliste2.rtf" wird gedruckt mit Seite von bis. Die Datei "maengel.rtf" mit Anzahl der eingebenen Kopien.
#include "Gra.ch" #include "Xbp.ch" #include "Appevent.ch" #include "Font.ch" #include "Inkey.ch" #include "xbpdev.ch" #include "activex.ch" #include "xbpdev.ch" #define wdPrintFromTo 3 #pragma Library( "XppUI2.lib" ) #pragma library( "ascom10.lib" ) Function Drucken( cDoc, cDrucker,oPrinter) Local cActivePrinter, aSeite:={}, nCopie:=0 Local oWord Local oDoc oWord := CreateObject("Word.Application") IF Empty( oWord ) MsgBox( "Microsoft Word ist nicht installiert" ) RETURN Nil ENDIF oWord:visible := .f. // Word unsichtbar! cActivePrinter := oWord:Activeprinter // aktuellen Drucker feststellen oWord:Activeprinter:= cDrucker // Neuen Drucker setzen oWord:documents:Open(cDoc) oDoc := oWord:ActiveDocument Do Case Case AT("filbestandliste2.rtf",cDoc) > 0 aSeite:=oDlg:pageRangeSelected oDoc:PrintOut(.f.,Nil,wdPrintFromTo,Nil,alltrim(str(aSeite[1])),alltrim(str(aSeite[2])),Nil,1 ) Case AT("maengel",cDoc) > 0 nCopie:=oPrinter:SetNumCopies() oDoc:PrintOut(.f.,Nil,Nil,Nil,Nil,Nil,Nil,nCopie ) Otherwise oDoc:PrintOut(.f.) EndCase oWord:Activeprinter:= cActivePrinter // alten Drucker setzen oDoc:close() oWord:Quit() oWord:destroy() oWord := NIL Return ( NIL )