Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Не появляется выпадающий список TComboBox


Автор: TechnoMag 12.12.2010, 01:53
В ячейку StringGrid добавляется ComboBox. Но при клике на ComboBox, не виден выпадающий список. Вернее, он  отображается шириной в 2 пиксела. Добавленные элементы в списке ComboBox есть. Между ними можно переключаться (выбирать) при помощи клавиш вверх-вниз. Delphi 7.

Код

TMBList = class(TStringGrid)
  private
     FParams: TParamsCollection;
     procedure AddItem(...);
  protected
    procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState:TGridDrawState);override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property Params: TParamsCollection read FParams write SetParams;
  end;


constructor TMBList.Create(AOwner: TComponent);
var
  i:integer;
begin
  inherited Create(AOwner);
  FParams := TParamsCollection.Create(Self);
    RowCount:=3;
    FixedCols:=1;
    FixedRows:=0;
    ColCount:=3;
    Options:=[goHorzLine, goFixedHorzLine, goFixedVertLine,
        goVertLine, goEditing];
    ColWidths[0]:=18;
    ColWidths[1]:=100;
    ColWidths[2]:=100;
    for i:=0 to RowCount-1 do
      RowHeights[i]:=18;
end;


procedure TMBList.AddItem(....);
begin
  if (TypeOfControl=tcIndex) then
  begin
    FParams.Items[FParams.Count-1].FComboBox:=TComboBox.Create(self);
    //FParams.Items[FParams.Count-1].FComboBox.Caption:='';
    FParams.Items[FParams.Count-1].FComboBox.Parent:=self;
    FParams.Items[FParams.Count-1].FComboBox.Visible:=False;
    //FParams.Items[FParams.Count-1].FComboBox.SetSubComponent(true);
    FParams.Items[FParams.Count-1].FComboBox.Style:=csDropDownList;
    //FParams.Items[FParams.Count-1].FComboBox.Tag:=3001; // генерировать тэги для контрола
    FParams.Items[FParams.Count-1].FComboBox.Items.Add('Item1');
    FParams.Items[FParams.Count-1].FComboBox.Items.Add('Item2');
    FParams.Items[FParams.Count-1].FComboBox.ItemIndex:=0;
  end;
end;

procedure TMBList.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
begin
   if FParams.Items[arow].FComboBox<>nil then
   begin
    FParams.Items[arow].FComboBox.BoundsRect:=ARect;
    FParams.Items[arow].FComboBox.Visible:=true;
   end;
  end;
end;

Автор: БелАмор 12.12.2010, 02:46
Псмотрите, возможно что-то заинтересует:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=60379

Автор: TechnoMag 12.12.2010, 05:06
Код

      procedure TMBList.AddItem(....);
      begin
          FParams.Items[FParams.Count-1].FComboBox:=TComboBox.Create(self);
          //FParams.Items[FParams.Count-1].FComboBox.Caption:='';
          FParams.Items[FParams.Count-1].FComboBox.Parent:=self.parent;
      ...
      end;
       
      procedure TMBList.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
      var
       r: Trect;
      begin
         if FParams.Items[arow].FComboBox<>nil then
         begin
         r:=ARect; //self.CellRect(cell_x,arow);
          r.Left:=r.left+self.left+2;
          r.right:=r.right+self.left+2;
          r.top:=r.top+self.top+2;
          r.bottom:=r.bottom+self.top+2;
          FParams.Items[arow].FComboBox.BoundsRect:=r;
          FParams.Items[arow].FComboBox.Visible:=true;
       
         end;
        end;
      end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)