Здравствуйте, Rewer8!
Нам ведь передаётся Sender!
Его и используем, записывая в Tag ComboBox‘a.
Ниже исходничек. Думаю, Вы без труда подкоректируете под свою задачу. Кстати, обработчик события onClick для Ваших StringGrid‘oв - общий StringGrid1Click.
P. S. При написании примера столкнулся с проблемкой, что если на форму сначала положить ComboBox1, а потом StringGrid‘ы, то ComboBox1 не виден на них. Так что ComboBox нужно ложить на форму послк StringGrid‘oв
Кстати, зачем Вам выделять ячейку StringGrida, если всёравно поверх них находится ComboBox?
Приложение:
//---------------------------------------------------------------------------#include <vcl.h>#pragma hdrstop#include "Unit1.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1; int ecol, erow;//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}//---------------------------------------------------------------------------void __fastcall TForm1::StringGrid1Click(TObject *Sender){ TRect rect; TPoint pf; pf = ((TStringGrid*)Sender)->ScreenToClient(Mouse->CursorPos); ((TStringGrid*)Sender)->MouseToCell(pf.x, pf.y, ecol, erow); rect = ((TStringGrid*)Sender)->CellRect(ecol, erow); ComboBox1->Left = ((TStringGrid*)Sender)->Left + rect.Left; ComboBox1->Top = ((TStringGrid*)Sender)->Top + rect.Top; ComboBox1->Width = rect.Right - rect.Left + 1; ComboBox1->Height = rect.Bottom - rect.Top + 1; ComboBox1->Text = ((TStringGrid*)Sender)->Cells[ecol][erow]; ComboBox1->Visible = true; ComboBox1->Tag = (int)Sender; ComboBox1->SetFocus();}//---------------------------------------------------------------------------void __fastcall TForm1::ComboBox1Exit(TObject *Sender){ ((TStringGrid*)(ComboBox1->Tag))->Cells[ecol][erow] = ComboBox1->Text; ComboBox1->Visible = false;}//---------------------------------------------------------------------------