【OS】Windows NT 4.0 Workstation
【VBのVer】VisualBasic6.0
お世話になっています。さかなと申します。
ディスプレイ解像度を800*600にして、SSTABを使用して画面を作成しました。
SSTABのTabsプロパティを5にして、各Tab上にコントロール(Picturebox,CommandButton,Label)を作りました。
画面作成後に解像度800*600にて実行した場合は問題ないのですが、
解像度1024*768にて実行した場合、初期表示のTabではコントロールが表示されるのですがその他のタブをクリックした場合、コントロールがまったく表示されません。なぜこのような現象が生じるのでしょうか?
よろしくお願いいたします。
こちらで、同じような事をしてみましたが、そのような不具合は発生しませんでした。
因みに、
WindowsNT4.0 SP6
VisualBasic6.0 SP5
解像度は無関係だと思いますが、試しに解像度1024*768で作成してはどうでしょうか(恐らく結果は同じだと思いますが・・・(汗))
ご解答ありがとうございます。
吉野さんの言われるとおり、まず解像度800*600と1024*768にて、
フォーム上に、SSTAB(Tabsプロパティ=3)を作成し、各Tab上にコントロールを
作成し、解像度800*600と解像度1024*768にて実行すると、初期表示以外のTabに
ついても特に問題なく表示されました。
今回のような現象が生じる場合としては、解像度800*600と1024*768の両方で
表示できるように、自分自身で作成した下記のような共通関数を使用した場合
に今回の現象が生じてしまいます。
ただ単に、フォーム上のコントロールのサイズを調整しているだけなのですが
原因がつかめません。なぜこのような現象が生じるのでしょうか?
よろしくお願いいたします。
********************************************************************
''画面解像度取得用API
Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex&) As Long
''画面調整関数
Public Function DspSize(fname As Form) As Single
Dim i As Integer
Dim cname As Object
Dim xrate ,yrate As Double
Dim A&, B&
A = GetSystemMetrics(SM_CXSCREEN)
B = GetSystemMetrics(SM_CYSCREEN)
If A = 1024 Then ''1024*768の場合は調整
xrate = 1024 / 800
yrate = 768 / 600
Else
xrate = 1
yrate = 1
End If
For i = 0 To fname.Controls.Count - 1
Set cname = fname.Controls(i)
※実際は、各コントロール別で調整しています。
If TypeOf cname Is Image Then
cname.Left = cname.Left * xrate
cname.Width = cname.Width * xrate
cname.Top = cname.Top * yrate
cname.Height = cname.Height * yrate
else
cname.Left = cname.Left * xrate
cname.Width = cname.Width * xrate
cname.Top = cname.Top * yrate
cname.Height = cname.Height * yrate
end if
next
自ら解決することができました。
本当にありがとうございました。
また、よろしくお願いします。
ツイート | ![]() |