Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в ячейку StringGrid'а вставить ComboBox?


IceBeerg ©   (2005-08-11 18:24:00) 

1ый вопрос собственно сабж.
2ой вопрос как изменить шрифт отделной строки StringGrid'а, например сделать текст жирным?


begin...end   (2005-08-12 09:59:00) [1]

> han_malign ©   (12.08.05 09:55) [3]

> в TStringGrid - тоже пройдет

Дык... я и не опровергал это. Просто событие ввели в TCustomDrawGrid, поэтому я и написал так. Поскольку TStringGrid является потомком TCustomDrawGrid, в нём это событие, конечно, тоже есть.


han_malign   (2005-08-12 09:55:00) [2]

> begin...end ©   (12.08.05 07:52) [2]
- в TStringGrid - тоже пройдет, при этом не придется самому контейнер делать под ячейки...

> IceBeerg ©   (11.08.05 18:24)
> 2ой вопрос как изменить шрифт отделной строки StringGrid'а, например сделать текст жирным?
- примерно так:
procedure TParamsForm.sgParamsDrawCell(Sender: TObject; ACol,
 ARow: Integer; Rect: TRect; State: TGridDrawState);
var _color: TColor;
   _fs: TFontStyles;
begin
 with sgParams do begin
   _color:=Canvas.Brush.Color;
   _fs:=Canvas.Font.Style;
   if((aRow>0)and(State<>[gdSelected]))then begin
     if(not CanEditCell(ACol,ARow))
     then Canvas.Brush.Color:=$F0F0F0;
     if((ACol<4)and(Objects[0,aRow]<>nil))then begin
Canvas.Font.Style:=TParam(Objects[0,aRow]).FontStyle(_fs,aCol>2);
Canvas.Brush.Color:=TParam(Objects[0,aRow]).Color(Canvas.Brush.Color,aCol>2);
     end;
   end;
   Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
   Canvas.Brush.Color:=_color;
   Canvas.Font.Style:=_fs;
 end;
end;
</cide>


begin...end   (2005-08-12 07:52:00) [3]

> IceBeerg ©   (11.08.05 18:24)

> как изменить шрифт отделной строки StringGrid'а, например сделать текст жирным?

TCustomDrawGrid.OnDrawCell.


Kazakh   (2005-08-12 07:30:00) [4]

procedure TForm1.FormCreate(Sender: TObject);
begin
 {Высоту combobox'а не изменишь, так что вместо combobox'а
 будем изменять высоту строки grid'а !}
 StringGrid1.DefaultRowHeight := ComboBox1.Height; {Спрятать combobox}
 ComboBox1.Visible := False; ComboBox1.Items.Add('Delphi Kingdom');
 ComboBox1.Items.Add('Королевство Дельфи');
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 {Перебросим выбранное в значение из ComboBox в grid}
 StringGrid1.Cells[StringGrid1.Col,
 StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex];
 ComboBox1.Visible := False; StringGrid1.SetFocus;
end;

procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
 {Перебросим выбранное в значение из ComboBox в grid}
 StringGrid1.Cells[StringGrid1.Col,
 StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex];
 ComboBox1.Visible := False; StringGrid1.SetFocus;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var
 R: TRect;
begin
 if ((ACol = 3) and (ARow <> 0)) then
 begin
   {Ширина и положение ComboBox должно соответствовать ячейке StringGrid}
   R := StringGrid1.CellRect(ACol, ARow); R.Left := R.Left + StringGrid1.Left;
   R.Right := R.Right + StringGrid1.Left; R.Top := R.Top + StringGrid1.Top;
   R.Bottom := R.Bottom + StringGrid1.Top; ComboBox1.Left := R.Left + 1;
   ComboBox1.Top := R.Top + 1; ComboBox1.Width := (R.Right + 1) - R.Left;
   ComboBox1.Height := (R.Bottom + 1) - R.Top; {Покажем combobox}
   ComboBox1.Visible := True; ComboBox1.SetFocus;
 end;
 CanSelect := True;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо