- - * - WhiteUnicorn - * - -




* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >


Frequently Asked Questions

Getting the actual size of a TComboBox

Question:

How can I tell the actual size of a TComboBox in it's dropped down state before it drops down?

Answer:

During the FormShow event, send the combo box a CB_SHOWDROPDOWN
message twice, once to drop it down, and once to retract it. Then send
a CB_GETDROPPEDCONTROLRECT message, passing the address of a TRect.
When the SendMessage call returns, the TRect will contain the
rectangle that would enclose the ComboBox in it's dropped down state,
relative to the screen. You can then call ScreenToClient to convert
the TRect's coordinates to be relative to the client area of the form.

Example:

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;



* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >



- - * - Anastasija aka WhiteUnicorn - * - - LJLiveJournal
PFPhotoFile