喫茶XRAYトップページ


[884] TEdit でのFormat表示返信 削除
2006/8/13 (日) 15:09:34 Delphi_new_1
Delphi で TEdit 内に入力して、別の TEdit に計算出力をする
物を作ったのですが、「123,456.78」の様なフォーマット表示を
どうすれば出来るのかが解りません。

よろしければご教授下さい。宜しくお願いいたします。


[885] Re:数値のFormat表示( was TEdit でのFormat表示)返信 削除
2006/8/13 (日) 17:03:18 Mr.XRAY
▼ Delphi_new_1さん
  (他のハンドル名を考えた方がいいでしょう)

喫茶XRAYへようこそ

> 物を作ったのですが、「123,456.78」の様なフォーマット表示を
お使いのDelphiのバージョンは?
Delphi7でしたら、ヘルプで先頭がFormatのものを調べて下さい。
扱うのが実数(浮動小数点)のようですので、FormatFloatですね。
これの[例]をみるといろいろ載っています。

[example]
procedure TForm1.Button1Click(Sender: TObject);
begin
     Edit1.Text:='1234567.80';
     Edit2.Text:=FormatFloat('#,##0.00',StrToFloatDef(Edit1.Text,0))
end;
 
> よろしければご教授下さい。宜しくお願いいたします。
よろしくありません (^_^)

[886] Re2:数値のFormat表示( was TEdit でのFormat表示)返信 削除
2006/8/13 (日) 17:45:00 Delphi_new_1
早速のご指摘、有り難うございます。

> (他のハンドル名を考えた方がいいでしょう)
    ハンドル名を「ますお」に変更します。

> お使いのDelphiのバージョンは?
  BDS2006-Pro のDelphiです。

> FormatFloatですね。
 これで表示はうまく行きました。

 ただ、出来れば、アクセスのプロパティー指定で出来るような
 「センターリング表示」などは無いのでしょうか?
 また、「左寄せ」や「右寄せ」も簡単には出来ないでしょうか?

 文字数を出して、前後のスペースを調整するのでしょうか?

 もう一度「HELP」を見回してみます。


[887] Re3:数値のFormat表示( was TEdit でのFormat表示)返信 削除
2006/8/13 (日) 18:29:42 Mr.XRAY
▼ Delphi_new_1さん

>  ただ、出来れば、アクセスのプロパティー指定で出来るような
>  「センターリング表示」などは無いのでしょうか?
>  また、「左寄せ」や「右寄せ」も簡単には出来ないでしょうか?


簡単かどうかはわかりませんが,コードで行うよりも,コンポーネント
にしてしまった方がいいと思われます.
そのようなコンポは,他の方が作成したものがあります.Delphian World
にもあります.調べてみて下さい.以下は私がある掲示板で示したものです.
これに表示Formatのプロパティを追加すればなお充実しますね.
また,この掲示板にplEditの質問がありますので参考にして下さい.
http://hpcgi2.nifty.com/Mr_XRAY/DelphiBBS/plcyclamen.cgi?tree=r437

{$WARNINGS OFF}
//=============================================================================
//   右寄せ入力専用Editコンポーネント
//
//   右寄せから想像するのは数値専用(?)
//   というわけで数値専用入力とするかの・#95;理型プロパティNumOnlyも用意
//
//   2004.08.23 Ver1.0
//   HGH03072@nifyt.ne.jp
//   http://homepage2.nifty.com/Mr_XRAY/
//=============================================================================
unit plEdit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,IMM;

type
  TplEdit = class(TEdit)
  private
    FAlignment : TAlignment;
    FNumOnly   : Boolean;
    procedure SetAlignment(const Value: TAlignment);
    procedure SetNumOnly(const Value: Boolean);
    procedure WMIMEStartComp(var Message: TMessage); message WM_IME_STARTCOMPOSITION;
  protected
    procedure CreateParams(var params: TCreateParams); override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property Alignment : TAlignment read FAlignment write SetAlignment;
    property NumOnly   : Boolean    read FNumOnly   write SetNumOnly;
  end;

procedure Register;

implementation

uses DebugWndUnit;

const
     //Styleの設定用
     Alignments: array[TAlignment]of Word = (ES_LEFT, ES_RIGHT, ES_CENTER);
     NumOnlies : array[Boolean]of Word = (0,ES_NUMBER);

