////////////////////////////////////////////////////////////////////// QuickReportのプリンタ設定(BCB4用) BCB付属のQuickReportは結構わがままで、Windowsのプリンタの設定を 無視してしまします。 と言うわけで、Windowsの設定をQuickReportに反映させる関数です (注) 面倒なのでエラー時の処理は書いていません。必要に応じて適当に追加してください。 //--------------------------------------------------------------------------- #include void SetPrinterSetting(TQuickRep *pQRep) //引数としてQuickReportのポインタを入れる { int intPrtIndex = -1; //使用するプリンタのインデックス。 //-1はデフォルトプリンタ PDEVMODE DevMode = NULL; // DEVMODE構造体へのポインタ char Dev[512],Driver[512],Port[512]; // デバイス、ドライバ、ポート名 // 現在選択されているプリンタの情報を取得 Printer()->GetPrinter( Dev, Driver, Port, (unsigned int)DevMode ); Printer()->GetPrinter( Dev, Driver, Port, (unsigned int)DevMode ); //プリンタ設定の保護(おまじない) DevMode = ( PDEVMODE )GlobalLock( DevMode ); char chrPrtName[256]; memset(chrPrtName,'\0',256); strcpy(chrPrtName,DevMode->dmDeviceName); // プリンタの名前からプリンタインデックスを取得 // Win95/98ではプリンタ名+ポートで取得されるの、以下の文字列検索が必要。 // NTの場合はプリンタ名のみなので単純な比較で済む。 int intDevCount = Printer()->Printers->Count; for(int n=0; nPrinters->Strings[n].c_str()); if(strstr(chrDevName, chrPrtName)){ intPrtIndex = n; } } // プリンタ設定 //使用するプリンタを変更 pQRep->PrinterSettings->PrinterIndex = intPrtIndex; //用紙サイズを変更 pQRep->Page->PaperSize = (TQRPaperSize)DevMode->dmPaperSize; //印刷方向を変更 pQRep->Page->Orientation = (TPrinterOrientation)DevMode->dmOrientation -1; // 以下、変更したい設定をDEVMODE構造体から取り出して、 // QuickReportのプロパティにセットする // プリンタ設定の保護終了 GlobalUnlock( DevMode ); } //--------------------------------------------------------------------------- //////////////////////////////////////////////////////////////////////