Давно интересно было, как узнать положение курсора в поле ввода? Как им управлять?
Аналогично про полосы прокрутки у списков.
SendMessage({компонент}.Handle, WM_{...}SCROLL, MAKEWPARAM(SB_THUMBPOSITION, NewPos), 0);компоненту, чтобы он тоже об этом узнал...
SendMessage(StringGrid1.Handle, WM_SETREDRAW, 0, 0);должно ускорить работу с Гридом... В частности, Грид не будет обновляться после заполнения каждой ячейки, а будет обновлен только после заполнения ВСЕХ ячеек. Или ты о медленной прокрутке?
// Здесь собственно обновление содержимого Грида, или его заполнение
SendMessage(StringGrid1.Handle, WM_SETREDRAW, 1, 0);
void __fastcall TCalc::FormResize(TObject *Sender)
{
SendMessage(sgTable->Handle, WM_SETREDRAW, 0, 0);
int CH = ClientHeight;
int CW = ClientWidth;
btAddUnder->Top = CH - 40;
btDelete->Top = CH - 40;
btDelete->Left = (CW >> 1) - 60;
btShow->Top = CH - 40;
btShow->Left = CW - 120;
btAddOver->Top = CH - 20;
btClear->Top = CH - 20;
btClear->Left = (CW >> 1) - 60;
btRun->Top = CH - 20;
btRun->Left = CW - 120;
int OW = sgTable->Width;
sgTable->Width = CW;
sgTable->Height = CH - 40;
sgTable->ColWidths[0] = sgTable->ColWidths[0] * CW / OW;
sgTable->ColWidths[1] = sgTable->ColWidths[1] * CW / OW;
sgTable->ColWidths[2] = sgTable->ColWidths[2] * CW / OW;
SendMessage(sgTable->Handle, WM_SETREDRAW, 1, 0);
}