はい、それは悪いベースの実装ではありません。
procedure TCustomEdit.CNCommand(var Message: TWMCommand);
begin
if (Message.NotifyCode = EN_CHANGE) and not FCreating then Change;
end;
このメッセージはEN_CHANGEを発射されるボタンである「A」は、現在、CTRLの状態と一緒に来ることを考慮して服用していないています押された
procedure TForm44.edt1Change(Sender: TObject);
function IsCtrlPressed: Boolean;
var
State: TKeyboardState;
begin
GetKeyboardState(State);
Result := ((State[VK_CONTROL] and 128) <> 0);
end;
begin
if IsCtrlPresed then
Exit;
Caption := 'Ctrl is not pressed';
end;
全体のキーボードの状態を読んで回避するには、デビッド・Heffernanのによって提案されたものを行うことができます:
procedure TForm44.edt1Change(Sender: TObject);
function IsCtrlPresed: Boolean;
begin
Result := GetKeyState(VK_CONTROL) < 0;
end;
begin
if IsCtrlPresed then
Exit;
Caption := 'Ctrl is not pressed';
end;
あなたは何ができるか
は、Ctrlキーを押しされているかどうか確認しています
これはVCLまたはFMXですか? –
OnChangeが起動するとどうして問題になるのですか?おそらくより洗練されたソリューションがありますか? –
@ J ... - おそらく、実際の変更がないときにOnChangeがトリガーするという事実は十分興味深いです:)理由:OnChangeでも、編集ボックスにユーザーが入力したファイルに一意のIDを作成して割り当てます。イベントが複数回トリガされた場合、複数のIDが生成され、そのIDは必要ありません。しかし、あなたが言ったように、私はその厄介なOnChangeを回るようにデザインを変更することができます。 OnChangeを使用して@NAZCAの – Ampere