Текущий архив: 2009.05.24;
Скачать: CL | DM;
Вниз
Движение по StringGrid Найти похожие ветки
← →
Андрей (начинающий) (2009-04-05 15:59) [0]Подскажите, пожалуйста, как осуществлять движение по ячейкам StringGrid с помощью MouseWheelDown/MouseWheelUp? При фокус должен устанавливаться на следующую строку/ячейку.
Пример:
в SG заполенено 10 строк, выделена ячейка 2,2
при событии MouseWheelDown должна выделиться ячейка 2,3
← →
AIK © (2009-04-05 16:13) [1]Двигайся удерживая шрифт
← →
Андрей (начинающий) (2009-04-05 19:27) [2]
> AIK © (05.04.09 16:13) [1]
не понял, если можно - поподробнее
← →
{RASkov} © (2009-04-05 21:57) [3]А Делфи какая?
Я в D7 на пустую форму бросил SG указал ему RowCount = 29 затем F9 и кручу колесо мышки.... фокус смещается на одну строку по вертикали... т.е. как я понял так и нужно...
Я что-то не так сделал?
> с помощью MouseWheelDown/MouseWheelUp
у тебя там что-то есть? ....в плане своего кода..
← →
MsGuns © (2009-04-05 23:24) [4]Вероятно, у автора мышь двухкнопочная, а надо чтобы грид скруллинговался мышью
← →
Андрей (начинающий) (2009-04-05 23:27) [5]
> {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 еще ничего нет.
← →
Андрей (начинающий) (2009-04-05 23:28) [6]
> MsGuns © (05.04.09 23:24) [4]
мышь обычная :) 2 кнопки +скролл
← →
{RASkov} © (2009-04-05 23:46) [7]> [5] Андрей (начинающий) (05.04.09 23:27)
Ну и все нормально у тебя....т.е. почти нормально...
тыж сам не рисуешь выделенную ячейку...
попробуй эту:
> Canvas.Brush.Color := clScrollBar;
строку заменить на эту:
if gdSelected in State then Canvas.Brush.Color := clBlue else Canvas.Brush.Color := clScrollBar;
← →
{RASkov} © (2009-04-05 23:48) [8]> [5] Андрей (начинающий) (05.04.09 23:27)
> Canvas.FillRect(CellRect(ACol, ARow));
Лишнее. Зачем еще раз вычислять то, что уже вычеслено и передается в обработчик параметром: Rect: TRect;
← →
{RASkov} © (2009-04-05 23:51) [9]> [5] Андрей (начинающий) (05.04.09 23:27)
> with StringGrid1 do begin
ну и тут не есть совсем гуд... Лучше Sender используй, причем желательно с проверкой на соотвествие типа... может данный обработчик(DrawCell) и не будет вызываться отдельно, но всеж... а для других это как пить дать...
← →
{RASkov} © (2009-04-05 23:53) [10]> может данный обработчик(DrawCell) и не будет вызываться отдельно,
т.е. имется в виду вызов данного обработчика путем вызова имени метода с указанием параметров, где Sender"у может соответствовать совсем не совместимый тип или вообще nil...
← →
Германн © (2009-04-06 01:12) [11]Бред какой-то.
> SG заполняется програмно, убирается выделение ячеек и в
> DrawCell
> выделяется нужная ячейка
>
Она выделяется только цветом в обработчике OnDrawCell?
← →
Андрей (начинающий) (2009-04-06 09:52) [12]
> Германн © (06.04.09 01:12) [11]
> Она выделяется
> только цветом в обработчике OnDrawCell?
Мне не понравилось стандартное выделение ячейки SG и я попробовал этот код. Теперь все устраивает по цвету.
> {RASkov} © (05.04.09 23:53) [10]
Обработчик отдельно у меня больше нигде не вызывается.
Вообще, спасибо за советы. Пойду читать и проверять :)
> {RASkov} © (05.04.09 23:46) [7]
После этого предполагается, что MouseWheelDown/MouseWheelUp заработают автоматом? Просто я извратился уже и решил для себя проблему, но хочется сделать нормально...
← →
MsGuns © (2009-04-06 11:32) [13]А слабо сделать прокрутку сетки глазами ?
← →
Андрей (начинающий) (2009-04-06 22:28) [14]
> MsGuns © (06.04.09 11:32) [13]
Огромное спасибо за содержательный ответ и неоценимую помощь.
Ветка, кажется, называется "Начинающим". Поэтому если считаете, что вопрос глупый, так так и скажите, а затем ткните носом - где в хелпе смотреть. Это будет лучше, чем показывать свою божественность какому-то там новичку ...
← →
Германн © (2009-04-07 00:56) [15]
> Андрей (начинающий) (06.04.09 09:52) [12]
>
>
> > Германн © (06.04.09 01:12) [11]
> > Она выделяется
> > только цветом в обработчике OnDrawCell?
>
> Мне не понравилось стандартное выделение ячейки SG и я попробовал
> этот код. Теперь все устраивает по цвету.
>
>
Так всё устраивает или не всё?
← →
MsGuns © (2009-04-07 14:57) [16]>Андрей (начинающий) (06.04.09 22:28) [14]
>Огромное спасибо за содержательный ответ и неоценимую помощь.
>Ветка, кажется, называется "Начинающим". Поэтому если считаете, что вопрос глупый, так так и >скажите, а затем ткните носом - где в хелпе смотреть. Это будет лучше, чем показывать свою >божественность какому-то там новичку ...
Если "начинающий" соблаговолит четко и внятно объяснить что собственно ему нужно сотворить со стрингридом, то ответ будет таким же четким и внятным. Из сабжа при всей "божественности" добиться ясности не получается :)
В частности непонятно нужно ли выделение текущей ячейки (строчки) нестандартным цветом либо перемещение курсора указателем мыши (с кликом или нет также неясно) - это ведь несколько не одно и то же :)
← →
Андрей (начинающий) (2009-04-07 23:13) [17]
> Германн © (07.04.09 00:56) [15]
> MsGuns © (07.04.09 14:57) [16]
Выделение ячейки нужным цветом, а не стандартным я добился. Мне нужно было после того, как я ее выделил, обработать события MouseWheelDown/MouseWheelUp. При этом перемещать фокус на след. ячейку по горизонтали и выделять ее. снимая выделение с предыдущей. По достижении ColCount перейти соответственно на строку ниже/выше в первую колонку. Не мог сообразить как это сделать.
← →
Германн © (2009-04-08 01:05) [18]
> Андрей (начинающий) (07.04.09 23:13) [17]
>
>
> > Германн © (07.04.09 00:56) [15]
>
>
> > MsGuns © (07.04.09 14:57) [16]
>
> Выделение ячейки нужным цветом, а не стандартным я добился.
> Мне нужно было после того, как я ее выделил, обработать
> события MouseWheelDown/MouseWheelUp. При этом перемещать
> фокус на след. ячейку по горизонтали и выделять ее. снимая
> выделение с предыдущей. По достижении ColCount перейти соответственно
> на строку ниже/выше в первую колонку. Не мог сообразить
> как это сделать.
>
"Выделение ячейки нужным цветом", обработка "события MouseWheelDown/MouseWheelUp." и "перемещение фокуса" никак не могут быть причинно-следственно связаны. Кроме как перанальным способом.
Ну ладно. Перемещение фокуса можно сделать.
← →
MsGuns © (2009-04-08 09:07) [19]Любое открашивание, выделение, а также рисование в ячейках выполняется в событии грида OnDrawCell, мышь тут не при чем, если конечно не требуется различать каким образом фокус попал в ячейку - перемещением клавишами (ползунком) или мышиным кликом (последнее в частности необходимо если нужно "поймать" клик на пиктограммке нарисованной в ячейке, а не в любом месте ячейки)
← →
{RASkov} © (2009-04-08 10:23) [20]> [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;
← →
Андрей (начинающий) (2009-04-08 11:31) [21]Всем спасибо за отклики.
> {RASkov} © (08.04.09 10:23) [20]
Я проделал у себя примерно то же самое, только гораздо корявее :). Пойду приводить код "к общему знаменателю" :) Отдельное спасибо Вам за конкретные подсказки.
Страницы: 1 вся ветка
Текущий архив: 2009.05.24;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.01 c