Как да поставите 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);