初歩的なな事なので恐縮なんですが、updownとmaskeditの組み合わせで希望通りの動作をしてくれません。
どなたかご指導願います。
具体的には、
・updownのassociateプロパティでmaskeditを指定し、
・maskeditのeditamaskプロパティで 000 として3桁数値を許可させます。
この状態で、maskeditには常に3桁の数値を入力させたいのですが、
maskeditに1桁の数値が入っていると、1桁しか許可されず、
同様に2桁のときは2桁、3桁の時は3桁が許可されます。
宜しくお願いします。
TUpDownの中で、
if FAssociate is TCustomEdit then
TCustomEdit(FAssociate).Text := IntToStr(FPosition);
としているのがまずいみたいです。
ここで、TCustomEditクラスのTextプロパティに設定しています。
ところが、TMaskEditは、TCustomMaskEditクラスでTextプロパティをオーバーライドしています。
ここで、動作に差異が生じます。
試しに、
TCustomEdit(MaskEdit1).Text := '1';
と、
TMaskEdit(MaskEdit1).Text := '1';
の動きを比べてみて下さい。
RESありがとうございます。
試しているのはDel6PersonalとBCB6Proです。
後者にはVCLソースがあるみたいですので早速調べました。
comctrls.pasの12000行目あたりですね・・・・
にしのさんの仰るのが高度すぎてわかりません・・
とりあえず、FormActivateイベントに
TCustomEdit(MaskEdit1).Text := '1';
TMaskEdit(MaskEdit1).Text := '1';
の両方を書いて試してはみましたが、その差がわかりません。というかそういう事が言いたい訳ではないんですよね、きっと。
VCLソースを書き換えないとダメ、ということだと、BCB(Pro)は可能でもDel6(Personal)では不可、ということでしょうか??
こちらの環境はDelphi7Proです。
該当箇所は、TCustomUpDownクラスの、SetPositionの実装です。
結論から言うと、作り直した方が早いですね。
ソースが手にはいるなら、それを直してもよいのですが。
1から作り直しならば、Delphi6Personalでも問題ありません。
TCustomEdit(Associate).Textとしているため、MaskedEditのチェックが通らないのが問題です。
私がわかる範囲で努力しますと、
https://www.petitmonte.com/bbs/answers?question_id=1101
にあるようにキー入力制限したeditボックスで代用、という感じです。
桁数制限は手が届きませんが、不都合はないので差し当たりこれでOKです。
ありがとうございました。
あ、でももう少し解決チェックははずしておきます^^;
TUpDownのほうを作り替えてみたのですが、ダメでした。
UDM_SETPOSメッセージなどが、spy++では引っかからず。
ツイート | ![]() |