お世話になっております。
Delphi2007,XPです。
RichEditのVisible=falseのとき、Alignment:=taCenterをして、
RichEditのVisible=Trueとすると、RichEditのテキストが左寄せのままになってしまいます。
RichEditのVisible=Trueのとき、Alignment:=taCenterをすると、
RichEditのテキストは中寄せになります。
RichEditのVisible=falseのまま、RichEditのテキストを中寄せにするには、どうしたらよいでしょうか?
よろしくお願いします。
まだ解決していないのですが、いろいろ試しているうちに、新しいことがわかりました。
Alignment:=taCenterにしてもカーソルがLeftのままのRichEditで、何も入力されていない状態で、Deleteキーを押すと、Centerにカーソルが移動しました。
でも、BackSpaceキーでは、Leftのままです。
もう少し調べてみます。
実行時にTRichEdit.Alignmentを変更しても、
新しく追加される行にしか効果がないと思います。
元からある行を変更したかったら、SelectAllしてから
Paragraph.Alignment := taCenter でどうでしょう。
ありがとうございます。
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です.
>※「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です.
もしかしたら,tttさんの方法では何か問題があるということなのかな?
ありがとうございます。
procedure TForm1.FormCreate(Sender: TObject);
begin
richedit1.SelectAll;
richedit1.Alignment:=taCenter;
richedit1.Clear;
richedit1.Alignment:=taCenter;
end;
とすると、RichEditに何かキーボードから文字を打ち込むと、Centerに文字が表示されるようになりました。
しかし、起動直後は、カーソルがLeftにあります。
起動直後に、カーソルがCenterにくるようにできますでしょうか。
よろしくおねがいします。
Mr.XRAYです.
>起動直後に、カーソルがCenterにくるようにできますでしょうか。
カーソル −−> キャレット
この場合のCenterというのは,どこのことでしょう?
いずれにしても,内容が違うので別スレッドにした方がいいと思いますよ.
とりあえず、
TRichEdit.Alignment
はデザイン時に設定するか、テキストを全クリアしないと有効になりません。
(RecreaateWndがらみのバグだという話を前に見たような気がしますが
今調べたところでは、明確にバグだという情報は見つかりませんでした)
実行時に文字揃えを変更したい場合は、対象文字列を選択するか
キャレットを文字列内に置いた状態で
TRichEdit.Paragraph.Alignment
を変更してください。
素のAlignmentではなく、ParagraphというプロパティのサブプロパティであるところのAlignmentです。
ありがとうございます。
キャレットという言葉は知りませんでした。すみません。
「起動直後に、カーソルがCenterにくるようにできますでしょうか。」
というのは、
「起動直後に、キャレットがRichEdit1のCenterにくるようにできますでしょうか。」
という意味で質問したつもりでいた。
procedure TForm1.FormCreate(Sender: TObject);
begin
RichEdit1.Clear;
RichEdit1.Paragraph.Alignment:=taCenter;
end;
で、思うとおりにできました。
ありがとうございました。
ツイート | ![]() |