tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
座標位置等の単位(Twip/Pixels等)変換(VB.NET) ( No.0 )  [親スレッドへ]
日時: 2010/01/07 14:03
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[グリッド関係][基本コード][アルゴリズム]                        *
* キーワード:vbPixels,解像度,画素,スケールモード,ポイント,Twips,AxMSHFlexGrid    *
***********************************************************************************
タイトル : テキストボックスの移動と配置に関して(MSflexGrid)
記 事 No : 7833
投 稿 日 : 2008/07/18(Fri) 18:32
元質問者 : funnybunny  
現在VS2008でMSflexGridを扱っているのですが

VB6.0ではMSflexGrid上にテキストボックスを移動する際に

With MSFlexGrid
textbox.Move .Left + .CellLeft, .Top + .CellTop, .CellWidth, .CellHeight
'テキストボックス (Left,Top) & (Width,Height)
End With

とすることで、グリッドのセル上にテキストボックスをセルと同じサイズ、同じ位置に
持ってきてエクセルのように直接入力できるようにしていたのですが
VB2008 では、ピクセルの関係上セルの上に被らずに、とんでもなく遠くの場所に
テキストボックスが配置されテキストボックスのサイズも巨大になってしまいます。

どなたかAxMSHFlexGrid上のセル位置にきっちり重なる方法が分かる方ご指導、ご鞭撻を
よろしくお願い致します。


-----------------------------------------------------------------------------------
記事No : 7847
投稿日 : 2008/07/22(Tue) 16:37
回答者 : 花ちゃん  
-----------------------------------------------------------------------------------
> ヒントだけでもお願いできないでしょうか。

すでに、回答したつもりですが、.CellLeft 等で取得できる値は、Twip 単位です。
(AxMSHFlexGrid で取得できるサイズや座標位置の単位は、Twip 単位です。)
.NET での単位は、Pixel です、従って、.CellLeft 等で取得した値を Pixel に
変換して計算して見て下さい。
簡易的には、.CellLeft \ 15 で Pixel になりますが、解像度の設定等によって
変わりますので、正確には事前にその辺を調べておく必要があります。



-----------------------------------------------------------------------------------
記事No : 7848
投稿日 : 2008/07/22(Tue) 22:16
回答者 : 魔界の仮面弁士  
-----------------------------------------------------------------------------------
''' Microsoft.VisualBasic.Compatibility.DLL を参照設定しておく
'Imports Microsoft.VisualBasic.Compatibility.VB6

Dim scaleX      As Single = TwipsPerPixelX()
Dim scaleY      As Single = TwipsPerPixelY()
Dim pixelValueX As Double = TwipsToPixelsX( twip値 )
Dim pixelValueY As Double = TwipsToPixelsY( twip値 )
Dim twipValueX  As Double = PixelsToTwipsX( pixel値 )
Dim twipValueY  As Double = PixelsToTwipsY( pixel値 )


# あるいは、1440 / GetDeviceCaps(p, LOGPIXELSX) という手もあるけれど。




-----------------------------------------------------------------------------------
記事No : 7849
投稿日 : 2008/07/23(Wed) 07:31
回答者 : 花ちゃん  
-----------------------------------------------------------------------------------
私は、Win32 API 関数を使って取得していたのですが、下記のような方法でも
取得できるようですね。

Using g As Graphics = Me.CreateGraphics()
   Dim scaleX As Single = 1440.0F / g.DpiX
   Dim scaleY As Single = 1440.0F / g.DpiY
End Using

又、下記も参考にして下さい。
フォント・画像等の単位(mm/Twip/Pixels等)変換(共通)
http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=175



 [スレッド一覧へ] [親スレッドへ]