немного поэксперементировал:
| Код | procedure TMainFRM.StringGrid3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var glc,i:integer; begin StringGrid3.Cursor:=crDefault; Panel2.Caption:=IntToStr(X)+','+inttostr(Y);
//надо менять курсор на разделительных линиях в гриде if StringGrid3.GridLineWidth>0 then begin glc:=0; //координата gridline; for i:=0 to StringGrid3.ColCount-2 do begin glc:=glc+StringGrid3.ColWidths[i]+StringGrid3.GridLineWidth; if (X>glc-1) and (X<glc+1) then begin StringGrid3.Cursor:=crHSplit;
//коррекция по 0 в минус и в плюс GridCorr:=X;
//зафиксить тек ширину столбца его номер (глобальные перем) GridColW1:=StringGrid3.ColWidths[i]; GridColW2:=StringGrid3.ColWidths[i+1]; GridCol1:=i; GridCol2:=i+1;
end; end;
{на будущее для строк glc:=0; //координата gridline; for i:=0 to StringGrid3.RowCount-2 do begin glc:=glc+StringGrid3.RowHeights[i]+StringGrid3.GridLineWidth; if (Y>glc-1) and (Y<glc+1) then StringGrid3.Cursor:=crVSplit; end; } end;
//пытаемся отобразить смещение от 0 //сделать проверку на заползание в другие ячейки {!} //Panel5.Caption:=IntToStr(X-GridCorr); //Panel6.Caption:=IntToStr(GridColW1)+','+IntToStr(GridColW2)+','+IntToStr(GridCol1)+','+IntToStr(GridCol2)+'|'+Panel5.Caption;
if Panel2.Color=clBlue then begin StringGrid3.ColWidths[GridCol1]:=GridColW1+(X-GridCorr); StringGrid3.ColWidths[GridCol2]:=GridColW2-(X-GridCorr); end;
if Panel2.Color=clRed then Panel2.Color:=clBlue; end;
|
вроде работает . .. plz, поправьте если где перезаморочено? |