tagCANDY CGI VBレスキュー(花ちゃん) - 座標位置等の単位(Twip/Pixels等)変換(VB.NET) - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
座標位置等の単位(Twip/Pixels等)変換(VB.NET)
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

座標位置等の単位(Twip/Pixels等)変換(VB.NET) [No.201の個別表示]
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.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
メンテ

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