固定ピッチフォントを使用するソフトでWindows2000/XPに両対応するには?

解決


MilkTea  2006-03-29 01:51:08  No: 130813

毎々お世話になっております。過去ログ、検索サイトにての検索をしたのですが、わからなかったため、質問させていただきます。
固定ピッチフォントについてなのですが、VB6.0のテキストボックスコントロール
のTextプロパティに入力する文字列に対して、2000とXPの両方に対応する方法ってあるでしょうか?
MicrosoftのHPで『Windows XP での全角固定ピッチフォントの仕様変更』に関する記述は調べ済みで、意味はわかるのですが、VB上のコーディングで対応できる方法がわからなかったので、また皆様の知恵をお借りしたくて書込しました。
よろしくお願い致します。


魔界の仮面弁士  2006-03-29 01:57:02  No: 130814

> 両方に対応する方法ってあるでしょうか?
対応方法との事ですが、具体的には、固定ピッチフォントの扱いに対する
どの点を問題視されているのでしょうか?

OSによって、文字が入りきれないかもしれない、という事なら、
コントロールの大きさを多めに取れば済みますね。

全角/半角の文字幅のずれに関する話なら、どちらでも問題の少ない
3 の倍数のフォント(9pt や 12pt など)を採用すれば済むかと。

> 『Windows XP での全角固定ピッチフォントの仕様変更』に関する記述は調べ済みで
そういう時は、URL も併記すると親切かも。
http://www.microsoft.com/japan/msdn/windows/windowsxp/FixedPitchFont.asp


MilkTea  2006-03-29 02:12:18  No: 130815

魔界の仮面弁士さん、いつもありがとうございます。
重要な点を書き忘れてしまいました。すみません…。

VB6.0でGetWindowLong、SetWindowLong、SetWindowPosなどを使用して
ウィンドウスタイルにWS_THICKFRAMEをセットし、実行時にもマウスで
テキストボックスの大きさを変更できるようにしたソフトを作成しました。
そのソフトで各テキストボックスの大きさ、位置等をマウスで変更し、
その情報をWindows2000上で保存して、WindowsXP上で読み出して表示する
のですが、その時のレイアウトが2000とXPでは違うといった現象があり
まして…。調べた結果、固定ピッチフォントの問題に行き着いたわけですが、
訳あって
  ①フォントのポイントは8ポイント
  ②フォントはMSゴシック
  ③コントロールの大きさは現状のままで変更不可
    (余裕を持たせるための操作はなし)
という3つの条件をクリアしなければならなくて、現状どうしようもない
状態です。そこでプログラム側で回避できれば…と思った次第であります。

>そういう時は、URL も併記すると親切かも。
これについては、以前、どこかの掲示板でURLは直リンクしない方がいい
というのを見たことがあったので…。
何が問題なのか、なぜURLを貼ってはいけないのかは理解できなかったの
で盲目的に避けてしまいました。すみません。


MilkTea  2006-03-29 02:15:59  No: 130816

ちなみに、OSのバージョンの判定についてはやり方はわかるので、その部分は
大丈夫です。判定後、OSがWindows2000だったら…、WindowsXPだったら…と
いう部分だけでもわかればいいのですが…。
わかりづらい表現で申し訳ありませんが、よろしくお願い致します。


魔界の仮面弁士  2006-03-29 04:48:55  No: 130817

> そのソフトで各テキストボックスの大きさ、位置等をマウスで変更し、
> その情報をWindows2000上で保存して、WindowsXP上で読み出して表示する

うーむ。ピクセル単位で保持する仕様で作ってしまっているとすれば、
OS の違いだけでなく、Screen.TwipsPerPixelX 値が変更された場合なども、
同様の問題が生じる気がしますけれども。

> という3つの条件をクリアしなければならなくて
フォントサイズもコントロールサイズも変更できないのだとしたら、
残る手は、Jpn98FixPitch で逃げるぐらいしか無いのでは。


MilkTea  2006-03-29 17:46:51  No: 130818

魔界の仮面弁士さん、毎回ありがとうございます。お手数おかけします。

>OS の違いだけでなく、Screen.TwipsPerPixelX 値が変更された場合なども、
>同様の問題が生じる気がしますけれども。
解像度は違うPC上でも一応再現はできてるみたいです。
開発環境は1920x1200、実行環境は1024x768ですが、レイアウト自体の崩れは
ないようです。

>フォントサイズもコントロールサイズも変更できないのだとしたら、
>残る手は、Jpn98FixPitch で逃げるぐらいしか無いのでは。
やっぱりレジストリ変更しかないでしょうか…。
もしくはOS自体をXPにするかですよね…。
現状、Windows2000上でレイアウトして、XP上でずれる場合、また2000上で
修正して、XPで表示して…を繰り返すような感じでして。
レジストリを修正してWindows2000側に合わせた場合は、現状のXP上でのレ
イアウトもやっぱり変わってしまいますよね…。


魔界の仮面弁士  2006-03-29 18:04:35  No: 130819

>> OS の違いだけでなく、Screen.TwipsPerPixelX 値が変更された場合なども、
>> 同様の問題が生じる気がしますけれども。
> 解像度は違うPC上でも一応再現はできてるみたいです。
> 開発環境は1920x1200、実行環境は1024x768ですが、レイアウト自体の崩れは
> ないようです。
Screen.Width / Screen.Height の事ではなく、
Screen.TwipsPerPixelX / Screen.TwipsPerPixelY の事です。

> もしくはOS自体をXPにするかですよね…。
そもそも何故、異なる環境で設定ファイルを共有しているのでしょう?


MilkTea  2006-03-29 18:14:39  No: 130820

>Screen.Width / Screen.Height の事ではなく、
>Screen.TwipsPerPixelX / Screen.TwipsPerPixelY の事です。
勘違いしてました。すみませんです。

>そもそも何故、異なる環境で設定ファイルを共有しているのでしょう?
元々は全てXPで使う予定だったのですが、レイアウトデータの作成を急に
2000で行うことになりまして…。で、レイアウトの崩れに気づかずに使って
データを作り続けてしまって、現在はそれをどうしようかという感じです。


魔界の仮面弁士  2006-03-29 18:43:22  No: 130821

もし、TextWidth 等で違いを計測できるようであれば、
誤差を補正する事はできるのかも知れません。

ですが、前提条件が
  ・フォントサイズは固定(8pt)
  ・フォントも固定(MS ゴシック)
  ・コントロールサイズも変更不可
なのですから、そもそも補正するわけにも行かないのですよね?

であれば、もはやプログラム側でどうこうできる話では無い気がします。

そもそもの運用(異なるOSでデータを生成するという事)を見直すか、
実行環境レジストリを変更して、互換モードで動作させるかでしょう。


MilkTea  2006-03-29 18:52:56  No: 130822

やはりそうですよね。
  ①レジストリ改変
  ②OSの統一
の線で打診してみます。
魔界の仮面弁士さん、何度もお返事いただきありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加