エディットコントロールで右寄せ表示
|
>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を更新してくだされ。 |
|