文字を揃える表示 – プログラミング – Home

通知
すべてクリア

[解決済] 文字を揃える表示

固定ページ 1 / 2

DT
 DT
(@DT)
ゲスト
結合: 22年前
投稿: 31
Topic starter  

はじめまして、DTです。

文字列を揃えたいのですがうまくいかない
例:
strXA=-20.0; //文字列
strYA=7.60;

strXA2=-320.0; //文字列
strYA2=17.00;

以下のように表示したい
-20.0 7.60
-320.0 17.00

単純に接合にすれば、小数点を揃えない
Name1 = strXA+ + strYA;
Name2 = strXA2+ + strYA2;
結果
  -20.0 7.60
-320.0  17.00 //ズレ

どうしたらいいでしょうか。
よろしくお願いします。

環境:windows XP .Net2002


引用未解決
トピックタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

>strXA=-20.0; //文字列

数値かと思いますが……
strXA=-20.0;
なら文字列かも知れませんけど。
# strXAがなにものかによりますが…。

で、どこに表示したいんですか?
また、表示したい箇所のGDIに設定しているフォントはプロポーショナルピッチですか?
固定ピッチですか?

プロポーショナルならば、
>単純に接合にすれば、小数点を揃えない
>Name1 = strXA+ + strYA;
みたいな方法では出来ませんが。

DrawText()で描画であれば、描画しようとしているテキストの矩形サイズが求められます
から、
そこから計算して始点の位置を調整することも可能でしょう。


返信引用
Ismaell.
 Ismaell.
(@Ismaell.)
ゲスト
結合: 15年前
投稿: 7
 

sprintf(...)を使って、空白や数値(にして)なら
小数以下も書式設定可。


返信引用
しま
 しま
(@しま)
ゲスト
結合: 17年前
投稿: 123
 

Name1, Name2 はおそらく文字列なんでしょうが、
どの関数(MFC か SDK かの区別も分らないので)で
どこに(画面、プリンター)出力したのか
分るように書いてください。
又、フォントを指定しているのならフォント名も知らせてください。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

現在の条件だけなら
DrawText使い、右揃えにして、空白をタブにする


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2659
 

シンプルに考えるなら
プログラムはコンソールプログラムに限定
コマンドプロンプトの設定は固定ピッチフォントになっている

とした時に(そういう条件ではないという話なら条件も全て説明に入れましょう)

表示は半角英数ですると考えるとマイナスも小数点も一文字なんですから
文字数数えてスペースで位置あわせをすればよいという話になりますよね。

で、表示のときに何文字目から何文字目までに一つ目のデータを表示し、
二つ目のデータが何文字目から何文字目に収まればよいのかをデザインして
それに合うように文字数をカウントしながらつなげればよいのでは?

もしくは各行毎にsprintfを使って書式をうまく設定して合わせるとか。
printf系の書式設定は結構いろいろなことが出来るようになっているので
ちゃんと調べれば、お望みの事が出来ると思います。

何にしても出力時の条件がはっきりしていないので
今のままではそのものずばりのレスは付きにくいと思います。


返信引用
DT
 DT
(@DT)
ゲスト
結合: 22年前
投稿: 31
Topic starter  

コメントありがとう。

説明が不足ですがすみませんでした。
CString  strXA=-20.0; //文字列
CString  strYA=7.60;
CString  strXA2=-320.0; //文字列
CString  strYA2=17.00;

配列
Name[1] = strXA+ + strYA;
Name[2] = strXA2+ + strYA2;

char szMsg[40];
COLORREF crColor =RGB(129,129,129);
pDC->SetTextColor(crColor );

for(i=0; i<103; i++){
wsprintf( szMsg, Name[i], GetRValue( crColor ))
pDC->TextOut( LtestX, LtestY, szMsg);
}

単純で、別々の配列に入れって
NameX[1] = strXA;   
NameX[2] = strXA2;
...
NameX[102] = strXA102;

NameY[1] = strYA;   
NameY[2] = strYA2;
...
NameY[102] = strYA102;
の場合、文字を揃えるのですが、

問題:
一行で
Name[1] = strXA+ + strYA;
表示したい場合、文字の揃え可能なのでしょうか。
無理だったら、別々に表示します。

よろしくお願いします。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

1、CFontを使う。
2、CreateFontで
  ・書体をMSゴシックにする。
  ・nPitchAndFamilyを、FIXED_PITCHに設定する。
でだめですか?
書体はMSゴシックで試すのがいいと思います。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2659
 

要らぬ突込みかもしれませんが。

