tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB.Netで作成したコントロールをVB6.0で使用したい
記事No11775
投稿日: 2016/12/21(Wed) 10:08
投稿者mocky
VB.Net 2010/2013あたりで作成したユーザーコントロールをVB6.0のフォームに貼り付ける事はできないでしょうか。

VB6.0で作ったOCXを.Netで使うには・・・といった情報はあるのですが・・・。

VB6.0のアプリケーションでLEADTOOLSなどを使って画像の表示や簡単な加工をしています。
(必要になるのはJpeg、TIFFの読み書きやグレー化、回転・拡大縮小あたりなのでそんなに大したことしてませんが・・・かといって完全に自作するにも知識不足で・・・)
リプレース案件などでは時間も予算もなく.Netでの作り直しはできない状況です。

.NetならLEADTOOLSに頼らずにほぼ同じ事ができるため、LEADTOOLSを使用しないコントロールを作ってみました。

現在大量にあるVB6.0のプロジェクトに貼り付けられるなら使用範囲が広がるため、何か策がないかと調べております。


開発環境:VisualStudio2010/2013 + VB6.0
OS:Windows7〜Windows10

[ツリー表示へ]
タイトルRe: VB.Netで作成したコントロールをVB6.0で使用したい
記事No11776
投稿日: 2016/12/21(Wed) 16:10
投稿者魔界の仮面弁士
> VB.Net 2010/2013あたりで作成したユーザーコントロールを
手元の環境は 2008/2012/2015 でした…残念


> VB6.0のフォームに貼り付ける事はできないでしょうか。
[プロジェクト]-[コンポーネント] の方ではなく、
[プロジェクト]-[参照設定]で使うタイプでは駄目ですか?

VB6 のツールボックスに表示できるような ActiveX コントロールを
作れないわけでは無いですが、ちょっと面倒かと。

http://www.darinhiggins.com/self-registering-com-net-assemblies/
https://www.codeproject.com/Articles/19015/Using-NET-Controls-in-VB


> .NetならLEADTOOLSに頼らずにほぼ同じ事ができるため、LEADTOOLSを使用しないコントロールを作ってみました。
System.Drawing.Graphics クラス関連のことであれば、
VB6 から Declare して呼び出せます。

[GDI+ Flat API Functions]
https://msdn.microsoft.com/en-us/library/ms533969.aspx

[GDI+ を使ったJPEGファイルの作成]
http://yaplog.jp/orator/archive/29

[ツリー表示へ]
タイトルRe^2: VB.Netで作成したコントロールをVB6.0で使用したい
記事No11777
投稿日: 2016/12/26(Mon) 15:08
投稿者mocky
> > VB.Net 2010/2013あたりで作成したユーザーコントロールを
> 手元の環境は 2008/2012/2015 でした…残念

こちらは205/2010/2013でした(^^;

> > VB6.0のフォームに貼り付ける事はできないでしょうか。
> [プロジェクト]-[コンポーネント] の方ではなく、
> [プロジェクト]-[参照設定]で使うタイプでは駄目ですか?

フォームに貼り付けられるならコンポーネントでも、参照設定でもかまいません。


> VB6 のツールボックスに表示できるような ActiveX コントロールを
> 作れないわけでは無いですが、ちょっと面倒かと。

できるんですね!

リンク先が英語だったのでナナメ読みですが、Form_Loadでコントロールを追加すると
実現できるようですね。
普通のOCXのような感じではありませんが、うまくやれば活用できそうです。
ありがとうございます!


> > .NetならLEADTOOLSに頼らずにほぼ同じ事ができるため、LEADTOOLSを使用しないコントロールを作ってみました。
> System.Drawing.Graphics クラス関連のことであれば、
> VB6 から Declare して呼び出せます。

こちらの情報もありがとうございます。

画面表示も含めたコントロールとして開発し、VB6.0のフォーム上に表示できるようにしたいので
こちらは使用しないかもしれませんが、かなり有益な情報ですので、今後何か作る時に
使えそうです。

[ツリー表示へ]
タイトルRe^3: VB.Netで作成したコントロールをVB6.0で使用したい
記事No11779
投稿日: 2016/12/27(Tue) 09:51
投稿者魔界の仮面弁士
> フォームに貼り付けられるならコンポーネントでも、参照設定でもかまいません。

参照設定だけだとデザイン時の表示や設定は行えませんが、
実行時に表示させることならば、下記の手法で実現可能です。


(案1) VB6 の PictureClip コントロールや LoadPicture 関数のように、
 Picture オブジェクト(stdole.IPictureDisp)を返却するメソッド/プロパティを用意する。
 例1:Microsoft.VisualBasic.Compatibility.VB6.Support.ImageToIPicture メソッド
 例2:System.Windows.Forms.AxHost.GetIPictureDispFromPicture メソッド
 例3:クリップボード転送


(案2) VB.NET から VB6 の PictureBox や Form に直接描画するために、
 Graphics.FromHdc/Graphics.FromHwnd メソッドを利用する。
 ※AutoRedraw = True の場合、描画完了後に Refresh メソッドの呼び出しが必要


(案3) Graphics クラスを使った描画機能をカプセル化した DLL を用意し、
 それを VB6 から参照設定して利用する。
 ※あるいはカプセル化せず、直接 GDI+ の Flat API を Declare しても良い

[ツリー表示へ]