Как получить размер развёрнутого TComboBox?

В течение события FormShow, выпадающему списке дважды посылается сообщение CB_SHOWDROPDOWN , один раз, чтобы он открылся, а второй - чтобы свернулся. Затем посылается сообщение CB_GETDROPPEDCONTROLRECT, передающее адрес TRect.
Когда вызов SendMessage возвращается, то TRect будет содержать прямоугольник, который соответствует раскрытому ComboBox-у относительно окна. Затем можно вызвать 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.));

 r.Left := t.x;

 r. := 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.,

  r.Right,

  r.Bottom );

end;

Взято из http://forum.sources.ru

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...