Editにキャレットを表示させるには?

解決


みゆ  2002-08-17 20:52:00  No: 1297

いつもお世話になっています。
Editが表示されたときに、キャレットが表示されるようにしたいのですが、
SelStartで設定出来ると思ってやってたんですけど、出来ません。
EditのonEnterイベントのところに書くんですよね?(^^;
すいません、教えて下さい。


にしの  2002-08-17 21:00:14  No: 1298

フォーカスを当てれば表示されると思います。
逆に、フォーカスがなければ表示されなかったはずです。
SetFocusしてみてください。


みゆ  2002-08-17 21:31:27  No: 1299

出来ませんでした(>_<。)すいません超初心者で・・・。
それはonEnterイベントの所に書くんですか?
SetFocusして、Selstartさせるんですよね?


kazu  2002-08-18 01:08:14  No: 1300

>出来ませんでした(>_<。)すいません超初心者で・・・。
>それはonEnterイベントの所に書くんですか?
>SetFocusして、Selstartさせるんですよね?

違います。
表示されたときにキャレットが表示されるようにするだけなら
TEditのTabOderプロパティを0にセットしておくだけでキャレットが
表示されます。
SetFocusはフォーカスが別にあるとき、何らかのイベントでフォーカスを
移動させたいときに使います。※例えばButton1Clickイベントなど

#SelStartはキャレットを表示させるだけなら関係ありません。


みゆ  2002-08-18 01:32:05  No: 1301

>TEditのTabOderプロパティを0にセットしておくだけでキャレットが
>表示されます。

これはプロパティのVisibleをTrueにしてるときですよね?
私は、最初Falseにしてて、Buttonを押されたらTrueにしてるんですけど、
そうするとキャレットが表示されないんです〜。
なぜでしょう?(T_T)


にしの  2002-08-18 01:35:32  No: 1302

selstartを使用したい理由があるのでしょうか。
そうなると、単に「キャレットを表示させたい」ということではないですね。
何かやりたいことをすると、キャレットが表示されなくなる、ということだと思いますが、その「何かやりたいこと」がわからないと回答できません。

kazuさんもおっしゃっていますが、Delphiを立ち上げて(保存されていないproject1のform1が表示されている状態で)、TEditを貼り付け、プロジェクトに名前を付けて保存し、実行してみて下さい。
Edit1(TEditのオブジェクト)のみの場合、アプリケーションがアクティブになれば、Edit1に必ずフォーカスが当たります。
この状態でキャレットが表示されないということでしょうか。
そうであれば、メモリ不足で動作が不安定なのかもしれません。
もう一度、環境(Windowsのバージョン、Delphiのバージョン、メモリ容量など)と、やりたいことを明確にしてください。
整理すれば、きっと解決の糸口は見つかります。


にしの  2002-08-18 01:38:20  No: 1303

発言が重なってしまいました^^;

  Edit1.Visible := True;
  Edit1.SetFocus;

で、うちの環境では表示されていますが、どういう現象でしょうか。
もしかして、フォーカスが当たったときに選択状態になり、キャレットが見えにくくなることを「見えない」とおっしゃっていますか?


みゆ  2002-08-18 02:06:52  No: 1304

あ、すいません、1人で難しくしてました(笑)
表示できました!ありがとうございます。
でも、またもや問題が・・・(-.-;)
Edit1.Visible := True;
Edit1.SetFocus;
で、最初は表示されているんですが、文字を入れたら消えてしまいます!
その文字を入れるのは、キーボードではないんです。
CommandButton(100個くらいあります)を押したら、
そのCapsionをEditのTextに入れるんです。
procedure TFrm_top.BtnClick(Sender: TObject);
begin
        Edit1.text:=Txt_tab.text+Btn.caption;
end;
どうやったらキャレットが入れた文字の最後尾にずっと表示されたままですか?
何度もすいません。。。教えて下さい<(_  _)>


にしの  2002-08-18 02:53:31  No: 1305

procedure TFrm_top.BtnClick(Sender: TObject);
begin
  Edit1.text:=Txt_tab.text+Btn.caption;
end;
だと、フォーカスは、ボタンにある状態のままです。

このBtnが、Edit1を表示するボタンもかねているのであれば、
begin
  Edit1.Visible := True;
  Edit1.Text := Edit1.Text + Button1.Caption;
  Edit1.SetFocus;
end;
ですし、かねていないのであれば、
begin
  Edit1.Text := Edit1.Text + Button1.Caption;
  Edit1.SetFocus;
end;
です。


kazu  2002-08-18 03:06:40  No: 1306

Edit1.Text := Txt_tab.text+Btn.caption;
Edit1.SetFocus;
Edit1.SelStart := Length(Edit1.Text);

>CommandButton(100個くらいあります)を

リソースの無駄遣いのような気が…。
どうしてもTButtonを使わなければならない
というのではないならTSpeedButtonを使うか、
http://home1.infonia.ne.jp/~delphian/delphi/index.html
ここから「マルチボタン」のようなコンポーネントを使うかした
方がいいと思いますが。


みゆ  2002-08-18 03:23:33  No: 1307

どうもありがとうございました!!出来ました!
何度も何度もすいませんでした(^^;


みゆ  2002-08-18 03:33:01  No: 1308

>kazuさん
やっぱりリソースの無駄遣いですかっ!?
配列にしようとかも色々考えたんですけど、分からずにやめたんです(ノ_・。)
今月中に仕上げなきゃいけないんで、とりあえず今はこれで(^^;;
一応のものが出来たら、ちゃんとしたものを作り直してみます。
助言どうもありがとうございました。


hatena  2002-08-18 06:46:02  No: 1309

TButton は、ウィンドウコントロールですが、TSpeedButton は、
グラフィックコントロールなのでリソースを消費しません。
ので、TButtonをTSpeedButtonに変更するだけで、リソースの無駄遣いは
解消できますよ。
また、フォーカスを持つこともできませんので、逆にボタンを押しても、
フォーカスの移動が起きないので、SetFocus する必要もなくなります。


たかみちえ  URL  2002-08-18 10:01:09  No: 1310

100個もあると押すほうも大変なので、
配列としてそのキャプションだけを取っておいて、
オプションボタンか何かで、そのうち10個ずつ表示するとかにしたほうが、
使いやすいと思います。どうでしょうか?
(キャプションの配列を作って、
  オプションボタンが押されたとき、そのItemIndexから、
  キャプション用配列の何番目から何番目を読み取ればいいか計算。表示)

  リサイズできない(またはリサイズすると使いづらい)フォームが
あまり大きくなるのも考えもの(解像度が小さいと、使い勝手がすごく違うので)だし。
特に"常に全部表示していないといけない"理由がないのなら。


にしの  2002-08-18 10:36:06  No: 1311

きっと、ソフトキーボードを実現したかったのでしょう。
キャプションに'A'とあれば、'A'を追加するように。
# 違うかもしれませんが…
業務アプリの場合、見やすさより使いやすさ(理解のしやすさ)が優先されますからね。
僕も似たようなのを作りましたが、フォントサイズは24、画面いっぱいにボタンだらけの、Windowsアプリとは思えないものでした。
ユーザが、PCにふれたこともないような素人の年配者で、「見やすく」「わかりやすく」がコンセプトでした。
そのプロジェクトでも、リソース不足でボタンの表示が乱れました。そのときは、ボタンを描画することで回避しましたが、100個のボタンでも同じようなことが起きる気がします。
できるだけ、作り替えの簡単なようにコーディングした方がいいですよ。


みゆ  2002-08-18 19:13:25  No: 1312

みなさん、どうもありがとうございます(T_T)
にしのさんの言う通り、ソフトキーボードを作っています。
しかも、私も素人の年配者を対象にしています。
今年の7月にDelphiを始めたので、みなさんにお手数をおかけしちゃってすいません<(_  _)>
PageControlで、平仮名・英語・数字・記号の4つのTabSheetを作り、
英語のTabSheetなら26個と空白・削除などのボタンも入れています。
Tabなので、見た目にはそんなにボタンがあるように見えない(!?)と思っていたんですが(^^;
早速TSpeedButtonに変更したいと思います!


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加