• ベストアンサー

リッチエディットコントロールでの折り返しについて

開発環境はBCC 5.5、OSはWindows 98 SEです。 テキストを編集するWindowsアプリケーションを作成していて、 リッチエディットコントロールの一行に入力できる文字数を制限したいのですが、 どうすればいいのか、よくわかりません。 横にスクロールできる上で、自動改行をさせようと思います。 折り返しの文字数(byte単位でも何でも)を指定する方法をご存知の方がいらっしゃれば、 ご教授おねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yonfa
  • ベストアンサー率52% (22/42)
回答No.3

> しかし、それではテキストを保存する時に、 > 改行コードごと保存してしまいそうなのですが… 自動改行の部分には何らかの目印を付けておいて、保存時に削除すればよいです。 CEdit::FmtLines の解説によると、「2 つのキャリッジ リターンと 1 つのラインフィードから成るソフト改行が単語分割された行の終わりに挿入されます。ハード改行は、1 つのキャリッジ リターンと 1 つのラインフィードから成ります。」だそうです。 がんばって実装してください。

akoyagai
質問者

お礼

なるほど、そういう手があったんですね。 なんとか、保存時に削除するようにはできました。 ソフト改行を挿入するのもがんばってみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • yonfa
  • ベストアンサー率52% (22/42)
回答No.5

#2&3です。 よく調べてみたら、EM_SETRECT なるものがありました。 画面上の表示領域とは別に、書式領域を設定するものです。 コントロールに表示する文字フォントが固定幅であれば、(文字数×文字幅)を領域幅に設定すれば要望通りの動作をするかもしれません。

akoyagai
質問者

補足

Windows 98だからなのか、リッチエディットだからなのかわかりませんが、 どうも、私の環境ではEM_SETRECTは動作しませんでした。 また、EM_SETRECTでは、表示できる領域を制限するだけで、 その制限を越えて入力した場合にはスクロールバーが表示されて、 そのまま入力できるらしいです。 http://www.winapi-database.com/tips/40/

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★回答者 No.1 です。 ・私のリンク項目で紹介した『EM_FMTLINES』による『ソフト改行文字を挿入する』で  質問者さんの問題は解決しそうですが…。 抜粋:ソフト改行文字とは ・テキストボックスに標準で用意されたワードラップ機能  (テキストボックスの右端で折り返す機能)において、ソフト的に  付加された改行文字を指す。ソフト的に負荷されるだけなので  表示されないし、テキストにも影響しない。 ・EM_FMTLINES を使うと、ソフト改行文字を  実際の改行文字に変換できる。 ・となっています。 ・回答者 No.3 さんの『CEdit::FmtLinesの解説』より、ソフト改行は  『2 つのキャリッジ・リターンと、1 つのラインフィードから成る』  との事です。つまり、通常の改行が『\r\n』ですが、ソフト改行は  『\r\r\n』という事になります。 ・以上。回答というよりアドバイスでした。 ・がんばって下さいね。

参考URL:
http://www.winapi-database.com/Message/EM/EM_FMTLINES.html
全文を見る
すると、全ての回答が全文表示されます。
  • yonfa
  • ベストアンサー率52% (22/42)
回答No.2

EM_LIMITTEXT で文字数制限をすると、一行しか入力できなくなります。 #1 さんのおっしゃるように、自分で各行の文字数をチェックして改行コードを挿入するしかなさそうです。 チェックするタイミングとしては、コントロールに EN_CHANGE メッセージが送られた時ということになります。 つまり、一文字入力されるごとに行の文字数をチェックして処理することとなります。 勝手に改行するのはよいのですが、編集で行の文字数が減った場合、次の行と連結しなおして、再度改行コードを挿入しなおすという処理が必要な気がします。 しかも、ユーザが自分で改行した場合(自動改行でない)は、次の行との連結・改行はしないといった考慮も必要になるかと思います。 つまるところ、かなり面倒くさいです。 一行の文字数を制限したい理由はわかりませんが、入力された内容を保存するなどで次の処理に渡す段階で改行を挿入するようにしたほうが、簡単に実装できると思います。

akoyagai
質問者

お礼

ご回答ありがとうございます。 やはり、自分で改行コードを挿入するしかないのでしょうか? しかし、それではテキストを保存する時に、 改行コードごと保存してしまいそうなのですが… とりあえず、やってみることにします。

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★1行に入力できる文字数の制限だけはアドバイスします。 ・リッチエディットの『EM_GETLIMITTEXT』メッセージで制限できます。 サンプル: SendMessage( Edit.hWnd, EM_LIMITTEXT, 制限文字数, 0 ); ←リッチエディットのウインドウハンドルの場合 SendDlgItemMessage( hWnd, IDC_RICEDIT, EM_LIMITTEXT, 制限文字数, 0 ); ←ダイアログのコントロールの場合 最後に: ・自動改行の場合はサブクラス化すると出来ます。 ・また、入力されている行を取得して自分で文字数を数え、指定の文字数を超えていたら改行コードを  挿入して、入力された行へ文字列を設定する方法が考えられます。が、サブクラス化にくらべ複雑です。 ・もちろん、サブクラス化した場合も文字数を数えたりして制御(改行挿入)しますが…。 ・あっ、EM_FMTLINES というメッセージを見つけました。→説明によると  『複数行テキストボックスにおいて、ソフト改行文字を設定・削除する』とあります。  これを使えば良さそうですね。 ・以上。おわり。 リンク: ・http://www.winapi-database.com/Message/EM/EM_LIMITTEXT.html→『入力可能なバイト数を設定する』 ・http://www.winapi-database.com/Message/EM/EM_FMTLINES.html→『複数行テキストボックスにおいて、ソフト改行文字を設定・削除する』

参考URL:
http://www.winapi-database.com/Message/EM/index.html
akoyagai
質問者

補足

私の説明が悪かったようです。 「一行に入力できる文字数の制限」ではなく、 「複数行のリッチエディットにおいて、何桁目で折り返すか」ということでした。 すいません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エディットコントロールへの表示

    エディットコントロールへの表示 C++/MFCでエディットコントロールに文字が表示されないことで困っています。 たとえば、ダイアログベースのアプリケーションで エディットコントロールm_editとボタンを貼り付け、 ...Dlg::OnBnClickedButton() { m_edit.SetWindowTextA("Start"); // 何らかの処理 m_edit.SetWindowTextA("End"); } と実装した場合、 コンパイルして実行すると、Startは表示されず、 処理後にEndだけが表示されてしまいます。 最初にStartを表示させ、処理後にEndを表示させる方法を ご存知の方いらっしゃらないでしょうか。 よろしくお願いいたします。 ちなみに、 OS:Windows XP Home 開発環境:Visual Studio 2005 Standard Edition 言語:C++/MFC です。

  • TextArea

    j2SEでのアプリケーションで データベースを使って読み込んだ文字をTextAreaに 表示しているのですが、一行に長くなってしまい 表示しきれなくなってしまいます。 ある文字数で改行というように出来ないでしょうか?

    • ベストアンサー
    • Java
  • 複数行のエディットボックスで改行入力

    複数行のエディットボックスで改行入力 MFC ダイアログベースで、簡単なテキストエディタを作成しています。 エディットボックスは固定サイズで、縦横スクロール無しにしています。 上記エディットボックスに、改行の無い2行分の文字列を出力すると自動的に折り返され、 2行で表示されるのですが、そのとき、2行目の行頭でEnterキーを押すと、 カーソル位置で改行し、空行が挿入されます。(計3行分の表示となる) 10文字文の幅のエディットボックスにて、 文字列 "12345678901234567890" をエディットボックスに出力 エディットボックスでは下記の用に表示。 1234567890 1234567890 2行目の先頭でEnterキー押下で3行表示となる 1234567890 (空行) 1234567890 実際には、1行目の終わりに改行コードが挿入されているので 空行ではなく、改行された状態の2行表示としたいのですが、 どのようにすれば、よいでしょうか? よろしくお願いします。

  • エディットボックスとプレグレスコントロール

    今までCをやっており、最近C++.NETをやり始めたものです。 参考書片手に頑張っているのですがなかなかうまくいけません。 基礎的な事かもしれませんが、分かる方は教えてくださいm(_ _)m 開始ボタンを押すとエディットボックスにフォーカスをあわせて、 エディットボックスに文字が入力されるとそれにあわせてプログレスコントロールを動かしていきたいのです。 そして入力数が50になったら処理を終了させたいです。 フォーカスをあわすまではいけるのですが、そこから先が分かりません。もしよろしければ誰か教えてください。

  • Excelのセル内での文字の勝手な折り返しをやめた

    こんにちは、不思議な現象が出ていて、悩んでいます。 どなたか同じ現象になった方はおられますか? セル内に大量の文字(900文字程度)が入っています。 セルの文字の折り返しにチェックが入っています。 そのような状況の中で、規則性のない行で改行されてしまいます。 +----------------------------------------+ |あああああああああああああああああああああ| |あああああああああああああああああああああ| |あああああああああ                |←途中で行が変わってしまいます。 |あああああああああああああああああああああ| |ああああああああああああああああああ    | |あああああああああああああああああああああ| +----------------------------------------+ 3行目の語尾に改行コードは入っていません。 メモ帳などへ上記の内容を貼り付けて確認しても、改行コードは含まれておりません。 自分が望んでいる結果は以下のような感じで、Excelの自動折り返しのみで そのまま表示したいです。 +----------------------------------------+ |あああああああああああああああああああああ| |あああああああああああああああああああああ| |あああああああああああああああああああああ| |あああああああああああああああああああああ| |あああああああああああああああああああああ| |あああああああああああああああああああああ| +----------------------------------------+ 使用している PC は XP で、Excel は 2007 を使用しております。 何かExcelの制限があるのでしょうか? よろしくお願いします。

  • display: inlineと自動的な折り返し

    display: inlineで<div>要素を並べています。 <div>要素中の文字が中途半端に改行されてしまいます。 <div>要素にwhite-space: nowrap;を指定すると、全体が一行になってしまいます。(ウィンドウサイズによって改行されない) 大変お手数ですが、よろしくお願いいたします。 イメージ例: アップル マイクロソフト インテル グー グル ソニー ノキア 質問 グーグルを自動的に折り返しを禁止したいです。

    • ベストアンサー
    • CSS
  • ホームページ ビルダー 文字の折り返し

    環境 ・WindowsXP(SP2) ・ホームページビルダー(ver14) ・どこでも配置モード かんたんナビの「文字の挿入」で文字を入力しました。 upしてブラウザ(IE6)で確認すると、文字数が多い行の文字列が勝手に 折り返し(改行?)されてしまいます。 (希望表示:    今日は学校の体育の授業のとき、50m走でやっと8秒をきりました。  実際表示:    今日は学校の体育の授業のとき、50m走でやっと8秒をき    りました。) 文字列の多い行があるときはスクロールバーで対処させたいのですが、 ホームページビルダーではどのように設定すればいいのでしょうか?

  • PDFをの折り返しをしたい

    お世話になります。 A4で作成されたPDFがあります。 これをB5に変更したいのですが、一行の文字数が変わらないため、 縮尺されてB5に変換されてしまいます。 文字の大きさを変更せずに、改行・折り返し位置を自動で変換してm、 B5に変更することは、可能でしょうか 可能でしたら、B5等の用紙指定ではなく、 文字数で折り返し位置をしていできれば助かります。 表示→ズーム機能で一時的に折り返しするのではなく、 折り返されたまま保存したい次第です。 ※所持しているソフトは、「acrobat pro」「just pdf」です。 可能でしたら、画像も含まれているPDFですので、画質等が下がらない 方法ですと助かります。 何卒よろしくお願い致します。

  • リストコントロールの使用法について

    現在、VC++6.0を使用してアプリケーションの開発を行っていますが、リストコントロールで作成されるスクロールバーのイベントの取得方法が分からず困っております。 よろしくお願いします。

  • Mailにおけるテキスト折り返し設定の方法

    Mac OS 10.5.7でMail3.6を使っていますが、メーリングリストなどに投稿した自分のメールのテキストが、現在30文字程度で折り返されて(改行されて)しまっています。あまりに短いので何とか変更したいのですが、どこを探してもその設定の変更方法がわかりません。 この折り返しの文字数を変更するにはどうしたらいいのでしょうか。ぜひ教えて下さい。

    • ベストアンサー
    • Mac