ActiveX oder COM Komponenten

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Zur Navigation springen Zur Suche springen


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:

ActiveXObject()

DragDataObject()

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 )