procedure Register;
begin
  RegisterComponents('plXRAY', [TplEdit]);
end;

{ TplEdit }

//=============================================================================
//  Create処理.初期状態で数値入力専用とする
//=============================================================================
constructor TplEdit.Create(AOwner: TComponent);
begin
     inherited Create(AOwner);
     FNumOnly  :=True;
     FAlignment:=taRightJustify;
end;
//=============================================================================
//  CreateParams処理
//=============================================================================
procedure TplEdit.CreateParams(var params: TCreateParams);
begin
     inherited CreateParams(Params);
     Params.Style:=Params.Style or Alignments[FAlignment] or NumOnlies[FNumonly];
end;
//=============================================================================
//  Alignmentプロパティ設定
//  左,右,中央寄せ入力
//=============================================================================
procedure TplEdit.SetAlignment(const Value: TAlignment);
begin
     if FAlignment<>Value then begin
       FAlignment:=Value;
       //オブジェクト再生成
       RecreateWnd;
     end;
end;
//=============================================================================
//  NumOnlyプロパティ設定
//  Trueなら数値入力専用
//  かな漢字変換もONにならないようにしている
//=============================================================================
procedure TplEdit.SetNumOnly(const Value: Boolean);
begin
     if FNumOnly<>Value then begin
       FNumOnly:=Value;
       //オブジェクト再生成
       RecreateWnd;
     end;
end;
//=============================================================================
//  TControlのprivateメソッド
//  継承関係は以下の通りなので,このコンポ内であれば直接使用可能
//  TplEdit-=>TEdit-->TCustomEdit-->TWinControl-->TControl
//  WM_IME_STARTCOMPOSITIONは,変換文字列が生成される前にアプリケーションに送ら
//  れるメッセージ
//
//  IMEを切換えてテストしようと思ったら,WindowsXPでの方法が中々解らなくてえら
//  い苦労.[コントロールパネル][地域と言語のオプション][言語][詳細]でした.
//  Windows2000ではキーボード(こちらのが変か?)
//=============================================================================
procedure TplEdit.WMIMEStartComp(var Message: TMessage);
var
     H     : HIMC;
     CForm : TCompositionForm;
     P     : TPoint;
begin
     H:=ImmGetContext(Handle);
     GetCaretPos(P);

     with CForm do begin
       dwStyle := CFS_POINT;
       ptCurrentPos:= P;
     end;
     ImmSetCompositionWindow(parent.Handle,Addr(CForm));
     ImmReleaseContext(Handle,H);
end;

end.

[888] Re4:数値のFormat表示( was TEdit でのFormat表示)返信 削除
2006/8/13 (日) 18:57:26 ますお
早速のご教授、有り難うございます。

貴重なプログラム、これを参考に自分専用のコンポーネントを
考えてみます。

今、HELPを見ていたら、「Tmemo」と「TRichEdit」には
プロパティーの指定で「左寄/中央/右寄」が出来ることが
解りました。
実際に出来ましたので、全ての「TEdit」を「Tmemo」に変えようと
思います。(一行で10文字ほどしか使わないのですが・・・)

自分専用のコンポーネント、「、」カンマや「小数点以下の桁数」
などをプロパティーで出来るような物を作ってみます。


[889] Re5:数値のFormat表示( was TEdit でのFormat表示)返信 削除
2006/8/13 (日) 19:27:36 Mr.XRAY
▼ ますおさん
> 今、HELPを見ていたら、「Tmemo」と「TRichEdit」には
> プロパティーの指定で「左寄/中央/右寄」が出来ることが
> 解りました。


TEditのかわりにTMemoを使うことはよくやります.拙作の日付入力コンポも
そうです.
TCustomEditで複数行をサポートしたのがTMemo
で,1行だけのがTEditですから,いい選択だと思います.

専用コンポにするのは,使いかって(いちいちTMemoの設定を変更しなくてよい)
ですね.ただし,一度プロパティを設定してしまえば,コピーして利用できます.


[890] Re6:数値のFormat表示( was TEdit でのFormat表示)返信 削除
2006/8/13 (日) 19:43:47 ますお

> 一度プロパティを設定してしまえば,コピーして利用できます.

うっかりしてました、一つ設定した物をコピーすれば楽ですね、
何十個も設定するのが一つで済みますね。

アドバイス有り難うございました。


INCM/CMT
Cyclamen v3.82