Как узнать размеры TComboBox с показанным выпадающим списком до показа списка?

Вопрос:
Как узнать размеры TComboBox с показанным выпадающим списком до показа списка?

Ответ:

На событии FormShow пошлите
сообщение CB_SHOWDROPDOWN в ComboBox дважды – один раз чтобы заставить список
выпасть, второй – чтобы убрать его. Затем пошлите сообщение CB_GETDROPPEDCONTROLRECT,
передав в качестве параметра адрес TRect. TRect будет содержать экранные кординаты
прямоугольника описывающего ComboBox вместе с выпавшим списком. Затем Вы можете
вызвать ScreenToClient чтобы преобразовать экранные кординаты в координаты клиентской
области окна.

Пример:
var
	R : TRect;
procedure TForm1.FormShow(Sender: TObject);
var
	T : TPoint;
begin
	SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, 1, 0);
	SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, 0, 0);
	SendMessage(ComboBox1.Handle, CB_GETDROPPEDCONTROLRECT, 0, LongInt(@r));
	t := ScreenToClient(Point(r.Left, r.Top));
	r.Left := t.x;
	r.Top := t.y;
	t := ScreenToClient(Point(r.Right, r.Bottom));
	r.Right := t.x;
	r.Bottom := t.y;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
	Form1.Canvas.Rectangle(r.Left, r.Top, r.Right, r.Bottom );
end;

Комментариев Нет.

Написать Ответ

Вы должны войти чтобы оставить комментарий.