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.
|
|