あの、、、VBでグラフを書きますよね。それでソレをVBで表示したいんです。JPGとかイメージファイルで保存とかして何とかできませんかねー、、。表はできるのにグラフができないわけがない、なんて言ったら「お願いね」って言われちゃった、、。誰か教えてくださーい。宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (9件)

ピクチャボックスに表示されてるのですね?



もう保存するだけなのですね?

でしたら・・・参考URLをどうぞ。
SavePictureで保存できます。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=168028

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=168028
    • good
    • 0
この回答へのお礼

 やっとこさ、やっとこさ完成しました。今日中に完成させて早くあがりマース。本当にありがとうございました。

お礼日時:2001/11/28 15:42

クリップボード経由だとかなりしんどい思いをすると思います。



たしかAPIのCreateBitmapを使用するとできたと思ったのですが、その関数を使用するまでの手続きが面倒だった気がします。
ところでクリップボードを使用してるということは、グラフが描画されるまでを画面に表示してるのですか?チラチラした画面でやってるのですか?
それとも、画面を制御してますか?

もし画面に表示をしながらデータの更新&グラフの反映を行っているのであれば、それをクリップボードにコピーするのではなく、それをキャプチャしてピクチャボックスに描画&保存と言う手もありますが、それではだめですか?

個人的な意見かも知れませんが、クリップボード経由の処理はお勧めしません。

この回答への補足

 んー、あまり良く意味が分からなかったんですが私の説明下手が影響しているのは分かった気がする、、。スミマセン、もう1度説明させて下さい。まず、細かい設定がされているグラフが保存されているExcelのファイルがあります。そこの決まった部分にデータをVBで送り込みます。データが反映されたグラフをコピーしてきてImage(Picture Box)などに貼り付けて表示しているのが今の状態なんですが、反映されたグラフを保存したいんです。JPEGかGIFかBITMAPで保存したいんです。何度も何度も本当にありがとうございます。

補足日時:2001/11/28 09:43
    • good
    • 0
この回答へのお礼

 夜中遅くにスミマセン、、。なんとお礼をしたらいいのか、、。

お礼日時:2001/11/28 09:42

サンプルです。



方法としてはOLEを使用します。
ツールボックスに「OLE」と書いたアイコンがありますよね。
あれを使用してOLEをフォームの中に作成してください。マウスでOLEを作成しようとすると、オブジェクトの種類をたずねてきますが、キャンセルしてしていいです。
それでオブジェクト種類が定まってないOLEが作成されました。その領域にEXCELが埋め込まれます。


※※注意※※
エクセルにデータを落としてますよね?
  xlApp.Workbooks(1).Sheets(1).Cells(1,1).Value = "データ"
って感じですよね?それで、そのエクセルブックを保存する前に
  xlApp.Charts(1).Activate
という感じで、グラフのシートを選択した状態にしてから保存してください。


creBitMap関数は、以前の書き込みを参考にしてください。

Option Explicit

'ブック名を宣言してますが、任意に変更してください
Private Const EX_BOOK_NAME = "C:\Test.xls"

'これはエクセル2000であることを示します。「8」という数字の部分はバージョンによって違います。
'EXCELのバージョンがわからないので、そちらで変更してください。わからなかったらレスください。
Private Const EX_CLASS_NAME = "Excel.Sheet.8"

'OLEに埋め込む
Private Sub Command1_Click()

  With Me.OLE1
    'ファイルを埋め込みます
    .CreateEmbed EX_BOOK_NAME, EX_CLASS_NAME
    
    'OLE更新
    .Refresh
  End With
End Sub

'ファイルとして保存
Private Sub Command2_Click()
  Call creBitMap(Me.OLE1, "c:\test.bmp")
End Sub

Private Sub Form_Load()
  With Me
    'スケールをピクセルにする
    .ScaleMode = vbPixels
    
    '埋め込まれるEXCELは、OELのサイズによって自動調整を行う
    .OLE1.SizeMode = vbOLESizeStretch
  End With
End Sub

この回答への補足

 大変大変大変お世話になっています。教えていただいたものを悪戦苦闘して自分なりに解釈して試していたのですが、クリップボードにコピーするところまで出来上がったんですけど、ソレをJPEG、GIF、BMPかなにかに保存したいんです。未だに実現できないんです。いつまでかかってるんだーなんてことまで言われちゃうし、、。単純にOLEなどを通さずに実現ってできるものですか??お忙しいところ申し訳ないんですけど宜しくお願いします。

補足日時:2001/11/27 18:59
    • good
    • 0
この回答へのお礼

ありがとう、この上ないです。

お礼日時:2001/11/27 19:06

ごめんなさい。

勘違いしてました。

さっきのサンプルは、グラフを書いた後、あるいはチャートコントロールやOLEオブジェクトとしてエクセルを使用した後にビットマップファイルにするサンプルです。

グラフにする部分も必要なのですね。
ちょっと今日は用事(麻雀)があるので、また明日以降。。。

グラフ描画のお奨めは
1番:市販のコントロール(マニュアルが付いていて便利。出費がかさむ)
2番:フォームやピクチャボックスに直描画(座標取りがめんどい)
3番:チャートコントロール(わりと使いやすいが、グラフがしょぼい)
4番:エクセルの差込(わかり易くて、メンテしやすい。エクセルまかせの部分が多いので、グラフサイズがなかなか定まらない。)

でもEXCELが入ってる事を限定してもよいのなら、バリエーション豊かなエクセル差込がいいかも?それができたら、2番以外は全てできるようになりそうな気がします。。。

グラフにしたいデータの項目名(仮名称でもいいです)
サンプルデータ
を教えてもらえたら、わかりやすいサンプルができるかも?

この回答への補足

 えっと、なにから説明していいのか分かりませんが、、説明下手を許して下さいね。まず、VBフォームでなんかボタンを押すとテキストボックスに入っているデータをExcelを開き渡します。あ、その前にグラフっていろいろプロパティがあるじゃないですか。だから既にExcelファイルが存在している状態です。だからデータをExcelに渡すと既存のファイルが勝手にグラフにデータを反映してくれますよね、、。ココまではできたんですよ。こっからが問題でそしたら、そのできあがったグラフをVBに表示したいんですよ。宜しくお願いしますー。ところで昨日の麻雀はどうでしたか??

補足日時:2001/11/21 09:53
    • good
    • 0
この回答へのお礼

 細かい気づかい大変感謝します。もうすこし甘えさせて下さい。

お礼日時:2001/11/21 09:52

VBを使って全自動(?)で、というのでなくてよいのでしたら、餅は餅屋、ということで、グラフソフトに書かせる、というのはどうでしょうか?


VBで出てきた計算結果をデータファイル(csvファイル的な形式がいいでしょう)としてセーブして、例えばSma4Winに読み込ませれば体裁もいろいろ調整できます。sma4winはメタファイルでの書き出しもできたはずです。

hukahireさんの用途には合わないかもしれませんが、以前やったことがあるので、ご参考までに。
    • good
    • 0
この回答へのお礼

 グラフソフトというと¥が、、。なにしろ$なしで、、。何が1番良いのかわかりませんよ。ホント、パソコンっていろいろできますよね。

お礼日時:2001/11/21 09:50

OLEオブジェクトなら以下のソースで大丈夫だと思います。


あらかじめデザイン時に、フォームのScaleModeをピクセルにしてください。
あとはcreBitMap関数を呼ぶだけで可能なはずです。

欠点としては、実行時にオブジェクトの上に何らかのフォームやウィンドウが前面にあったりすると、それもファイルイメージに取り込まれます。
それを回避する方法もありますが、以前に作成したサンプルがどこかに消えちゃいました。。。
結構大変な処理だった記憶がありますので勘弁してください。。。

Option Explicit

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()
  'ファイルにしたいオブジェクトと、ファイルパスを指定
  Call creBitMap(Me.OLE1, "c:\test.bmp")
End Sub

Private Sub creBitMap(inObj As Object, inFilePath As String)
  Dim picWork As PictureBox
  
  Dim lngL As Long, lngT As Long, lngW As Long, lngH As Long
  
  'オブジェクトの左位置/上位置/幅/高さ を取得
  With inObj
    lngL = .Left: lngT = .Top: lngW = .Width: lngH = .Height
  End With
  
  'ピクチャボックスを作成
  Set picWork = Controls.Add("VB.PictureBox", "picDmy")
  'ピクチャボックスの初期設定
  With picWork
    .Appearance = 0
    .AutoRedraw = True
    .AutoSize = False
    .BorderStyle = 0
    .ScaleMode = vbPixels
    .Width = lngW
    .Height = lngH
  End With
  
  With picWork
    
    '描画実行
    Call StretchBlt(.hdc, 0, 0, lngW, lngH, Me.hdc, lngL, lngT, lngW, lngH, vbSrcCopy)
    
    '画像の保存
    Call SavePicture(.Image, inFilePath)
  End With
  
  'ピクチャボックスの破棄
  Controls.Remove picWork
End Sub
    • good
    • 0

そうですね、手段はいろいろありますがExcelとかMS-GraphをOLEで


VBのウィンドウに貼り付けて表示させる方法が応用範囲が広そうですね。

詳しいプログラミングについては、書籍等を読んで勉強してください。
できる・できないの話で言えば、間違いなくできます。
どう実現させるかは、プログラマの腕によりますが。
    • good
    • 0
この回答へのお礼

 プログラマですか、、。重く圧し掛かりますね、、。
なにやら覚えることが多くて、、。頑張ります、ありがとうございます。

お礼日時:2001/11/21 09:47

オブジェクトということはOLEオブジェクトですか?


そのOLEオブジェクトの現在のハードコピーを、ファイルに落としたいのですよね?
    • good
    • 0
この回答へのお礼

 私が定時にあがってボ-ッとしている間にスミマセン。訳もわからずにオブジェクトなんていう言葉を使ってしまいました。実現方法がわからないのです。

お礼日時:2001/11/21 09:45

グラフは、どのように書いたのですか?


CHARTコントロール?
EXCELの差込?
ピクチャボックス?
フォームに直に?

この回答への補足

ありがとうございます。オブジェクト?としてです。EXCELを開いて、、、。質問しているほうがこんなんじゃ答えられませんよね。多分、EXCELへの差込だと思います。

補足日時:2001/11/20 17:43
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB6とかVB2005とは?

お間抜けな質問かもしれませんが。。。
Visual Basic 6.0 → Visual Studioにあり、ボタンやテキストボックスなどを作成し、そこの実装(プログラム)していく。

Visual Basic 2005 → 言語そのもの

と私は思っているのですがどうでしょうか?

Aベストアンサー

何か勘違いをされていると思いますが
それが何かもよく分からずに頭の中でもやもやしている感じですか?

VB6とVB2005の大きな違いは言語のスタイルです。
VB6が構造化言語、VB2005はオブジェクト指向言語です。

もともとWindowsプログラミングはコードだけでもできます。
しかし、一からコードで書くとなるとウィンドウの生成とかマウスの動きとか
全部自分でコードしないといけません。とても大変です。
(こういうプログラミングを伝統的にSDKプログラミングとよびます)

そういう手間を省いてボタンなどを簡単に実装できるようにしたのがVisual環境です。
ですからボタンやテキストの配置はVisualの名のもと、共通でできます。

本来はVB6は製品の寿命からいって2000年頃にはVB.Netに変わる予定でした。
順調にいっていればVB6は今頃サポートされていなかったのでしょう。
しかしマイクロソフトの.Netは遅れに遅れ、その間VB6のアプリは巷に溢れます。
ほとんどVBの完成形であったVB6は爆発的なヒットを記録します。

おまけに新しく出たVB.Netは敷居の高いオブジェクト指向で
VBユーザの切り換えは遅々として進みませんでした。
結局、Vistaの年代に入ってもVB6は生き残ったのです。
こんな背景がありますが参考になりますか?

何か勘違いをされていると思いますが
それが何かもよく分からずに頭の中でもやもやしている感じですか?

VB6とVB2005の大きな違いは言語のスタイルです。
VB6が構造化言語、VB2005はオブジェクト指向言語です。

もともとWindowsプログラミングはコードだけでもできます。
しかし、一からコードで書くとなるとウィンドウの生成とかマウスの動きとか
全部自分でコードしないといけません。とても大変です。
(こういうプログラミングを伝統的にSDKプログラミングとよびます)

そういう手間を省いてボ...続きを読む

QVB2005でJpgファイルの比較

VB2005で、Jpgファイルが同じ画像か?どうか判定する方法を模索しています。ファイルサイズだけでは、一概に言えないと思いますので、どなたか詳しい方いらっしゃいましたら、教えていただけないでしょうか?
BMPだと、一つ一つのビットの比較になるのでしょうか?それとも、CRCチェックみたいな方法があるのでしょうか?
よろしくお願いします。

Aベストアンサー

まず、ファイルとして同じことを判定するのか、画像として同じことを判定するのかどちらでしょう。
jpg形式は画像が同じでもファイルとして同じかは一概に言えません。
画像として同じことを判定したいなら一度bmpに展開するのがよいと思います。
そうでなくファイルが完全に同一であるものだけを判定できればよいのであれば、一つ一つのビットを比較してください。
CRCやMD5などのハッシュを比較するのもよいですが、ハッシュが同じだった場合はビット単位の比較をしなければなりません。

Qjpgファイルの内容を比較したいです。VB.NET

jpgの画像ファイルですが、ファイル名やexif情報が異なっていても
画像そのものが一緒だったら同一と判断できるような処理をしたい
のですが、容量が最後の1桁まで同じで、画像のサイズが同じなら
同じものと見なすとすれば簡単かなと思ったのですが、
exif情報を変更すると、容量が少し変化してしまいます。
この為、容量は手がかりになりそうもないので、
画像データ部分そのものを比較したいのですが、
画像データ本体の部分をIF文で比較できるような
変数に入れるにはどうしたら良いでしょうか。
たいへん恐れ入りますがご教示頂けたら幸いです。

Aベストアンサー

BitmapオブジェクトにJPGファイルを読み込んでGetPixelメソッドで比較といった具合でしょう

以下にサンプルコードを書いてみます
例外処理などは省いてますので適宜行ってくださいね
インデントは 全角スペースを使用してます

Function CompJpeg(sName1 as string, sName2 as String) as Boolean
 dim bmp1 as new Bitmap(sName1)
 dim bmp2 as new Bitmap(sName2)
 dim x,y as Integer
 dim c1, c2 as color
 dim bFlag as Boolean
 ' 幅が違えば 不一致
 if bmp1.Width <> bmp2.Width then Return False
 ' 高さが違えば不一致
 if bmp1.Height <> bmp2.Height then Return False

 bFlag = false
 for y=0 to bmp1.Height -1
  for x=0 to bmp1.Width -1
   ' 2つのファイルの色情報を取得
   c1 = bmp1.GetPixel(x,y)
   c2 = bmp2.GetPixel(x,y)
   ' 2つのファイルの色情報を比較
   bFlag = c1.ToArgb <> c2.ToArgb
   if bFlag then exit for
  next
  if bFlag then exit for
 next
 ' 結果を出力
 return bFlag
End Function

BitmapオブジェクトにJPGファイルを読み込んでGetPixelメソッドで比較といった具合でしょう

以下にサンプルコードを書いてみます
例外処理などは省いてますので適宜行ってくださいね
インデントは 全角スペースを使用してます

Function CompJpeg(sName1 as string, sName2 as String) as Boolean
 dim bmp1 as new Bitmap(sName1)
 dim bmp2 as new Bitmap(sName2)
 dim x,y as Integer
 dim c1, c2 as color
 dim bFlag as Boolean
 ' 幅が違えば 不一致
 if bmp1.Width <> bmp2.Width the...続きを読む

QVB初心者なのでわかりづらい説明になってしまっていますが、宜しくお願い

VB初心者なのでわかりづらい説明になってしまっていますが、宜しくお願いいたします。

ソリューションに含まれる全クラスのメソッド一覧を取得したいと考えています。
考えている処理は以下の通りです。

For i As Integer = 1 To プロジェクト数
  For j As Integer = 1 To クラス数
    ' クラスオブジェクトの取得
    Dim typ As Type = GetType(プロジェクト名.クラス名) ※
    ' クラスが持つメソッドの取得
    Dim methods As MethodInfo() = typ.GetMethods()

    ' 出力処理

  Next
Next

ソリューションの例
Solution
  ├Project1
  │  ├Class1_1
  │  └Class1_2
  ├Project2
  │  ├Class2_1
  │  ├Class2_2
  │  └Class2_3
  └Project3
     └Class3_1

ただ、ソリューションに含まれるプロジェクトの数、プロジェクトに含まれるクラスの数
の取得方法とプロジェクトに含まれているクラス名の取得方法がわかりません。
よろしければ、教えていただけないでしょうか。
また、他に良い方法があれば教えていただけないでしょうか。
宜しくお願いいたします。

環境はVB2008です。

VB初心者なのでわかりづらい説明になってしまっていますが、宜しくお願いいたします。

ソリューションに含まれる全クラスのメソッド一覧を取得したいと考えています。
考えている処理は以下の通りです。

For i As Integer = 1 To プロジェクト数
  For j As Integer = 1 To クラス数
    ' クラスオブジェクトの取得
    Dim typ As Type = GetType(プロジェクト名.クラス名) ※
    ' クラスが持つメソッドの取得
    Dim methods As MethodInfo() = typ.GetMethods()

    ' 出力処理

...続きを読む

Aベストアンサー

For Each a As Assembly In AppDomain.CurrentDomain.GetAssemblies()
System.Diagnostics.Debug.WriteLine(a.FullName)
If a.GlobalAssemblyCache Then Continue For
For Each t As Type In a.GetTypes()
System.Diagnostics.Debug.WriteLine(t.FullName)
For Each m As MethodInfo In t.GetMethods()
System.Diagnostics.Debug.WriteLine(t.FullName + "." + m.Name)
Next
Next
Next

QVB6.0をインストールしている環境でVB.NetをインストールしてもVB6.0は動かせるでしょうか?

初心者的な質問ですみません。
VB6.0をインストールしている環境でVB.NetをインストールしてもVB6.0は動かせるでしょうか?
それともVB6.0をアンインストールしなければVB.Netはインストールできないのでしょうか。

Aベストアンサー

.NETとVB6は同一のパソコン内で分割(お互い干渉せずに)して使うことができます。.NETの説明書にも記載がありますよ。

私としてはVB6を使っていて.NETに変更するとだいぶ違った操作性になるためHDDに余裕があるのであればVB6は残しておいた方がいいと思いますよ。


このカテゴリの人気Q&Aランキング

おすすめ情報