Как да поставите ComboBox в StringGrid клетка

Как да поставите ComboBox в StringGrid клетка?

процедура TForm1.FormCreate(Подател: TObject);

процедура TForm1.ComboBox1Change(Подател: TObject);

процедура TForm1.ComboBox1Exit(Подател: TObject);

процедура TForm1.StringGrid1SelectCell(Подател: TObject; Col,

Ред: Цяло число; var CanSelect: Boolean);

(Ред <> 0 )) след това започнете

R := StringGrid1.CellRect(Col, Row);

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;

Добавка от Google

1. Факт е, че в оригиналната статия, когато клетка е избрана в StringGrid, нищо не се прехвърля в ComboBox. Това е малко грешен начин. Да се ​​. Самото ComboBox не отива до позицията (ItemIndex) на текста, който е в StgingGrid, а се издига до позиция нула и ако нищо не се промени в ComboBox, а просто излезете от клетката, тогава стойността в StringGrid ще се промени на стойността на текста, присвоен на нулевата позиция (ItemIndex) на ComboBox. Много хора вероятно са се сблъсквали с това и поправянето му е доста лесно. Затова предлагам просто да добавите още една функция към статията, която не само прехвърля стойността от StringGrid към ComboBox, но поставя ComboBox в желаната позиция.

2. След като работих с такива вмъквания, стигнах до извода, че "поставяне на избрания елемент от ComboBox в Grid" не е в събитието ComboBox1Change, а в събитието ComboBox1CloseUp. Това е по-вярно, Да се ​​. Windows няма да объркакъде е превъртането и къде е фокусът сега!

процедура TForm1.FormCreate(Подател: TObject);