Delphi - база знаний

       

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


Как получить размер развёрнутого 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.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;

Взято с Исходников.ru



Содержание раздела