MemoコントロールをRead Only=Falseにして手入力で文字を入れた場合は最下行
まで来ると自動でスクロールアップします。
プログラムで文字を追加したときに同じことをやりたいのですが
inc(iCount);
Memo1.Text := Memo1.Text + IntToStr(iCount);
これだとスクロールアップしてくれずに手動で下向きカーソルキーで最下行まで
追っていかないと最下行が見えません。また、
inc(iCount);
Memo1.Lines.Add(IntToStr(iCount));
だと、1回Addするごとに改行が付いてしまいます。
Memo1.Text.Add(IntToStr(iCount));
では、コンパイラエラーで通りません。
何か方法が会ったらご教授ください
[環境]Windows2000pro + Delpi6 persnal
最後に
Memo1.Lines.Add('');
を追加って言うのはどうでしょう?
たとえば以下のようにするとできます.
動作確認環境 WindowsXP(SP2) + Delphi7 Pro
procedure ScrollBottom(WC:TWinControl);
begin
WC.Perform(WM_VSCROLL,MakeWParam(SB_BOTTOM,0),0);
WC.Perform(WM_VSCROLL,MakeWParam(SB_ENDSCROLL,0),0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
if OpenDialog1.Execute then begin
Memo1.Lines.BeginUpdate;
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
Memo1.Text := Memo1.Text + IntToStr(Memo1.Lines.Count);
ScrollBottom(Memo1);
Memo1.Lines.EndUpdate;
end;
end;
スクロール関係については,以下が参考になれば幸いです.
http://homepage2.nifty.com/Mr_XRAY/Halbow/VCL03.html
> Memo1.Text.Add(IntToStr(iCount));
>では、コンパイラエラーで通りません。
TextはStringです.StringにはAddメソッドはありません.
コード補完でAddは現れないと思いますが...
強引にコードを書いたのでしょうか.
Delphi6 Personal版にはコード補完機能がないのかも知れませんが.
さっそくのお返事ありがとうございます。
昼食を取りにちょっと外出している間にお返事を頂けるとは思いませんでした。
3Kさまへ
説明が難しいのですが強制スクロールというのではなくて、パソコン通信時代の
通信ソフトのようにと表現するのでしょうか。
通信ソフトだとRS232Cからの受信文字を画面に書き込んでいって、改行を入れな
い書き手の文章だと最下行まで表示した次は自動的にスクロールアップしていっ
てユーザが何もしないでも最後の文字が画面上で見えるようになります。
Memo1に以下のようにして次々文字列を追加していくと最下行より下にもぐりこ
んで行ってしまって最後の文字が見えなくなってしまうのです。
そこで「その時点での最後の文字が最下行に常に見える」方法を探しております
Memo1.Text := Memo1.Text + IntToStr(iCount);
Mr.XRAYさまへ
さっそくDelphi6を起動して「新しいプロジェクト」のFormにMemo1/Button1/
OpenDialog1を貼り付けた後に
procedure ScrollBottom(WC:TWinControl);
begin
WC.Perform(WM_VSCROLL,MakeWParam(SB_BOTTOM,0),0);
WC.Perform(WM_VSCROLL,MakeWParam(SB_ENDSCROLL,0),0);
end;
をimplementationの下にそのままコピーし、Button1をクリックしたとき
のbegin end;内に
Memo1.Lines.Clear;
if OpenDialog1.Execute then begin
Memo1.Lines.BeginUpdate;
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
Memo1.Text := Memo1.Text + IntToStr(Memo1.Lines.Count);
ScrollBottom(Memo1);
Memo1.Lines.EndUpdate;
end;
をコピーして実行したのですが「プロセスの生成ができません」とのメッ
セージが出てそれ以上進みませんでした。
Form関係で他に設定すべきことがありますでしょうか?
真琴:「カイトさん、この部屋の掃除が終わったら…」
海都:「シーツやタオルの洗濯? だったら、もう洗濯機に入れたから、そろそろ洗い終わるかな」
真琴:「チガウよ、カイトさん、また分からないコトあるんで、ご教授ください」
海都:「ん? いいけど…、マコっちゃん、その"ご教授ください"って言い方、オカシイよ」
真琴:「えっ、そうなの? でも、"教えて"を丁寧に言ったつもりだけど…」
海都:「"ご教示ください"という言い方はあるよ、でも"ご教授ください"はマチガイ」
真琴:「あ、そうなんだ…、昨日、学校で先生にも使っちゃった…、でも先生、注意してくれなかった」
海都:「音がよく似てるんで、誤用されやすいね、先生も気がつかなかったのかな」
真琴:「あんがい、先生も誤用ってこと知らなかったりして^^…」
>何か方法が会ったらご教授ください → http://www.tt.rim.or.jp/~rudyard/torii009.html
inc(iCount);
with Memo1 do begin
SelStart := Length(Text);
SelText := IntToStr(iCount);
end;
広海:「タダイっマ〜、ハルコちゃんに頼まれた買い物してきたよぉ」
真琴:「ねぇねぇ、今日の夕食、ナニ作ってくれるの?」
広海:「それは、今夜のお楽しみ、昨日の夕食より美味いぞぅ」
海都:「ハルコ社長がバイト代だしてくれるって言ったんで、急にハリキッテるよ」
真琴:「ねぇ、カイトさんのお財布は、まだ見つからない?」
海都:「うん、また海の中に落としたかと思って探したんだけど…」
春子:「誰かに拾われちゃったんでなければ、もう沖に流されたかもね」
海都:「潮が引いたら、もう一回探してみる…、ほかの場所に落したハズないんで」
広海:「ハジメっから持ってなかったンじゃないのぉ〜?」
海都:「日本に戻った時、アンタのクルマ、買い戻すのにカネ貸してやったのは誰だよ」
広海:「あれ?そんなコトもあったっけ?」
海都:「とぼけないで、バイト代もらったら、チャンと返せよ」
広海:「あ、じゃオレ、夕食の仕度するんで…」
真琴:「返すつもりないみたいよ」
取違科(とりいか)さまへ
inc(iCount);
with Memo1 do begin
SelStart := Length(Text);
SelText := IntToStr(iCount);
end;
上記で私がやりたいと思ってた事が出来ました。ありがとうございます。
SelStart/SelTextプロパティは使ったことが無かったのですがこんなに短いコ
ードで思っていたことを出来るとは思っても見ませんでした
(Lineの数を数えて+1されたら強制改行を入れたらいいんじゃないかと回りくど
いコードを試したりしていたので=>うまく動かなかった)
Delphi6のHELPでSelTextを調べると
> SelText を設定すると,新しい文字列をカーソルの位置にあるテキストに挿入できます
とあるのでHDD上のファイルにAppendするようにSelStartでMemo1.Textの最終
文字のうしろにポインタ(?)を移して、SelTextで新しい文字列を挿入(追加)
するという感じなのでしょうか
Mr.XRAYさんの方法でも出来るよ。ただし、NT系限定で 9X系ではダメ。
>をコピーして実行したのですが「プロセスの生成ができません」とのメッ
>セージが出てそれ以上進みませんでした。
こんな↑エラー出るはずないよ。どんなマズイやり方したんだか...
ツイート | ![]() |