これは明らかにバグですが、なぜ起こるのかを突き止めることはできません。再現する最小限のコードを次に示します。コンボ ボックスとボタンをフォームにドロップし、次のイベント ハンドラーを記述します。
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;
ボタンを初めてクリックすると、コンボ編集で 2 番目のアイテムの完全に選択されたテキストが表示されますが、メッセージ ボックスにはアイテム インデックスが -1 と表示されます。ドロップダウンすると、2番目の項目が選択されているようです。2 回目のクリックで適切なテキストが設定されますが、残りは最初のクリックと同じになります。したがって、この場合のコンボ ボックスは、変なオートコンプリートが有効になっているかのように動作します。
EditWndProc
これを、2 番目の項目のテキストでフォントの変更が受信されたメッセージの場所まで追跡しましたWM_SETTEXT
が、2 番目の項目のテキストがどこから来て、その理由がわかりません。
だから、私の質問は非常に具体的です - 何 (どのメソッド) がWM_SETTEXT
at font change を送信し、オートコンプリートが無効になっているときに 2 番目の項目テキストの一致をどのように知るのですか?
これまでのところ、最新の更新プログラムがインストールされた Windows 7 Home Premium 64 ビット上の Delphi 2009 および Delphi XE3 でこれを再現できました。