분명히 버그이지만, 왜 그런 일이 발생했는지 추적 할 수는 없습니다. 다음은 재현 할 최소한의 코드입니다. 그냥 폼에 콤보 상자와 버튼을 삭제하고 다음 이벤트 핸들러 작성 : 처음 버튼을 클릭하면왜 글꼴 변경시 콤보 상자의 텍스트가 항목 텍스트로 변경됩니까?
procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Items.Add('A Item');
ComboBox1.Items.Add('B Item');
ComboBox1.Items.Add('C Item');
ComboBox1.Style := csDropDown;
ComboBox1.AutoComplete := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1.Text := 'B';
ComboBox1.Font.Color := clRed;
ShowMessage(IntToStr(ComboBox1.ItemIndex));
end;
, 당신은 완전히 두 번째 항목의 텍스트를 선택 콤보 편집에 볼을하지만, 메시지 상자에 항목 색인이 -1로 표시됩니다. 드롭 다운하면 두 번째 항목이 선택됩니다. 두 번째 클릭은 적절한 텍스트를 설정하지만 나머지는 첫 번째 클릭과 동일합니다. 따라서이 경우 콤보 상자는 이상한 자동 완성 기능이 활성화 된 것처럼 동작합니다.
글꼴 변경 후 WM_SETTEXT
메시지의 두 번째 항목이 포함 된 메시지가 수신되었지만 두 번째 항목의 텍스트가있는 이유와 그 이유가 무엇인지 알 수없는 EditWndProc
까지 추적했습니다.
제 질문은 매우 구체적입니다. 어떤 방법 (어떤 방법)이 글꼴 변경시 WM_SETTEXT
을 전송하고 자동 완성이 비활성화 된 경우 두 번째 항목 텍스트가 일치하는지 어떻게 알 수 있습니까?
지금까지 Delphi 2009와 Delphi XE3에서 Windows 7 Home Premium 64-bit의 최신 업데이트를 설치하여 이것을 재현 할 수있었습니다.
델파이 2007에서 확인 된 것과 동일한 동작으로 인해 Windows API 버전이 문제가 될 수 있다고 생각합니까? – MikeT
질문에 Windows 7에 포함시킬 것입니다. – TLama
에 이미 태그가 추가되었습니다. – whosrdaddy