お世話になっております。
タイトル通りDelphiからCrystalReportsの用紙サイズを指定して出力する方法をご教授願いたいです。
以下、作成途中のソースコードです。
procedure TForm1.Button1Click(Sender: TObject);
type
// TBinNoArray = array[0..9999] of WORD;
// PBinNoArray = ^TBinNoArray;
// TBinName = array[0..23] of Char;
// TBinNameArray = array[0..9999] of TBinName;
// PBinNameArray = ^TBinNameArray;
TPaperNoArray = array[0..9999] of WORD;
PPaperNoArray = ^TPaperNoArray;
TPaperName = array[0..63] of Char;
TPaperNameArray = array[0..9999] of TPaperName;
PPaperNameArray = ^TPaperNameArray;
var
Device, Driver, Port: array[0..79] of char;
DeviceMode: THandle;
i,j,pindex;
S:String;
pDevMode: PDeviceMode;
begin
S:= 'プリンター名';
pindex := Printer.Printers.IndexOf(S);
if pindex < 0 then
begin
showmessage('プリンターが見つかりませんでした。');
exit;
end;
Printer.PrinterIndex := pindex;
Printer.GetPrinter(Device, Driver, Port, DeviceMode);
pDevMode := GlobalLock(DeviceMode);
try
//----------------------------------------
//用紙サイズのインデックス取得処理(省略)
//・対象プリンタの用紙サイズ一覧を取得
// DeviceCapabilities使用
//・一覧から設定したい用紙サイズのインデックスを取得
//----------------------------------------
pDevMode^.dmPaperSize := 取得した用紙サイズインデックス;
finally
GlobalUnlock(DeviceMode);
end;
Printer.SetPrinter(Device, Driver, Port, DeviceMode);
Crpe1.Printer.Name := StrPas(Device);
Crpe1.Printer.Driver := StrPas(Driver);
Crpe1.Printer.Port := StrPas(Port);
Crpe1.Printer.Mode := DeviceMode;
Crpe1.CloseWindow;
Crpe1.ReportName:='\\"パス"\"レポート".rpt';
// Printer.PreserveRptSettings := [prOrientation, prPaperSize, prPaperSource];
Crpe1.Execute;
try
Crpe1.PrintWindow;
except
showmessage('error');
Exit;
end;
end;
DeviceModeにて用紙サイズを指定しているのですが、うまく用紙サイズが変わってくれません。
ここを直せばいい、ここをこうしたほうがいいなどありましたら、どうかご教授ください。よろしくお願い致します。
※ソースは抜粋してきたのでコンパイルが通るか確認しておりません。
ご了承ください。
環境を書き忘れました。すみません。
・DelphiXE
・CrystalReports XI R2 SP6です。
よろしくお願い致します。
ツイート | ![]() |