ComboBox без рамки
От: Kikon  
Дата: 18.04.06 17:31
Оценка:
Подскажите, как убрать рамку у комбобокса.
Re: ComboBox без рамки
От: Danchik Украина  
Дата: 19.04.06 10:06
Оценка: 2 (1)
Здравствуйте, Kikon, Вы писали:

K>Подскажите, как убрать рамку у комбобокса.


Просто установкой свойств ничего не получится. Придется рисовать самому или взять компоненту от других производителей.
Привожу пример сабкласинда комбобокса, который забирает рамку:

type
  TMyComboBox = class (TComboBox)
  private
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  protected
  end;

implementation

procedure TMyComboBox.WMPaint(var Message: TWMPaint);
var
  hDcCombo : HDC;
  aClientRect : TRect;
  aFlat : Boolean;
begin
  { do not allow draw default border }
  aClientRect := ClientRect;
  ValidateRect (Handle, @aClientRect);
  InflateRect (aClientRect, -2, -2);
  InvalidateRect (Handle, @aClientRect, False);

  inherited; { call default painter }

  aFlat := False; {True for flat combo }

  { draw border }
  hDcCombo := GetWindowDC(Handle);
  try
    aClientRect := ClientRect;
    if aFlat Then
    begin
      DrawEdge(hDcCombo, aClientRect,
                BDR_RAISEDINNER,
                BF_RECT or
                BF_FLAT or
                BF_ADJUST);

      InflateRect(aClientRect, -1, -1);

      DrawEdge(hDcCombo, aClientRect,
                    BDR_RAISEDINNER,
                    BF_RECT or
                    BF_FLAT or
                    BF_ADJUST);
    end else begin

      DrawEdge(hDcCombo, aClientRect,
                    BDR_RAISEDINNER,
                    BF_RECT or BF_FLAT);

      InflateRect(aClientRect, -1, -1);

      DrawEdge(hDcCombo, aClientRect,
                    BDR_RAISEDINNER,
                    BF_RECT or BF_FLAT);

    end;
  finally
    ReleaseDC(Handle, hDcCombo);
  end;
end;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.