文字列だと言う話ならこうではなくて
> CString  strXA=-20.0; //文字列
> CString  strYA=7.60;
> CString  strXA2=-320.0; //文字列
> CString  strYA2=17.00;

こうではありませんか?
CString  strXA=-20.0; //文字列
CString  strYA=7.60;
CString  strXA2=-320.0; //文字列
CString  strYA2=17.00;

大した話ではないかもしれませんけれど、
提示されたコードに不備があるとコード全体に対する
信憑性も危うくなってきます。
なので提示するのであれば、内容は吟味された方が良いです。

あと、GDIに関してちゃんと勉強されていますか?
きちんと書籍なりで勉強された方が今後の為には良いような気がします。


返信引用
しま
 しま
(@しま)
ゲスト
結合: 17年前
投稿: 123
 

ANC(アルファニューメリックキャラクター[0xFF 以下の文字コード])
の範囲内の文字コードしか使わない条件で、用いるフォントが
固定ピッチ(等幅)の場合では出力する時に、文字数だけで
文字の相対位置が決まりますから
文字列を連結する際に左右の文字列の長さに応じて中間の空白部の
文字数を調節することで解決するのではないかと考えます。


返信引用
DT
 DT
(@DT)
ゲスト
結合: 22年前
投稿: 31
Topic starter  

コメントありがとう。

> CString  strXA=-20.0; //文字列
ミスです。すみませんでした。
CString  strXA=-20.0; //文字列

>  ・書体をMSゴシックにする。
>  ・nPitchAndFamilyを、FIXED_PITCHに設定する。
何も変わりません。

>文字列を連結する際に左右の文字列の長さに応じて中間の空白部の
>文字数を調節することで解決するのではないかと考えます。
やってみました。
結果は
...
-20.0 *7.60 //マイナスの同士OK
-320.0 17.00 //マイナスの同士OK 
 -1.8  *1.95 //マイナスの同士OK
0.0 12.60 //フラスの同士 OK
3.6 *4.62 //フラスの同士 OK
...

一行列目:
マイナスの同士が揃えています。
フラスの同士も揃えています。
マイナス==>プラスに変わると
 -1.8  *1.95 //ここから
0.0 12.60 //ここまで半角スペスようなズレ、(ここで完全表示できません。)
一文字ズレではないですが、半角スペスようなズレがあります。

”*”は半角文字

よろしくお願いします。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

うーーん、
少々食い違いがあるみたいですね。

> 環境:windows XP .Net2002
1. MFCを使ってますか?
2. CViewですか?
3. フォントの設定はどうなっていますか?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2659
 

使っている数字が半角数字の場合、そのさらに半角分のズレがあるのであれば、
それは固定ピッチのフォントが使われていない状態だと思います。
固定ピッチのフォントを使っていてそういうズレ方をするはずがないからです。

フォントには固定ピッチとプロポーショナルがあるとか
そういう知識はきちんとお持ちでしょうか?
もしお持ちでないなら書籍等でGDIの描画について勉強されることをお勧めします。
知識なしで闇雲に突き進んでも良いことはありません。
誤解したまま先へ先へと進んでしまう可能性が高いので。

固定ピッチのフォントを使うためにはフォントを生成する必要がありますが、
この時に引き渡すフォントの名称が間違っていると目的のフォントが見つからずに
規定のフォントが使用されてしまいます。
フォントの名称に関してはよくよく確認しないと正しいつもりで間違った名称を使って
いることがありますよ。
たとえば、MSゴシックのMSは全角英字なのか半角英字なのかとか
MSとゴシックの間にスペースがあるのかないのか、
あったとした時にそのスペースは全角なのか半角なのかとかetc...

返信の内容を見る限りではGDIに関する知識が足りない状態だと思います。
GDIに関する勉強をまずはした方がよいと思います。
その上で今の問題をどう解決するかを考えた方が結果的には近道だと思いますよ。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2659
 

誤字が合ったので訂正

誤)
規定のフォントが使用されてしまいます。

正)
既定のフォントが使用されてしまいます。


返信引用
DT
 DT
(@DT)
ゲスト
結合: 22年前
投稿: 31
Topic starter  

strX行列とstrY行列が同時に調整しました。

-29.3 6.61 //
-23.8 
8.60 //
-20.0 **11.13
-17.2 **11.10
*-5.0 **10.73
*-1.8 **11.85
**0.0 **12.60
**3.6 **14.62
*10.0 **14.61
*13.9 **11.82

うまく揃えました。
いろいろ教えていただき、ありがとうございました。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました