Re: 複数行のテキスト入力フォームの実装 ( No.1 ) |
- 名前:sy(サイ) 日時:2011/12/13 14:35
1ですが、テキストの大きさ(ピクセル)は表示する前に取得する事が出来ますので、
1行のフォームの長さを超えたら改行を加えるだけの処理で実現できます。
2ですが、スペースを埋め尽くすのであれば、
後ろから文字列を検索し、スペースでは無い文字が出てくるまで消して行けば簡単です。
ちなみに文字列のデータを管理する場合、char*よりもc++標準の<string>をインクルードし、
std::stringを使った方がはるかに便利です。
|
Re: 複数行のテキスト入力フォームの実装 ( No.2 ) |
- 名前:delt 日時:2011/12/13 20:05
sy様、返信ありがとうございます。
まずは前回の私の書き込みの改行が良くなく、見難い文章になっていました。
ごめんなさい。
実は前回の書き込みで記載している事以外に色々とやってみては、うまくいかないの繰り返しをしています。
私がやった事を全部書くととても長くなるので一部のみの書き込みをしました。
それでsy様からの提案は、すでに考案&理想通りいかない事を経験済みなのです。
>1ですが、テキストの大きさ(ピクセル)は表示する前に取得する事が出来ますので、
>1行のフォームの長さを超えたら改行を加えるだけの処理で実現できます。
テキストのレングスを取得しても、そもそも思い通りの「改行」が出来ないことが問題です。
>2ですが、スペースを埋め尽くすのであれば、
>後ろから文字列を検索し、スペースでは無い文字が出てくるまで消して行けば簡単です
スペースで埋め尽くす案を書きましたが、これには他にも色々問題があり、
1の問題で、スペース文字の途中が下の行の頭に表示されて、全行の頭がバラバラになります。
また、スペースを消す処理を入れると、文章中の全てのスペースが消されます。
私が前回書きました例はあくまでも「色々やってみました」ということを表したかっただけで、
そもそもの問題提起が「DrawKeyInputStringとSetDrawAreaで描画可能領域を変更すること」で、
改行を完璧に実装したい(できるのか)ということです。
どうかよろしくお願いします。
|
Re: 複数行のテキスト入力フォームの実装 ( No.3 ) |
- 名前:sy(サイ) 日時:2011/12/14 10:31
素直にKeyInputStringで取得したデータを自前で表示して行くのが一番綺麗になると思いますよ。
DrawKeyInputStringで完璧な改行を実装するのは管理人さんの作業になってしまいます。
若しくはDXライブラリ自体をご自分で改良するか。
ちなみに
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1594
ライブラリの文字列関係の改行文字列ははしっかり対応されてないようです。
|
Re: 複数行のテキスト入力フォームの実装 ( No.4 ) |
- 名前:delt 日時:2011/12/16 03:01
やはりDXライブラリのみでは実装は出来ないみたいですね。
それを知りたかったのですっきりしました。
改めて試行錯誤して自分の目的を実装しようとしましたが、
やっぱり理想通りには出来ず、妥協することで官僚としたいと思います。
ちなみに妥協した点は以下の通りです。
・enterキー押下による改行を諦める(SetActiveKeyInputを使用しなければ可能なのですが、文字変換リストが必要なので…)
・半角文字を入力しないことを前提とする
そこで、新たな問題が出たのですが、
半角文字を入力させない方法と言うのはあるのでしょうか?
MakeKeyInputの引数、SingleCharOnlyFlagで全角文字不可に出来ますが、
逆に半角文字不可(全角文字のみ可能)というのは出来ないのでしょうか?
|
Re: 複数行のテキスト入力フォームの実装 ( No.5 ) |
- 名前:管理人 日時:2011/12/18 17:18
文字列入力機能の自由度が低くて申し訳ありません
今回のお書き込みを見てカーソル移動の部分もDXライブラリ外で制御できるような
自由度の高い文字列入力機能を作りたいと思ったのですが、如何せん現状実装したい項目が多すぎて( +作業時間が全然確保できなくて )
何時になるか分からない状態です、すみません orz
全角文字だけ入力できるようにする機能は数行追加すれば実装できることだったので実装してみました
よろしければこちらのバージョンをダウンロードしてください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
MakeKeyInput 関数の最後に int DoubleCharOnlyFlag という項目を追加しました
int KeyInputHandle ;
KeyInputHandle = MakeKeyInput( 100, FALSE, FALSE, FALSE, TRUE ) ;
とすると、全角文字しか入力できないようになります
SingleCharOnlyFlag と似通った機能なので安易に引数を追加するのはどうなんだろうと思ったのですが、
現状大きく手を加える時間も無いし、そもそもそれぞれ同時に TRUE することがないフラグ達を別々の
引数にしている時点で要改修なので、今回は駄目な関数の流れに乗ることにしました (_ _;
よろしければお使いください
|