実現したいこと
次のフォーマットで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

回答2件
あなたの回答
tips
プレビュー