Wenn die FireDAC VCL-Komponente im Embarcadero RAD Studio mit dem C++ Builder verwendet wird - siehe auch VCL FireDAC Komponente in C++ Builder Projekten nutzen - gibt es bei der Arbeit mit dem DOM-API folgende Punkte zu berücksichtigen:
-
Damit die für den DOM-Zugriff notwendige *.hpp-Datei innerhalb der List & Label-Komponente auch erstellt wird, muss diese zuvor über das Embarcadero RAD Studio hinzugefügt werden. Dafür aus dem Components-Verzeichnis
..\Beispiele\Delphi\FireDAC\Components\
das ProjektListLabel[xx]Components.dproj
laden und die DateiL[xx]dom.pas
hinzufügen und abspeichern. Im Anschluss gemäß der Anleitung des Artikels VCL FireDAC Komponente in C++ Builder Projekten nutzen fortfahren. -
Um ein Projekt via DOM zu referenzieren, ist es erforderlich, dass im Konstruktor das List & Label-Objekt übergeben wird. Dabei muss dieses wie folgt übergeben werden:
TLlDOMProjectList* proj =
new TLlDOMProjectList((L[xx]commoninterfaces::ILlDomParent*)*ListLabel);
-
Zugriff auf einzelne Elemente in diversen DOM-Listen wie bspw.
TLlDOMLayerList
,TLlDOMLayerList
etc. können nicht 1:1 dem Delphi-Code entnommen werden, da hier der Array/Index-Operator für Listenoperator[]
eine angepasste Syntax in C++ Builder erfordert, da der C++ Builder im Gegensatz zu Delphi keine “default”-Arrayeigenschaften unterstützt.Entweder man stellt den Name der Eigenschaft voran:
UnicodeString sLayerName = proj->Layers->Items[0]->Name;
Oder man führt eine explizite Dereferenzierung der Liste durch:
UnicodeString sLayerName = (*proj->Layers)[0]->Name;
So würde ein Code-Snippet im C++ Builder aussehen, um mit Hilfe der DOM-API ein Listen-Projekt zu öffnen, den Name der ersten Ebene abzufragen und den Druckernamen für den ersten Layoutbereich zu setzen:
...
UnicodeString projectFile = "<MyProjectFileName>";
// open an existing project file
TLlDOMProjectList* proj =
new TLlDOMProjectList((L[xx]commoninterfaces::ILlDomParent*)*ListLabel);
proj->Open(projectFile, TLlDOMFileMode::fmOpen, TLlDomAccessMode::amReadWrite);
// set the printer name for the first region - using
// explicit dereferencing for element access
(*proj->Regions)[0]->Device->Name = "\"<MyPrinterName>\"";
// get the first layer name - using
// the property name for element access
UnicodeString sLayerName = proj->Layers->Items[0]->Name;
// save and close project
proj->Save(projectFile);
proj->Close();
...