OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

ラベルコントロール・ラインコントロール などを使用して書いたものを画像に保存するにはどうすればいいんでしょうか

  • すぐに回答を!
  • 質問No.197614
  • 閲覧数105
  • ありがとう数1
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 45% (9/20)

CSVのデータを元に、複数のラベルコントロールやラインコントロールで
(タイムラインのような表のため)
フォームにいろいろなデータを表のように書き込んで、印刷/画像として
出力をするようなプログラムを作っているのですが、
どのようにすれば画像として保存できるのかよくわかりません。
MDIフォームの子のフォーム丸ごとを画像として出力するというような
方法でもいいので、教えてください。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル12

ベストアンサー率 65% (276/422)

[PrintScreen]ボタンは画面全体のスナップショット
[Alt]+[PrintScreen]はアクティブ画面などのスナップショットです。
子フォームだけのスナップショットは、キー操作だけでは標準では無理ですね。。。


サンプルです。

手順としては
1.子フォームとなっているフォーム1が、デスクトップ上のどの位置に存在するか座標を得る
2.画像作成用のピクチャボックスをその領域座標とおなじ大きさになるように、大きさをセットする
3.デスクトップ領域のフォーム1の座標部分を、ピクチャボックスに描画
4.保存

というのが大きな流れです。

必要なもの
MDIForm1
Form1(デザイン時にMDIChild=True)
├コマンドボタン
└ピクチャボックス


-----Form1ここから-----
Option Explicit


Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type
Private Type POINTAPI
  x As Long
  y As Long
End Type

Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

Private Sub Command1_Click()
  Dim recWork As RECT
  Dim lngL As Long, lngT As Long, lngW As Long, lngH As Long
  Dim lngDeskTopWnd  As Long 'デスクトップハンドル
  Dim lngDescTooDC  As Long 'デスクトップデバイスコンテキストハンドル
  
  With Me
    'フォームの座標を得る
    Call GetWindowRect(.hwnd, recWork)
    
    '左位置、上位置。幅、高さを得る
    With recWork
      lngL = .Left: lngT = .Top: lngW = .Right - lngL: lngH = .Bottom - lngT
    End With
    
    'ピクチャボックスのサイズ設定(左位置=0:上位置=0幅=lngW:高さ=lngH)
    Call MoveWindow(.Picture1.hwnd, 0, 0, lngW, lngH, 1)
    
    'デスクトップハンドルを得る
    lngDeskTopWnd = GetDesktopWindow
    'デスクトップのデバイスコンテキストハンドルを得る
    lngDescTooDC = GetDC(lngDeskTopWnd)
    
    'デスクトップ上のlngL:lngT:lngW:lngHの範囲を、ピクチャボックスに描画
    'lngL:lngT:lngW:lngHにはフォーム1が存在しているので、実質フォーム1を描画することになる
    Call StretchBlt(.Picture1.hdc, 0, 0, lngW, lngH, lngDescTooDC, lngL, lngT, lngW, lngH, vbSrcCopy)
    
    'デバイスコンテキストをリリースする
    Call ReleaseDC(lngDeskTopWnd, lngDescTooDC)
    
    
    '画像を保存
    Call SavePicture(.Picture1.Image, "c:\test.bmp")
  End With
End Sub

Private Sub Form_Load()
  With Me
    With .Picture1
      .Appearance = 1   'フラット
      .BorderStyle = 0  '枠線なし
      .AutoRedraw = True '自動再描画
      .Visible = False
    End With
  End With
End Sub
-----Form1ここまで-----


-----MDIForm1ここから-----
Option Explicit

Private Sub MDIForm_Load()
  Form1.Show
End Sub
-----MDIForm1ここまで-----
お礼コメント
tomohiro_3

お礼率 45% (9/20)

ちょっとお礼が遅くなりましたが、ありがとうございます。
APIを扱うのは初めてなので、自分の思い通りに扱えるようにするには
時間がかかりそうですが、今月中になんとか出来ればいいので、
専門書を読んで、一つづつ命令の意味を理解しながらやっていきたいと思います。
投稿日時 - 2002-01-22 19:19:18
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル10

ベストアンサー率 24% (47/191)

[alt]+[print screen]でウィンドウの画像コピーして、ワード、エクセルや ペイントに貼り付けではだめですか?
[alt]+[print screen]でウィンドウの画像コピーして、ワード、エクセルや
ペイントに貼り付けではだめですか?
  • 回答No.2
レベル8

ベストアンサー率 42% (12/28)

センドキーでプリントスクリーンは効かないんで困るんですよねぇ。仕様でしょうか。 印刷は Me.PrintForm で何とかなるにしてもファイル保存はたいへんですね。 もし、他社ツールOKであるならば明熊さん(下記URL)のtransG32なんかを利用してみてはどうでしょう?直接ウィンドウハンドル送ってやればうまくいくと思いますよ。 他にはAPIをたたいてあげるしかないとおもいます。 ...続きを読む
センドキーでプリントスクリーンは効かないんで困るんですよねぇ。仕様でしょうか。
印刷は Me.PrintForm で何とかなるにしてもファイル保存はたいへんですね。
もし、他社ツールOKであるならば明熊さん(下記URL)のtransG32なんかを利用してみてはどうでしょう?直接ウィンドウハンドル送ってやればうまくいくと思いますよ。

他にはAPIをたたいてあげるしかないとおもいます。
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