フォームとMSFlexグリッドのハードコピー方法

このQ&Aのポイント
  • フォームとそのフォーム上にあるMSFlexグリッドのハードコピーを、コマンドボタンのクリック一発で行える方法を教えてください。
  • PrintFormメソッドを使ってフォームとMSFlexグリッドの内容を印刷しようとしていますが、MSFlexグリッドの部分が真っ黒に印刷されてしまいます。
  • 解決方法をご存知の方は、ぜひ教えてください。お願いします。
回答を見る
  • ベストアンサー

フォームとその上にあるMSFlexグリッドのハードコピー方法

フォームとそのフォーム上にあるMSFlexグリッドの ハードコピーを、やはりそのフォーム上に設けたコマンド ボタンのクリック一発で行えるようにしたいのです。 下記の構文で、PrintFormメソッドを使ってやってみましたが、 MSFlexグリッドの部分が真っ黒に印刷されてしまいます。 With Printer .PaperSize = vbPRPSA4 .Orientation = vbPRORLandscape End With Form_Ichiran.PrintForm   どなたかご存知の方、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

どもども田吾作7です。 どうやらOCXのコントロール類はPrintFormの対象になってくれないようですね。 実験して初めて知りました。(-ロ-;グハッ ですので、フォームのデバイスコンテキストを使用したら、うまくいったみたいなので、ご報告いたします。 With Me 'フォームのスケールモードをピクセルにします。 .ScaleMode = vbPixels 'Printerオブジェクトのスケールをピクセルにします。 Printer.ScaleMode = vbPixels 'Printerオブジェクトの出力を促します。 Printer.Print 'Printerオブジェクトへフォームを描画します。 Call StretchBlt(Printer.hdc, 0, 0, Printer.ScaleWidth, Printer.ScaleHeight, .hdc, 0, 0, .ScaleWidth, .ScaleHeight, vbSrcCopy) 'Printer オブジェクトに送っているドキュメントを終了し、印刷デバイスやスプーラに出力処理の制御を渡します。 Printer.EndDoc End With ってな感じでしょうか? あらかじめフォームをピクセルにしておいたら一行省略できると思います。 StretchBltで、Printオブジェクトのサイズに、フォームを描画しているので、あらかじめPrinterオブジェクトのWidth/Heightを設定してあげると、間延びした印刷にはならないと思います。 でわでわ

その他の回答 (1)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

再度、田吾作7です。 返事が無いところを見ると、解決したのかな? それともわからなくて困ってるのかな? もしそうだとしたら、遠慮なく質問してくださいね。

72ric4001fg
質問者

お礼

お礼が大変に遅れてしまいました。 本当に助かりました。どうもありがとうございます。 客先に10日以上も詰めて、火を噴いたプロジェクトの 納品作業をやっており、まったく時間がありませんでした。 おかげさまで今日の夜には帰れそうです。 どうもありがとうございました。 また、なにかあった時にはよろしく御教授ください。

関連するQ&A

  • Visual Basic.Netでのハードコピーとその印刷方法

    はじめまして。 個々で質問させていただくのは初めてですので足りないところがあると思いますがよろしくお願いします。 Visual Basic.Netで画面(Form)のハードコピーを取り、そのまま印刷したいのですが方法が見つかりません。Visual Basic6.0ならFormのPrintFormメソッドが使えたのですが廃止になっています。他APIのStretchBltなども試したのですがうまく出来ませんでした。 よろしくお願いします。

  • [VB6] フォームを閉じる方法について

    お世話になります。 VB6で別フォームを起動する際の親フォームの閉じ方について 質問させてください。 呼び出し元フォームからShowメソッドで別フォームを起動すると、 呼び出し先のフォームでマウスのカーソルが砂時計表示になってしまいます。 (呼び出し元のフォームはUnload Meで閉じています。) [Form1の処理] Private Sub Button1_Click() Form2.Show Unload Me End Sub ※Form1は呼び出し元。Form2は呼び出し先。 原因について、どなたかご存知の方がいらっしゃいましたら、 ご教授願えますか?

  • VB.netでフォームを継承して新しいクラスを作る方法

    VB6では Public Sub replaceForm(fromF As Form, toF As Form) fromF.myhide toF.myshow ... End Sub Form1 で public sub myshow() ... End Sub public sub myhide() ... End Sub Form2 で public sub myshow() ... End Sub Public sub myhide() ... End Sub として、ある関数で   replaceForm Form1,Form2 ... replaceForm Form2,Form3 を実行、というようにしていました。 しかし、VB6ではfromFに渡す各フォームにpublic subとしてmyshow(),myhide()を書くだけでうまくいったのですが、.netでは厳密にコンパイルするためにFormクラスのメソッドとして認識されずにコンパイル時にはじかれます。 Formを継承してSuperFormクラスを作り、そのに標準のメソッドとしてmyshow,myhideメソッドを実装したいのですが、どのようにすればよいでしょうか? よろしくお願いします。

  • 印刷方向縦横変更の設定の仕方について

     VB初心者です。  印刷方向の縦横変更をしようとして、  Printer.Orientation = vbPRORlandscape Form4.PrintForm としたところ、  「このプリンターで印刷することはできません。」とエラーになります。  Printer.Orientation = vbPRORlandscape文がなければ、横で切れてしまいますが印刷されますし、プリンタのドライバのプロパティを直接縦方向印刷に変更したら、ちゃんと縦に正常に印刷します。  また、Printer.Orientation = vbPRORlandscape文だけでもエラーとなりません。    いちいちプリンタプロパティを変更せずに、VB側から直接操作するにはどのようにしたらよいのでしょう。  よろしくお願いします。

  • フォームのイベントを標準モジュールから呼び出す

    フォームのイベントを標準モジュールから呼び出す事は出来ないのでしょうか? ちなみにアクセスです。 例えば、 Private Sub Form_Load() MsgBox "test" End Sub というのはフォームを開いたときにしか発生しないですよね。 でもフォームを開いている状態でForm_Loadと全く同じ事をしてほしい時は どうすればいいですか? 標準モジュールで Sub a() Call Form_フォーム1.Form_Load End Sub としてみましたが、メソッドまたはデータ メンバが見つかりません。 (Error 461)になりました。 MsgBox "test" だけなら、 Sub a() MsgBox "test" End Sub にすりゃいいじゃん!って思われがちですが、 実際はForm_Loadイベントにはたくさんのコードが書かれています。 標準モジュールからイベントの呼び出しを教えてください。

  • 【エクセルマクロ】ユーザーフォームの画像をコピー?

    ユーザーフォームにある画像を、 クリックしたら、クリップボードにコピーするにはどうしたらいいですか? コピーのメソッドはないようで、 下記はエラーになります。 Private Sub Image1_Click() Me.Image1.Picture.Copy End Sub

  • アクセスフォームのサイズの調整について

    一つは全画面表示(Maximize)で開きもう一つは普通の表示(Restore)で開くには? フォーム1とフォーム2があります。画像をご覧ください。 フォーム1は Private Sub Form_Load() DoCmd.Maximize End Sub で、 フォーム2は Private Sub Form_Load() DoCmd.Restore End Sub としてます。 フォーム1にコマンドボタンを設置して、 Private Sub フォーム2を開く_Click() DoCmd.OpenForm "フォーム2" End Sub として、フォーム2を開くのですが、 フォーム2が開くとフォーム1まで、元の大きさに戻ってしまいます。 行いたいことは、 フォーム1は全画面表示、フォーム2は、ノーマルな表示(全画面でも最小化でもない) にしたいのですが、不可能なのでしょうか?

  • フォームのデータシートビューにてVBAで直接記述したSQL文を実行した結果を返すことは不可能でしょうか?

    リストボックス、コンボボックスなら Private Sub Form_Open(Cancel As Integer) With Form_フォーム1.リスト2 .RowSourceType = "Table/Query" .RowSource = "SELECT テーブル.フィールド, FROM テーブル" End With End Sub で結果を返すことは可能なのですが フォームをデータシートとして Private Sub Form_Load() Me.RowSourceType = "Table/Query" Me.RowSource = "SELECT テーブル.フィールド, FROM テーブル" End Sub とするのは不可能ですか? これを実行すると 「コンパイルエラー メソッドまたはメンバーが見つかりません」 となり、 「RowSourceType =」が選択されます。 そしてVBAの停止の意の四角ボタンを押すとユーザーフォームが図のようになります。 私のやりたいことは、クエリではなくVBAでSQL文を書き、データシートビューで表示させたいのですがやはり不可能でしょうか? (変数を代入できるため) 何でもいいのでご教授よろしくお願いします。

  • VBの印刷について

    VB6で、自作アプリケーションを作成中ですが、 そこで、PrintForm関数でフォームをハードコピーしています。 ピクチャーボックスにスクロールバーを使って画面を制御していますのでprintformを使うと 全てが印刷されません。 やりたいことは、2画面分のハードコピーを 1枚にして印刷したいのですが、どうやればよろしいでしょうか? 2枚分(A4+A4)(縮小) ------> 1枚(A4)ということです。 どなたか、アドバイスいただければ幸いです。よろしくお願いします。

  • VB2008で親フォームから子フォームを開いたときの処理で

    VB2008で親フォームから子フォームを開いたときの処理で 質問させて頂きます。 親フォームから子フォームを開いて、 子フォーム画面ロード時に、TreeViewにノードを追加する処理を行おうとするのですが、 ノードの追加ができません。 親フォームから子フォームの呼び出しの部分 Using frmAct As New form2 frmAct.ShowDialog() end using 子フォームLoad処理 Private Sub F_Actresult_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call MP_hogeload() ←別のモジュールからサブルーチンを呼び出してノード処理を追加させる。 End Sub 外部サブルーチン Public Sub MP_hogeload() With form2 .trehoge.Nodes.Add("hoge") end with end sub 同じ子フォーム内に記述している場合は問題なく追加できています。 この開き方の場合、別のモジュールでノードを追加させる方法を探しています。 よろしくお願いいたします。