Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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; |