Внешний вид сайта:

Получение фактического размера TComboBox

Как можно узнать фактический размер TComboBox в раскрытом состоянии перед тем, как он откроется? Во время события FormShow пошлите полю со списком сообщение CB_SHOWDROPDOWN дважды: чтобы открыть его и закрыть. Затем пошлите сообщение CB_GETDROPPEDCONTROLRECT, передавая адрес TRect.

После выполнения SendMessage, TRect будет содержать прямоугольник, который соответствует реальному размеру TComboBox относительно экрана в раскрытом состоянии. Затем Вы можете вызвать ScreenToClient, чтобы преобразовать координаты TRect относительно формы.

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;

Комментарии

Нет комментариев. Ваш будет первым!