예, 나쁜 기본 구현이 아니다 :
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;
는 전체 키 보드의 상태를 읽어 방지하기 위해, 당신은 데이비드 헤퍼 넌 무엇을 제안했다 수행 할 수 있습니다 : 당신이 할 수있는 일
은 Ctrl 키를 누르거나하지 않은 경우 확인입니다
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;
이 VCL 또는 FMX입니까? –
OnChange가 실행되면 왜 중요합니까? 아마도 더 우아한 해결책이 있을까요? –
@J ... - 아마도,하지만 실제로 변경 사항이 없을 때 OnChange가 트리거한다는 사실은 흥미 롭습니다 :) 이유 : OnChange에서도 Edit 상자에 사용자가 입력 한 파일에 고유 ID를 만들고 지정합니다 . 이벤트가 두 번 이상 트리거되면 둘 이상의 ID가 생성되며이를 원하지 않습니다. 하지만 당신이 말했듯이, 그 성가신 OnChange를 돌아 다니기 위해 디자인을 변경할 수 있습니다. – Ampere