キャレット | が残って困っています。

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
hide21

キャレット | が残って困っています。

#1 投稿記事 by hide21 »

Editボックスで半角文字を入力すると,キャレット記号「|」が入力した文字の半角の半分だけ移動した位置と正規の位置(文末)の2箇所に出てきます。入力された文字をカーソルで移動すると,直前のキャレットと正規のキャレットが2箇所表示されてしまいます。
どうしてこなるのか,いろいろ調べてもわかりませんでした。どなたか解決策を教えていただけないでしょうか?
なお,全角文字や漢字の半角ではそのようなことは起こりません。
Indigo Visualist
記事: 33
登録日時: 2006年5月22日(月) 21:01
お住まい: 山口
連絡する:

#2 投稿記事 by Indigo Visualist »

それはただ単にプレーンなテキストボックスで、スタイルやイベントなども設定してないのですよね?
メモ帳などを開いて、文字を入力してみて下さい。同じ現象が起こりませんか?
起こったら、もしかするとあなたの環境の問題かも知れません。
僕も以前同じ現象に遭遇したと思うんですが、詳しく思い出せません・・・。
OSかIMEの問題かも・・・?
hide21

キャレット | が残って困っています。(2)

#3 投稿記事 by hide21 »

Indigo Visualist 様 ご回答いただき,ありがとうございます。

> それはただ単にプレーンなテキストボックスで、スタイルやイベントなども設定してないのですよね?
スタイルは「可視」のチェックをはずして,プログラム中で「可視」にしています。
あと,拡張スタイルをクライアント境界線に設定してあります。
イベントは「Change」イベントを設定しています。

> メモ帳などを開いて、文字を入力してみて下さい。同じ現象が起こりませんか?
同じ現象は起きませんでした。

> OSかIMEの問題かも・・・?
実は以前のバージョン(ab307)では日本語が正常に表示されたのですが,今のバージョン(ab424)にしてから日本語が文字化けを起こしています(ソースだけで,実行するときちんと表示されます)。それが何らかの影響を与えているのかも・・・?
同じバージョン(ab424)を職場でも使っているのですが,そちらの方は文字化けしないのですが・・・。

よろしくお願いいたします。
nobsd
記事: 1
登録日時: 2006年5月03日(水) 17:06

#4 投稿記事 by nobsd »

私も昨日までそれに悩まされていました。
フォントをFixdsysに変えたら|が表示されなくなりましたよ。

すみません^^;
間違いました。
Terminalでした。
^^;
hide21

キャレット | が残って困っています。(3)

#5 投稿記事 by hide21 »

nobsd 様 アドバイスをいただきありがとうございます。

ご指摘のようにフォントの種類をTerminalに変えてみましたがだめでした。
window全体でもeditボックスだけの場合でもキャレットが残ってしまいます。

ところで,editボックスだけフォントを変える方法を私はつぎのようにしていますが,それが間違っているのかもしれません。

Dim hFont_Text As HFONT
hFont_Text=CreateFont(-24,0,0,0,600,0,0,0,128,3,2,1,50,"MS Pゴシック")
SendDlgItemMessage(hMainWnd as DWord,EditBox,WM_SETFONT,hFont_Text as DWord,0)
Indigo Visualist
記事: 33
登録日時: 2006年5月22日(月) 21:01
お住まい: 山口
連絡する:

#6 投稿記事 by Indigo Visualist »

そうですか・・・。詳しい状況がよく分らないのですが、
その現象が起こるのは、一つのプロジェクトの中だけでしょうか?
それとも、ABでコンパイルした全てのプロジェクトでしょうか?
あと、RAD画面で左下にある「テスト」ボタンを押して、表示されたエディットボックスでも同じ現象が起きますか?
起きるのならば環境(あるいはAB)の問題で、起きなければコードの問題と思います。
平凡なことしか言えず、すみません。
hide21

キャレット | が残って困っています。(4)

#7 投稿記事 by hide21 »

Indigo Visualist 様 1泊2日の出張しておりまして,返事が遅れ申しわけありません。
さて,今回の件ですが,ご指摘の方法をやってみました。
そのことを報告します。

