- zobacze jutro co tam jest
- zrobione
- na drugiej grafice widać po prawej stronie jeszcze tło tabeli. przy przesuwaniu paskiem się nie pojawia, ale po naciśnięciu przycisku w prawo lub w dół pojawia się tak jakby dodatkowy wiersz/kolumna
- nie na koniec. po prostu obniżenie całej zawartości bezpośrednio po przekęceniu kółka. normalnie dzieje się tak, że po przekręceniu zaznacza się komórka o jedna niżej i dopiero jak focus zejdzie na sam dół tego co jest wyświetlone to obniża się dalej tak, że jest widoczne to co nie było wcześniej. W stringboxie robilem to w zdarzeniu on mousewheel poprzez scrollbox.vertscrollbar.position := ...
- tu będę musiał poprawić warunki, ale wszystko chyba działa
- jest obsługa mouseleave komponentu i wtedy faktycznie sie odznacza, problem mam w momencie gdy mam rozpoznać że kursor jest poza obszarem realnej tabeli
w zdarzeniu mousemove dodałem
VCursor.X := X;
VCursor.Y := Y;
if (FCol <> -1) and (FRow <> -1) then
begin
for I := 1 to ColCount - 1 do
for J := 1 to RowCount - 1 do
if PtInRect(CellRect(I, J), VCursor) then
CrInTab := True;
if CrInTab = False then
begin
for I := 1 to ColCount - 1 do
begin
SGCell[I, FRow].Focus := False;
DrawCell(Sender, I, FRow, CellRect(I, FRow), [gdSelected]);
end;
DrawCell(Sender, 0, FRow, CellRect(0, FRow), [gdSelected]);
end;
end;
i faktycznie działa to niemal idealnie. konkretnie odznacz się zaznaczony wiersz, za to po najechaniu na najniższy wiersz, nie zaznacza się on. będę kombinował z tym jutro
EDIT
MouseMove działa chyba dobrze. kod zdarzenia wygląda teraz tak:
CrInTab := False;
CellCoord := MouseCoord(X, Y);
VCursor.X := X;
VCursor.Y := Y;
for I := 1 to ColCount - 1 do
for J := 1 to RowCount - 1 do
if PtInRect(CellRect(I, J), VCursor) then
CrInTab := True;
if CrInTab then
if FRow <> CellCoord.Y then
begin
if (FCol <> -1) and (FRow <> -1) then
begin
for I := 1 to ColCount - 1 do
begin
SGCell[I, FRow].Focus := False;
DrawCell(Sender, I, FRow, CellRect(I, FRow), [gdSelected]);
end;
DrawCell(Sender, 0, FRow, CellRect(0, FRow), [gdSelected]);
end;
if CellCoord.Y <> 0 then
begin
for I := 1 to ColCount - 1 do
begin
SGCell[I, CellCoord.Y].Focus := True;
DrawCell(Sender, I, CellCoord.Y, CellRect(I, CellCoord.Y), [gdSelected]);
end;
DrawCell(Sender, 0, CellCoord.Y, CellRect(0, CellCoord.Y), [gdSelected]);
end;
end;
if (FCol <> -1) and (FRow <> -1) then
begin
if CrInTab = False then
begin
for I := 1 to ColCount - 1 do
begin
SGCell[I, FRow].Focus := False;
DrawCell(Sender, I, FRow, CellRect(I, FRow), [gdSelected]);
end;
DrawCell(Sender, 0, FRow, CellRect(0, FRow), [gdSelected]);
FCol := -1;
FRow := -1;
end;
end;
if CrInTab then
begin
FCol := CellCoord.X;
FRow := CellCoord.Y;
end;