Jak zabronić wybieranie komórki w gridzie?

0

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ć?

0

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!

0

możesz odpowiednio obsługiwać rysowanie StringGrida za pomocą OnDrawCell

0

spróbuj oprogramować zdarzenie StringGrid - OnSelectCell ;)

0
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.

0

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;

1 użytkowników online, w tym zalogowanych: 0, gości: 1