![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Движение по StringGrid
Андрей (начинающий) © (2009-04-05 15:59:00)Подскажите, пожалуйста, как осуществлять движение по ячейкам StringGrid с помощью MouseWheelDown/MouseWheelUp? При фокус должен устанавливаться на следующую строку/ячейку.
Пример:
в SG заполенено 10 строк, выделена ячейка 2,2
при событии MouseWheelDown должна выделиться ячейка 2,3
Андрей (начинающий) (2009-04-08 11:31:00) [1]Всем спасибо за отклики.
> {RASkov} © (08.04.09 10:23) [20]
Я проделал у себя примерно то же самое, только гораздо корявее :). Пойду приводить код "к общему знаменателю" :) Отдельное спасибо Вам за конкретные подсказки.
{RASkov} (2009-04-08 10:23:00) [2]> [17] Андрей (начинающий) (07.04.09 23:13)
примерно так:
procedure TForm1.StringGrid1MouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
if not (Sender is TStringGrid) then Exit;
Handled:=True;
with TStringGrid(Sender) do begin
if Col < ColCount-1 then Col:=Col+1
else begin
Col:=FixedCols;
if Row < RowCount-1 then Row:=Row+1 else Row:=FixedRows;
end;
end;
end;
procedure TForm1.StringGrid1MouseWheelUp(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
if not (Sender is TStringGrid) then Exit;
Handled:=True;
with TStringGrid(Sender) do begin
if Col > FixedCols then Col:=Col-1
else begin
Col:=ColCount-1;
if Row > FixedRows then Row:=Row-1 else Row:=RowCount-1;
end;
end;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if not (Sender is TStringGrid) then Exit;
with TStringGrid(Sender) do begin
if gdSelected in State then Canvas.Brush.Color := clBlue else Canvas.Brush.Color := clScrollBar;
Canvas.FillRect(Rect);
.............
end;
end;
MsGuns (2009-04-08 09:07:00) [3]Любое открашивание, выделение, а также рисование в ячейках выполняется в событии грида OnDrawCell, мышь тут не при чем, если конечно не требуется различать каким образом фокус попал в ячейку - перемещением клавишами (ползунком) или мышиным кликом (последнее в частности необходимо если нужно "поймать" клик на пиктограммке нарисованной в ячейке, а не в любом месте ячейки)
Германн (2009-04-08 01:05:00) [4]
> Андрей (начинающий) (07.04.09 23:13) [17]
>
>
> > Германн © (07.04.09 00:56) [15]
>
>
> > MsGuns © (07.04.09 14:57) [16]
>
> Выделение ячейки нужным цветом, а не стандартным я добился.
> Мне нужно было после того, как я ее выделил, обработать
> события MouseWheelDown/MouseWheelUp. При этом перемещать
> фокус на след. ячейку по горизонтали и выделять ее. снимая
> выделение с предыдущей. По достижении ColCount перейти соответственно
> на строку ниже/выше в первую колонку. Не мог сообразить
> как это сделать.
>
"Выделение ячейки нужным цветом", обработка "события MouseWheelDown/MouseWheelUp." и "перемещение фокуса" никак не могут быть причинно-следственно связаны. Кроме как перанальным способом.
Ну ладно. Перемещение фокуса можно сделать.
Андрей (начинающий) (2009-04-07 23:13:00) [5]
> Германн © (07.04.09 00:56) [15]
> MsGuns © (07.04.09 14:57) [16]
Выделение ячейки нужным цветом, а не стандартным я добился. Мне нужно было после того, как я ее выделил, обработать события MouseWheelDown/MouseWheelUp. При этом перемещать фокус на след. ячейку по горизонтали и выделять ее. снимая выделение с предыдущей. По достижении ColCount перейти соответственно на строку ниже/выше в первую колонку. Не мог сообразить как это сделать.
MsGuns (2009-04-07 14:57:00) [6]>Андрей (начинающий) (06.04.09 22:28) [14]
>Огромное спасибо за содержательный ответ и неоценимую помощь.
>Ветка, кажется, называется "Начинающим". Поэтому если считаете, что вопрос глупый, так так и >скажите, а затем ткните носом - где в хелпе смотреть. Это будет лучше, чем показывать свою >божественность какому-то там новичку ...
Если "начинающий" соблаговолит четко и внятно объяснить что собственно ему нужно сотворить со стрингридом, то ответ будет таким же четким и внятным. Из сабжа при всей "божественности" добиться ясности не получается :)
В частности непонятно нужно ли выделение текущей ячейки (строчки) нестандартным цветом либо перемещение курсора указателем мыши (с кликом или нет также неясно) - это ведь несколько не одно и то же :)
Германн (2009-04-07 00:56:00) [7]
> Андрей (начинающий) (06.04.09 09:52) [12]
>
>
> > Германн © (06.04.09 01:12) [11]
> > Она выделяется
> > только цветом в обработчике OnDrawCell?
>
> Мне не понравилось стандартное выделение ячейки SG и я попробовал
> этот код. Теперь все устраивает по цвету.
>
>
Так всё устраивает или не всё?
Андрей (начинающий) (2009-04-06 22:28:00) [8]
> MsGuns © (06.04.09 11:32) [13]
Огромное спасибо за содержательный ответ и неоценимую помощь.
Ветка, кажется, называется "Начинающим". Поэтому если считаете, что вопрос глупый, так так и скажите, а затем ткните носом - где в хелпе смотреть. Это будет лучше, чем показывать свою божественность какому-то там новичку ...
MsGuns (2009-04-06 11:32:00) [9]А слабо сделать прокрутку сетки глазами ?
Андрей (начинающий) (2009-04-06 09:52:00) [10]
> Германн © (06.04.09 01:12) [11]
> Она выделяется
> только цветом в обработчике OnDrawCell?
Мне не понравилось стандартное выделение ячейки SG и я попробовал этот код. Теперь все устраивает по цвету.
> {RASkov} © (05.04.09 23:53) [10]
Обработчик отдельно у меня больше нигде не вызывается.
Вообще, спасибо за советы. Пойду читать и проверять :)
> {RASkov} © (05.04.09 23:46) [7]
После этого предполагается, что MouseWheelDown/MouseWheelUp заработают автоматом? Просто я извратился уже и решил для себя проблему, но хочется сделать нормально...
Германн (2009-04-06 01:12:00) [11]Бред какой-то.
> SG заполняется програмно, убирается выделение ячеек и в
> DrawCell
> выделяется нужная ячейка
>
Она выделяется только цветом в обработчике OnDrawCell?
{RASkov} (2009-04-05 23:53:00) [12]> может данный обработчик(DrawCell) и не будет вызываться отдельно,
т.е. имется в виду вызов данного обработчика путем вызова имени метода с указанием параметров, где Sender'у может соответствовать совсем не совместимый тип или вообще nil...
{RASkov} (2009-04-05 23:51:00) [13]> [5] Андрей (начинающий) (05.04.09 23:27)
> with StringGrid1do begin
ну и тут не есть совсем гуд... Лучше Sender используй, причем желательно с проверкой на соотвествие типа... может данный обработчик(DrawCell) и не будет вызываться отдельно, но всеж... а для других это как пить дать...
{RASkov} (2009-04-05 23:48:00) [14]> [5] Андрей (начинающий) (05.04.09 23:27)
> Canvas.FillRect( CellRect(ACol, ARow));
Лишнее. Зачем еще раз вычислять то, что уже вычеслено и передается в обработчик параметром: Rect: TRect;
{RASkov} (2009-04-05 23:46:00) [15]> [5] Андрей (начинающий) (05.04.09 23:27)
Ну и все нормально у тебя....т.е. почти нормально...
тыж сам не рисуешь выделенную ячейку...
попробуй эту:
> Canvas.Brush.Color := clScrollBar;
строку заменить на эту:
if gdSelected in State then Canvas.Brush.Color := clBlue else Canvas.Brush.Color := clScrollBar;
Андрей (начинающий) (2009-04-05 23:28:00) [16]
> MsGuns © (05.04.09 23:24) [4]
мышь обычная :) 2 кнопки +скролл
Андрей (начинающий) (2009-04-05 23:27:00) [17]
> {RASkov} © (05.04.09 21:57) [3]
D7
> у тебя там что-то есть? ....в плане своего кода..
SG заполняется програмно, убирается выделение ячеек и в DrawCell
выделяется нужная ячейка
with StringGrid1 do begin
Canvas.Brush.Color := clScrollBar;
Canvas.FillRect(CellRect(ACol, ARow));
Canvas.Font.Style := [fsBold];
DrawText(Canvas.Handle,PChar(Cells[ACol, ARow]), -1, Rect, DT_SINGLELINE or DT_VCENTER);
end;
После этого мне надо обработать скролл мыши для движения от этой выделенной ячейки и выделять тем же способом следующую.
в MouseWheelDown/MouseWheelUp еще ничего нет.
MsGuns (2009-04-05 23:24:00) [18]Вероятно, у автора мышь двухкнопочная, а надо чтобы грид скруллинговался мышью
{RASkov} (2009-04-05 21:57:00) [19]А Делфи какая?
Я в D7 на пустую форму бросил SG указал ему RowCount = 29 затем F9 и кручу колесо мышки.... фокус смещается на одну строку по вертикали... т.е. как я понял так и нужно...
Я что-то не так сделал?
> с помощью MouseWheelDown/MouseWheelUp
у тебя там что-то есть? ....в плане своего кода..
Андрей (начинающий) (2009-04-05 19:27:00) [20]
> AIK © (05.04.09 16:13) [1]
не понял, если можно - поподробнее