updownボタンとmaskedit


ウォレス  2005-06-07 01:04:16  No: 15404

初歩的なな事なので恐縮なんですが、updownとmaskeditの組み合わせで希望通りの動作をしてくれません。
どなたかご指導願います。

具体的には、
・updownのassociateプロパティでmaskeditを指定し、
・maskeditのeditamaskプロパティで 000 として3桁数値を許可させます。

この状態で、maskeditには常に3桁の数値を入力させたいのですが、
maskeditに1桁の数値が入っていると、1桁しか許可されず、
同様に2桁のときは2桁、3桁の時は3桁が許可されます。

宜しくお願いします。


にしの  2005-06-07 01:27:50  No: 15405

TUpDownの中で、
if FAssociate is TCustomEdit then
  TCustomEdit(FAssociate).Text := IntToStr(FPosition);
としているのがまずいみたいです。
ここで、TCustomEditクラスのTextプロパティに設定しています。
ところが、TMaskEditは、TCustomMaskEditクラスでTextプロパティをオーバーライドしています。
ここで、動作に差異が生じます。
試しに、

TCustomEdit(MaskEdit1).Text := '1';

と、

TMaskEdit(MaskEdit1).Text := '1';

の動きを比べてみて下さい。


ウォレス  2005-06-07 02:16:55  No: 15406

RESありがとうございます。
試しているのはDel6PersonalとBCB6Proです。
後者にはVCLソースがあるみたいですので早速調べました。
comctrls.pasの12000行目あたりですね・・・・

にしのさんの仰るのが高度すぎてわかりません・・

とりあえず、FormActivateイベントに
  TCustomEdit(MaskEdit1).Text := '1';
  TMaskEdit(MaskEdit1).Text := '1';
の両方を書いて試してはみましたが、その差がわかりません。というかそういう事が言いたい訳ではないんですよね、きっと。

VCLソースを書き換えないとダメ、ということだと、BCB(Pro)は可能でもDel6(Personal)では不可、ということでしょうか??


にしの  2005-06-07 02:31:43  No: 15407

こちらの環境はDelphi7Proです。
該当箇所は、TCustomUpDownクラスの、SetPositionの実装です。

結論から言うと、作り直した方が早いですね。
ソースが手にはいるなら、それを直してもよいのですが。
1から作り直しならば、Delphi6Personalでも問題ありません。

TCustomEdit(Associate).Textとしているため、MaskedEditのチェックが通らないのが問題です。


ウォレス  2005-06-07 04:59:48  No: 15408

私がわかる範囲で努力しますと、
https://www.petitmonte.com/bbs/answers?question_id=1101
にあるようにキー入力制限したeditボックスで代用、という感じです。

桁数制限は手が届きませんが、不都合はないので差し当たりこれでOKです。
ありがとうございました。

あ、でももう少し解決チェックははずしておきます^^;


にしの  2005-06-07 05:37:27  No: 15409

TUpDownのほうを作り替えてみたのですが、ダメでした。
UDM_SETPOSメッセージなどが、spy++では引っかからず。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加