RichEditのVisible=falseのとき、Alignmentを変更するには?

解決


かんとく  2009-10-06 01:44:29  No: 35830

お世話になっております。
Delphi2007,XPです。

RichEditのVisible=falseのとき、Alignment:=taCenterをして、
RichEditのVisible=Trueとすると、RichEditのテキストが左寄せのままになってしまいます。

RichEditのVisible=Trueのとき、Alignment:=taCenterをすると、
RichEditのテキストは中寄せになります。

RichEditのVisible=falseのまま、RichEditのテキストを中寄せにするには、どうしたらよいでしょうか?

よろしくお願いします。


かんとく  2009-10-06 19:23:18  No: 35831

まだ解決していないのですが、いろいろ試しているうちに、新しいことがわかりました。

Alignment:=taCenterにしてもカーソルがLeftのままのRichEditで、何も入力されていない状態で、Deleteキーを押すと、Centerにカーソルが移動しました。
でも、BackSpaceキーでは、Leftのままです。

もう少し調べてみます。


ttt  2009-10-06 22:19:00  No: 35832

実行時にTRichEdit.Alignmentを変更しても、
新しく追加される行にしか効果がないと思います。
元からある行を変更したかったら、SelectAllしてから
Paragraph.Alignment := taCenter でどうでしょう。


かんとく  2009-10-07 01:55:39  No: 35833

ありがとうございます。

RichEdit1.SelectAll;
RichEdit1.Alignment:=taCenter;
としても、Leftのままでした。

しかし、
RichEdit1.Text:='aaa';
RichEdit1.Alignment:=taCenter;
とすると、Centerになりました。

でも、
RichEdit1.Text:='';
RichEdit1.Alignment:=taCenter;
としても、Centerにはなりません。

※「RichEditのVisible=falseのとき、」というのは、関係ないかもしれません。
ずっとVisible=trueの状態で試していましたが、上のようになりました。

すみませんが、よろしくおねがいします。


Mr.XRAY  2009-10-07 04:56:04  No: 35834

Mr.XRAYです.

>※「RichEditのVisible=falseのとき、」というのは、関係ないかもしれません。

見えない時に設定しても,見えないのだから,...  と思うのですが.う〜ん.
RichEditは,段落(Paragraph)ごとにAlignmentを設定したり,文字列こどに書式を
設定することができます.
もし,既に入力済みのテキスト全体のAlignmentを設定するのであれば,tttさんの
方法でいいのではないかと.
もしかしたら,他の方法があるかも知れませんが,今思いつくのはこの方法です.

テキストを新たに設定するのであれば,一度テキストを全てクリアすればできそうです.
例えば以下のように.

procedure TForm3.Button1Click(Sender: TObject);
begin
    RichEdit1.Clear;
    RichEdit1.Alignment := taCenter;
    RichEdit1.Text := 'AAA';
end;

既に表示中(入力済み)のテキストに対して実行したいのであれば,tttさんの方法で.
BeginUpdateとEndUpdateではさんでおけば,見た目には,選択状態はわからないでしょう.

procedure TForm3.Button1Click(Sender: TObject);
var
    iPos : Integer;
begin
    //現在のキャレット位置を記憶しておく
    iPos := RichEdit1.SelStart;

    RichEdit1.Lines.BeginUpdate;
    RichEdit1.SelectAll;
    RichEdit1.Paragraph.Alignment := taLeftJustify;

    //キャレット位置を戻す
    RichEdit1.SelStart := iPos;
    RichEdit1.Lines.EndUpdate;

    RichEdit1.SetFocus;
end;


Mr.XRAY  2009-10-07 05:00:32  No: 35835

Mr.XRAYです.

もしかしたら,tttさんの方法では何か問題があるということなのかな?


かんとく  2009-10-07 18:56:49  No: 35836

ありがとうございます。

procedure TForm1.FormCreate(Sender: TObject);
begin

richedit1.SelectAll;

richedit1.Alignment:=taCenter;

richedit1.Clear;

richedit1.Alignment:=taCenter;

end;

とすると、RichEditに何かキーボードから文字を打ち込むと、Centerに文字が表示されるようになりました。

しかし、起動直後は、カーソルがLeftにあります。

起動直後に、カーソルがCenterにくるようにできますでしょうか。

よろしくおねがいします。


Mr.XRAY  2009-10-07 19:50:02  No: 35837

Mr.XRAYです.

>起動直後に、カーソルがCenterにくるようにできますでしょうか。

カーソル  −−>  キャレット
この場合のCenterというのは,どこのことでしょう?
いずれにしても,内容が違うので別スレッドにした方がいいと思いますよ.


ttt  2009-10-07 20:40:49  No: 35838

とりあえず、
TRichEdit.Alignment
はデザイン時に設定するか、テキストを全クリアしないと有効になりません。
(RecreaateWndがらみのバグだという話を前に見たような気がしますが
今調べたところでは、明確にバグだという情報は見つかりませんでした)

実行時に文字揃えを変更したい場合は、対象文字列を選択するか
キャレットを文字列内に置いた状態で

TRichEdit.Paragraph.Alignment

を変更してください。
素のAlignmentではなく、ParagraphというプロパティのサブプロパティであるところのAlignmentです。


かんとく  2009-10-08 23:35:13  No: 35839

ありがとうございます。

キャレットという言葉は知りませんでした。すみません。

「起動直後に、カーソルがCenterにくるようにできますでしょうか。」
というのは、
「起動直後に、キャレットがRichEdit1のCenterにくるようにできますでしょうか。」
という意味で質問したつもりでいた。

procedure TForm1.FormCreate(Sender: TObject);
begin

RichEdit1.Clear;

RichEdit1.Paragraph.Alignment:=taCenter;

end;

で、思うとおりにできました。

ありがとうございました。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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