> その現象が起こるのは、一つのプロジェクトの中だけでしょうか?
> それとも、ABでコンパイルした全てのプロジェクトでしょうか?
他のプロジェクトでためしましたが,やはり同じ症状が出ます。
もっとも同じようにフォントを設定しましたので当たり前といえば当たり前の結果だと思いますが・・・。

> あと、RAD画面で左下にある「テスト」ボタンを押して、表示されたエディットボックスでも同じ現象が起きますか?
「テスト」では起きません。「テスト」の場合,フォントの設定は無視されるようです。
本プログラムでもフォントの設定をしなければ,キャレットが残ることはありません。
ということは,前回記したフォントの設定の仕方がおかしいのでしょうか?
みなさんはどんな方法でフォントの設定をしているのでしょうか?

よろしくお願いします。
Indigo Visualist
記事: 33
登録日時: 2006年5月22日(月) 21:01
お住まい: 山口
連絡する:

Re: キャレット | が残って困っています。

#8 投稿記事 by Indigo Visualist »

フォントの設定の仕方は問題ないと思います。ただ、今気付いたのですが、
> SendDlgItemMessage(hMainWnd as DWord,EditBox,WM_SETFONT,hFont_Text as DWord,0)
の「hMainWnd as」と「DWord」との間に全角スペースが入っているのですが、これが原因ではないですよね?
hide21

キャレット | が残って困っています。(5)

#9 投稿記事 by hide21 »

Indigo Visualist 様 たびたびありがとうございます。

「hMainWnd as」と「DWord」との間に全角スペースが入っているとのことですが,プログラムでは半角のスペースになっております。
ためしに,全角スペースにするとエラー(全角スペースが含まれています・・・)になってプログラムが実行されませんでした。

フォーム全体のフォントをこのEditボックス(1ヶ所)に合わせて,それ以外(いっぱい)を設定すれば問題は起きないとは思いますが・・・。
Indigo Visualist
記事: 33
登録日時: 2006年5月22日(月) 21:01
お住まい: 山口
連絡する:

#10 投稿記事 by Indigo Visualist »

そうですよね。また今気付いたことなのですが、
>Dim hFont_Text As HFONT
>hFont_Text=CreateFont(-24,0,0,0,600,0,0,0,128,3,2,1,50,"MS Pゴシック")
>SendDlgItemMessage(hMainWnd as DWord,EditBox,WM_SETFONT,hFont_Text as DWord,0)
このコードはプログラム内のどこに記述されていますか?
あとDeleteObjectによるフォントの破棄はどこで行われていますか?
hide21

キャレット | が残って困っています。(6)

#11 投稿記事 by hide21 »

Indigo Visualist 様 返信ありがとうございます。

下の2行はプログラムの先頭の
「' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。」
の下にあります。
>Dim hFont_Text As HFONT
>hFont_Text=CreateFont(-24,0,0,0,600,0,0,0,128,3,2,1,50,"MS Pゴシック")

下の1行は
「Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord」
の下に書きました。
>SendDlgItemMessage(hMainWnd as DWord,EditBox,WM_SETFONT,hFont_Text as DWord,0)

そして,最後の「フォントの破棄」は
   「Sub MainWnd_Destroy()」

   「DeleteObject(hFont_Text)」
と記述しました。

Indigo Visualist 様 いかがでしょうか?
hide21

キャレット | が残って困っています。(解決)

#12 投稿記事 by hide21 »

Indigo Visualist 様 のご指摘を元に

>SendDlgItemMessage(hMainWnd as DWord,EditBox,WM_SETFONT,hFont_Text as DWord,0)

の位置を「Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)」に持っていったらうまくいきました!
記述する場所がいけなかったようです(本当かな?)。

ここまで,いろいろご指摘・ご指導をいただき,本当にありがとうございました。
Indigo Visualist
記事: 33
登録日時: 2006年5月22日(月) 21:01
お住まい: 山口
連絡する:

おめでとうございます!

#13 投稿記事 by Indigo Visualist »

本当に良かったです。
今更なことを言いますと、MainWndProcはコマンドを処理するごと(?)に何度も呼ばれるので、
ウィンドウの設定など始めに一度だけ実行する処理は、MainWnd_Createで実行すると良いですよ。
・・・本当に今更ですね。すみません。
返信する