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


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

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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;

Автор: TechnoMag 11.12.10, 23:48
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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 (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)