Delphi Tips 
-----------------------------

0204  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/08/16 osamu rev 1.4
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2004/03/04 osamu 編集
エディットコントロールで右寄せ表示

>TEditで表示したい内容が数字なため右寄せにしたいと
>思っています。しかし、調べた限りでは右に寄ってく
>れません。

Delphian World などで既存のコンポーネントを入手するのが一番楽チンですね。( http://www.delphianworld.com/ )

自分で作る場合:
Win98とそれ以前のWinとでは作り方が異なります。
これはWindows98が右寄せEditをサポートしたからです。
『Win98で右寄せ・数値入力可能なEditコンポーネントを作る』
というTipsを参照ください。
こちらでは簡単に完璧に右寄せEditが作れませす。

Win98以前のWinでは
Editの代わりにTMemoを使い、1LineのTMemoをEditに見せかけます。

TMemoを配置して
1、Alignment Property を taRightJustify にする。
2、WordWrap Property を False にする。

WantReturns Property を False にして改行を入力させないようにしても
Ctrl+JやCtrl+Returnを押すと改行コードが入力されてしまいます。
そこで改行された時に改行を解除する動作をコーディングします。
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  SelStartBuf: Integer;
  S: string;
begin
  if Memo1.SelLength>0 then exit;

  SelStartBuf := Memo1.SelStart;
  S := Memo1.Text;

  if pos(#13,S)<>0 then//改行コードのCRを削除
  begin
      Delete(S,pos(#13,S),1);
      Dec( SelStartBuf );
  end;
  if pos(#10,S)<>0 then
  begin
      Delete(S,pos(#10,S),1);//改行コードLFを削除
      Dec( SelStartBuf );
  end;

  Memo1.Text := S;
  Memo1.SelStart :=  SelStartBuf;
(*
また、TMemoを右寄せにしているとWordWrap:=falseが効果ありません。
文字が増えるとどうしても改行されてしまいます。
それに対応して改行されたらその時の文字数を保持して左寄せに変えます。
LengthShowはFormのメンバーとして変数宣言してください。
*)
  if Memo1.Lines[1]<>'' then//改行されたなら
  begin
    SelStartBuf := Memo1.SelStart ;
    Memo1.Alignment := taLeftJustify;
    Memo1.SelStart := SelStartBuf;
    LengthShow := Length(Memo1.Lines[0]);//LengthShow変数に
  end;//表示可能文字数を保持
(*
文字数が減ったら元に戻さなければいけません。
*)
  if LengthShow<>0 then//LengthShowに保持数があるなら
    if Length(Memo1.Lines[0])<LengthShow then//文字が減ったら
    begin
      SelStartBuf := Memo1.SelStart;
      Memo1.Alignment := taRightJustify;
      Memo1.SelStart := SelStartBuf;
    end;
end;//KeyUpイベント終わり

単純に、改行された時の文字数=表示の限界、とみなして
その文字数以下になれば右寄せに変えるという動作ですので
プロポーショナルフォントの場合では文字幅が異なりますのでちょっと変な動作になりそう。
また、左寄せの状況で文字を削除していくと左寄せという事がばれる動作をします。
更に、キー入力以外でテキストを代入するような動作は考慮していません。

その辺は、自分で作ってね。出来たら、このTipsを更新してくだされ。
参照: [Delphi-ML:9195] [Delphi-ML:41622] <コンポーネント > <Standard>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp