- 日時: 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
|