- PR -

VBのフォームのグリッドについて・・・

投稿者投稿内容
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2004-04-09 10:09
Win2000Pro+VB6を使用しております。

フォーム上にシェイプの四角形(コントロール名:shp1 境界線タイプ:実線)を一つ作成しました。これを隙間無く縦に3つ並べようと思います。

[パターン1]
・デザインビューでshp1をコピーして貼付けを繰り返してグリッドに合わせて隙間無く縦に3つ並べました。(コピー元と合わせてると合計4つになります。)

[パターン2]
下記のソースでフォームロード時に生成する方法をとりました。
Private Sub Form_Load()
  Dim intCtlIdx As Integer
  intCtlIdx = 0
  For intCtlIdx = 0 To 2
    Load shp1(intCtlIdx + 1)
    shp1(intCtlIdx + 1).Top = shp1(intCtlIdx).Top + shp1(intCtlIdx).Height
    shp1(intCtlIdx + 1).Visible = True
  Next intCtlIdx

End Sub


[パターン1]と[パターン2]では結果が微妙に違いました。[パターン2]の場合はshp1の境界線の太さ?が加味されているのか、グリッドに沿わずにちょっとずつずれていました。上のソースの6行目で

shp1(intCtlIdx + 1).Top = shp1(intCtlIdx).Top + shp1(intCtlIdx).Height - 15

のように15くらいマイナスしておくとパターン1と同じになります。
「15」とはソースに書きたくないのですが、どうすればよろしいでしょうか。
ご教授願います。
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2004-04-09 10:20
こんにちは。

INIファイルで設定する方法は如何でしょう?
値を変えたい時にいちいちプログラムを修正しなくても
INIファイル内の修正で済みますし。

#グリッドに関する質問ではないのですね・・・
_________________
まゆりん@絶賛勉強中<基本情報処理



[ メッセージ編集済み 編集者: まゆりん 編集日時 2004-04-09 10:27 ]
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2004-04-09 10:36
ご返信ありがとうございます。
INIファイルで設定するというのを、もう少し具体的にご教授いただけますでしょうか・・・
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2004-04-09 11:07
こんにちは、まゆりんです。

INIファイルを作ります。
中身は以下のように書きます。
[sample]
Tuning = 15

そして、プログラム側から作成したINIファイルを読み込み、
Tuningを取得します。
#この辺はWindowsAPIを使用します。

詳しい方法はGoogle等で検索し、調べて頂いた方が
自身の勉強になると思います。
「VB INI」をキーワードに検索してみてください。

それでは。
_________________
まゆりん @ わんくま同盟
Blog る。
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-04-09 11:23
余計なお節介かもしれませんが・・・

引用:

okumuraさんの書き込み (2004-04-09 10:09) より:

のように15くらいマイナスしておくとパターン1と同じになります。
「15」とはソースに書きたくないのですが、どうすればよろしいでしょうか。
ご教授願います。



「15」と書きたくないというのは、「ソースコード中に定数値を書くのが嫌だ」
ということでなくて、「目的はシェイプをきちんと並べたいだけなのに、15ずらすとかいう妙なコードを書きたくない。別の書き方できちんと並べられないか?」ということだと思うのですが

・・・ちなみに、私は答えを持ってません (爆)
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2004-04-09 11:28
ご返信ありがとうございました。

もちろんそれも一つの手なのですが、今回私が希望いたしますのは、今回の「15」にあたるものを取得できるプロパティなどが存在すればそれを使いたいということです。

デフォルトでフォームのグリッドの高さは120に設定されていてオプションで変更できますが、この数値を色々変えて実験すると、今回の「15」にあたるものが「10」だったりしました。

具体例で言いますと、グリッドの高さを200にした場合、コードの6行目は

shp1(intCtlIdx + 1).Top = shp1(intCtlIdx).Top + shp1(intCtlIdx).Height - 10

で[パターン1]と高さがそろいました。
この「10」にあたるものが、shp1の境界線の太さなのか、フォームのグリッドの点の直径なのかはわかりませんので是非ともそれを表すプロパティなどで取得したいという次第です。


McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2004-04-09 11:58
Clusterさん: はい、おっしゃる通りです。皆様良い案ございませんでしょうか。。

※Clusterさんとは数秒差の書き込みでしたので前の発言の際には読んでおりませんでした。。
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2004-04-09 13:33
それは失礼致しました。

たまたまVB6があったのでソースをお借りして試してみましたが、
ずれているのではなく「連結している部分の線が太く見える」のでは?
つまり、1つ目のシェイプの下と2つ目のシェイプの上の線が重ならずに
並べられてしまうので太く見える・・・ということでしょうか?
試しに「-15」したら線が重なり1本になりましたので、
そうではないかと判断しました。

いろいろ考えてはみましたが、
演算部分で何かしらの工夫を施さないと出来ないかもしれませんね。
(シェイプの線の幅やグリッドの高さも考慮した計算をしなければならないと言うことです)
知識が浅い為、お力になれなくて申し訳ないです

#ん?グリッド高さって取得できたっけ?
_________________
まゆりん@絶賛勉強中<基本情報処理


[ メッセージ編集済み 編集者: まゆりん 編集日時 2004-04-09 14:03 ]

スキルアップ/キャリアアップ(JOB@IT)