質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

492閲覧

MemoやRichEditで文字の位置が揃わない

dem0nmichik0

総合スコア37

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/12/05 15:38

実現したいこと

次のフォーマットでMemoやRichEditに文字列を表示したい.MemoやRichEditに表示する文字列の行数は20行,スクロールにより100行まで移動できる.
・何のコンポーネントを使ったらよいのか
・MemoやRichEditでよい場合,何のプロパティをいじればよいのか教えてください.

【フォーマット】
「No.番号1_年(1,000位,100位)年(10位,1位)/月/日_時:分:秒__No.番号2-番号3_故障名_状態」
番号1:3桁表示で右寄せ,0でパディング.
年,月,日,時,分,秒:2桁表示,0でパディング.
番号2:2桁表示で右寄せ,0でパディング.
番号3:1桁表示で右寄せ.
故障名:最大48文字まで
状態:全角2文字で"発生"または"回復"
_(アンダーバー)は半角2文字分のスペース

【実現したい例】
No.001 2018/12/05 23:09:09 No.01-1 Labelイベントハンドラ 発生
No.002 2018/12/05 23:09:09 No.01-1 Buttonイベントハンドラ 発生



No.019 2018/12/05 23:09:09 No.01-1 Label2イベントハンドラ 発生
No.020 2018/12/05 23:09:09 No.01-1 Button2イベントハンドラ 発生
スクロールにより,No.021からNo.100までも表示できる.

困っていること

上記,【実現したい例】のようにMemoやRichEditに文字列を表示したいのですが,下記【上手くいかない状況】のように"状態(発生/回復)"だけ,文字列の位置が合わない表示になってしまいます.
【上手くいかない状況】
No.001 2018/12/05 23:09:09 No.01-1 Labelイベントハンドラ 発生
No.002 2018/12/05 23:09:09 No.01-1 Buttonイベントハンドラ 発生



No.019 2018/12/05 23:09:09 No.01-1 Label2イベントハンドラ 発生
No.020 2018/12/05 23:09:09 No.01-1 Button2イベントハンドラ 発生

ソースコード

該当箇所を抜粋します.

// 構造体 typedef struct data { byte yh; // 年(1,000位,100位) byte yl; // 年(10位,1位) byte m; // 月 byte d; // 日 byte h; // 時 byte m; // 分 byte s; // 秒 byte no1; byte no2; byte no3; char kosyo[48]; }DATA ------------------------------------------------------------------------------------------------------------------ // 変数宣言 char buff[100][100]; // 初期化 memset( &buff, 0, sizeof(buff) ); // 故障データの取得 for(byte i=0; i<100; i++) { // 発生の時 if( flg == 1 ) { sprintf( buff[i], "No.%03d %02d%02d/%02d/%02d %02d:%02d:%02d No.%02d-%d %-36s 発生", Data[i].no1, Data[i].yh, Data[i].yl, Data[i].m, Data[i].d, Data[i].h, Data[i].m, Data[i].s, Data[i].no2, Data[i].no3, Data[i].kosyo); } // 回復の時 else { sprintf( buff[i], "No.%03d %02d%02d/%02d/%02d %02d:%02d:%02d No.%02d-%d %-36s 回復", Data[i].no1, Data[i].yh, Data[i].yl, Data[i].m, Data[i].d, Data[i].h, Data[i].m, Data[i].s, Data[i].no2, Data[i].no3, Data[i].kosyo); } } AnsiString kosyoData; // 故障データの表示 for(byte j=0; j<100; j++) { // char型の配列をAnsiStringに変換 kosyoData = StrPas(&buff[i][0]); // 100番目の場合 if( j == 99 ) { Memo1->Lines->Text = Memo1->Lines->Text + kosyoData; } // 1~99番目の場合 { Memo1->Lines->Add(kosyoData); } }

試したこと

1.文字列の連結を「sprintf」から+に変更してみたが,うまくいかない.
2.故障名の先頭位置はあって,状態の先頭位置が合わないことから,故障名を別の配列(50文字)に入れて,空き要素に半角スペースを設定してみたが,うまくいかない.
3.MemoやRichEditのフォントCharSetをいじってもうまくいかない.

【現状のMemoのプロパティ】
Font.Carset:SHIFTJIS_CHARSET
Font.Style:なし
ScrolBar:ssVertical

開発環境

OS:Windows7 32bit
Borland C++Builder 6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/12/07 08:12

C# というタグを見て C 言語の専門家が回答をスルーしている可能性があります。タグは正しくつけてください。
guest

回答2

0

ベストアンサー

【上手くいかない状況】

No.001 2018/12/05 23:09:09 No.01-1 Labelイベントハンドラ 発生
No.002 2018/12/05 23:09:09 No.01-1 Buttonイベントハンドラ 発生

こちらの内容が、実際のデータからのコピーではなく、
「質問の意図を伝えるべくそれっぽく見せるために手動で調整したもの」であった場合…という条件つきですが

いじるべきはCharSetではなくて、フォントではないでしょうか?
プロポーショナルではないフォント(”P”のつかないMSゴシックなど)を設定してみてはいかかでしょうか

投稿2018/12/07 12:10

yominet

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dem0nmichik0

2018/12/07 14:02

yominetさん.回答ありがとうございます. ご指摘のように位置がずれるときはFontのNameプロパティが”MS P ゴシック”で,それを”MS ゴシック”にしたら,位置が揃いました.Wordなどでも特に気にせず,MSゴシックを使っていましたが,今回「MSゴシック」と「MS P ゴシック」の違いに間隔調整があることを教えていただき,ありがとうございます.
guest

0

可能性として

No.001 2018/12/05 23:09:09 No.01-1 Labelイベントハンドラ 発生
No.002 2018/12/05 23:09:09 No.01-1 Buttonイベントハンドラ 発生

「Labelイベントハンドラ 」は半角 5、全角 8、スペース 7 で 5 + 8 * 3 + 7 = 36 で計算が合います。しかし、「Buttonイベントハンドラ 」は半角 6、全角 8、スペース 3 で 6 + 8 * 3 + 3 = 33 で 3 バイト足りません。

Button の方に見えない全角文字が一文字入っていれば計算が合いますから、それが入っていないかどうか調べてください。

投稿2018/12/07 08:27

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dem0nmichik0

2018/12/07 14:08

Zuishinさん,回答ありがとうございました. 問題は,全角半角ではありませんでしたが,新しい知識(全角は2バイトではなく,全角が3バイト)を知ることができてよかったです.ありがとうございます.
Zuishin

2018/12/07 14:29

こちらではフォントを変えても揃いませんがそちらでいいならそれで。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問