Drucker einrichten um Worddokument auszudrucken
-
Hallo,
ich habe vor kurzem ja die Anbindung eines TWordDocument- und TWordApplikation-Objekt hinbekommen. Jetzt hat sich bei mir ein neues Problem herausgestellt. Da mein Dokument selbstständig gedruckt wird (aus Word heraus), möchte ich vorab gerne den Drucker auswählen. Wie kann ich das realisieren. Mit dem TPrinterSetupDialog-Objekt lässt sich ja nur der Drucke für mein eigenes Programm konfigurieren aber nicht für Word.
-
Ha, ich habe schon etwas gefunden.
WordApplication1->ActivePrinter = ....;
Problem ist, dass ich dieser Variable einen String übergeben muss, der den Namen eines Druckers beinhaltet. Wie komme ich an die Namen der installierten Drucker?
-
Hallo,
Schau mal in die Hilfe zu TPrinter. Dort achte besonders auf die Eigenschaft Printers.
-
Danke dir,
zwar ist meine BCB-Hilfe defekt aber ich schaue mal. Irgend wie gibt die Funktion eine TString-Objekt zurück.
-
Ein TStrings-Objekt. Das kannst du behandeln wie seinen Nachkommen TStringList.
-
Hey, erstmal, ich denke ich bin auf dem richtigen Weg.
Habe es wie folgt gemacht:AnsiString dummy = Printer->Printers->Strings[Printer->PrinterIndex]; WordApplication1->ActivePrinter = dummy ;
Leider muss ich ja ActivePrinter wchat_t* zeiger übergeben. Da sonst das folgende ausgegeben wird
*[C++ Fehler] Certification.cpp(61): E2031 Typumwandlung von 'AnsiString' nach 'wchar_t ' nicht zulässig
Sorry, hört sich bestimmt mega blöde an aber wie kann ich das nochmal realisieren?
Nicht böse sein, dass ich eine so simple frage stelle.
-
Mach aus deinem AnsiString einen WideString und hole dir dann dein wchar_t Array über dessen Memberfunktion c_bstr().
Keine Ahnung ob das funktioniert. wchar_t-Arrays sollte man eigentlich so nicht einfach zuweisen.
-
Ich danke dir für deine Mühen.
Es klappt zwar noch nicht aber ich kann schon mal compilieren. Werde mich wieter damit beschäftigen.
-
Ha, läuft. Danke nochmal. Hier die Lösung:
void __fastcall TFormCerti::Button1Click(TObject *Sender) { ThePrinter = Printer(); // Funktionsvariablen Variant vWhat; Variant vBookmark; OleVariant Filename; Variant Save = false; AnsiString Name = "Name"; AnsiString Start = "Start"; AnsiString Ende = "Ende"; AnsiString USER = "USER"; AnsiString PASSWORD = "PASSWORD"; AnsiString Datum = "Datum"; if (!PrinterSelect) { if (PrinterSetupDialog1->Execute()) { PrinterSelect = true; } } if (PrinterSelect) { if (RadioGroup1->ItemIndex == 0) { Filename = ExtractFilePath(ParamStr(0))+"seavis_password_5_DE_xxx.doc"; } else { Filename = ExtractFilePath(ParamStr(0))+"seavis_password_5_EN_xxx.doc"; } WordApplication1->Connect(); WordApplication1->Documents->OpenOld(Filename,EmptyParam, EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam); AnsiString t =WordApplication1->ActivePrinter; WordDocument1->ConnectTo(WordApplication1->ActiveDocument); WideString dummy = ThePrinter->Printers->Strings[ThePrinter->PrinterIndex]; WordApplication1->ActivePrinter = dummy.c_bstr() ; // WordApplication1->Visible = true; vWhat = wdGoToBookmark; if (EditAnrede->Text == "" || EditAnrede->Text == "-" || EditAnrede->Text == " ") { vBookmark = Name.c_str(); WordApplication1->Selection->GoTo(vWhat, EmptyParam, EmptyParam, vBookmark); WordApplication1->Selection->TypeText(StringToOleStr(Form_Main->EditName->Text)); } else { vBookmark = Name.c_str(); WordApplication1->Selection->GoTo(vWhat, EmptyParam, EmptyParam, vBookmark); WordApplication1->Selection->TypeText(StringToOleStr(EditAnrede->Text + " " + Form_Main->EditName->Text)); } vBookmark = Start.c_str(); WordApplication1->Selection->GoTo(vWhat, EmptyParam, EmptyParam, vBookmark); WordApplication1->Selection->TypeText(StringToOleStr(EditStart->Text)); vBookmark = Ende.c_str(); WordApplication1->Selection->GoTo(vWhat, EmptyParam, EmptyParam, vBookmark); WordApplication1->Selection->TypeText(StringToOleStr(EditEnde->Text)); vBookmark = USER.c_str(); WordApplication1->Selection->GoTo(vWhat, EmptyParam, EmptyParam, vBookmark); WordApplication1->Selection->TypeText(StringToOleStr(Form_Main->PwName->Text)); vBookmark = PASSWORD.c_str(); WordApplication1->Selection->GoTo(vWhat, EmptyParam, EmptyParam, vBookmark); WordApplication1->Selection->TypeText(StringToOleStr(Form_Main->PwCRC->Caption)); vBookmark = Datum.c_str(); WordApplication1->Selection->GoTo(vWhat, EmptyParam, EmptyParam, vBookmark); WordApplication1->Selection->TypeText(StringToOleStr(EditDatum->Text)); WordDocument1->PrintOut(); Sleep(3000); WordDocument1->Close(Save, Save ,Save); WordDocument1->Disconnect(); WordApplication1->Quit(); WordApplication1->Disconnect(); } }
Nicht schön aber läuft.