Cześć, chcę pod pewnym warunkiem zabronić wybieranie komórek w gridzie. Tzn. jeśli przesuwam myszką po gridzie z wciśniętym klawiszem - nie chcę, żeby komórki były zaznaczane. Jak to zrobić?
Witam!
Właściwością odpowiedzialną za zaznaczanie komórek przy wciśniętym klawiszu myszy na StringGridzie jest "goRangeSelect" znajdująca się w drzewie "Options" Properties StringGrida.
Aby ją zmienić tak jak pytasz wystarczy użyć kodu (to podstawienie pozostawia wszystkie pozostałe parametry domyślnie - tak jak jest po położeniu StringGrida na formatkę):
StringGrid1.Options:=([goFixedVertLine]+[goFixedHorzLine]+[goVertLine]+[goHorzLine]);
Wpisane parametry ustawiane są na "True" pozostałe zostają na "False". Domyślnie goRangeSelect jest na "True". Oczywiście musisz umieścić ten kod w odpowiedniej procedurze, odpowiadającej zdarzeniu, które ma blokować zaznaczanie (lub ewentualnie w jakimś warunku ;) )
EDIT: A jeżeli źle zrozumiałem i chodzi Ci o to żeby w ogóle nie można było kliknąć na StringGrida to zostaje Ci chyba ustawić StringGrid.Enabled na False. Tylko wtedy też nie przewiniesz zawartości wbudowanym ScrollBarem (musiałbyś oprogramować własny i wtedy będzie działać na 100%).
Mam nadzieje że o to chodziło?
Pozdrawiam!
możesz odpowiednio obsługiwać rysowanie StringGrida za pomocą OnDrawCell
spróbuj oprogramować zdarzenie StringGrid - OnSelectCell ;)
madmike napisał(a)
spróbuj oprogramować zdarzenie StringGrid - OnSelectCell ;)
Nie chcę ingerować w OnDrawCell, bo generalnie z tego, co patrzyłem musiałbym ustawić DefaultDrawing na false i rysować wszystko sam. A ja robię komponent, który już dość sporo robi w tym zdarzeniu ;)
Na OnSelectCell też patrzyłem. Dawałem false zawsze, ale wtedy wychodziły jakieś głupoty.
Spróbuję z tymi opcjami i zobaczę, czy to będzie to, o co mi chodzi.
No niestety, nie działa to.
Zrobiłem coś takiego(w OnMouseMove), wiem, że to jest zły kod i nie powinienem tak robić, ale nic innego mi do głowy nie przyszło:
var
ACol, ARow: integer;
begin
if (FAllowClickDraw) and (ssLeft in Shift) then //jeśli właściwość na true i lewy klawisz myszy
begin
if not (csDesigning in ComponentState) then
begin
Self.MouseToCell(X, Y, ACol, ARow);
if (ACol <> FCol) or (ARow <> FRow) then
begin
if (ACol>=0) and (ARow>=0) then
begin
if not isFixedCell(ACol, ARow) then
begin
canvas.Brush.Color:=FClickDrawColor;
Canvas.FillRect(self.CellRect(ACol, ARow));
end;
end;
FCol:=ACol; FRow:=ARow;
CellClickDraw(ACol, ARow);
end;
end;
end;
//i to jest ten zły kod
if FAllowClickDraw then
begin
if Assigned(OnMouseMove) then OnMouseMove(Self, Shift, X, Y);
end else
inherited MouseMove(Shift, X, Y);
end;