|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
OnMouseMove в TDrawGrid на сенсорном экране
Программа работает на сенсорном Windows-планшете. Есть таблица, в ней нужно выделить ряд ячеек в строке: наводим курсор мыши на ячейку, нажимаем левую клавишу и, удерживая её, тянем мышь в сторону, отпускаем левую кнопку (а в это время в OnDrawCell прорисовываем выделенные ячейки).
Мышью, тачпадом - всё работает. Но не работает на сенсорном экране планшета. Таблица - TDrawGrid, использую OnMouseDown, OnMouseMove, OnMouseUp. В Shift перебрал все, казалось бы, возможные варианты: ssLeft, ssTouch, ssPen. Полный код: Код:
procedure TfmMain.GridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; ARect: TRect; begin (Sender as TDrawGrid).MouseToCell(X, Y, ACol, ARow); ARect := (Sender as TDrawGrid).CellRect(ACol, ARow); pmIsLeft := X<(ARect.Left+((ARect.Right-ARect.Left) div 2)); pmCol := ACol; pmRow := ARow; if (ssLeft in Shift) or (ssTouch in Shift) or (ssPen in Shift) then begin ChooseDaysInGridRowIndex := ARow; SetLength(ChooseDays, 0); end; end; procedure TfmMain.GridMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin if (ssLeft in Shift) or (ssTouch in Shift) or (ssPen in Shift) then begin (Sender as TDrawGrid).MouseToCell(X, Y, ACol, ARow); if (ChooseDaysInGridRowIndex>0) and (ChooseDaysInGridRowIndex<=(Sender as TDrawGrid).RowCount-1) and ((PagesDays[pagesBuildings.ActivePageIndex][ARow, ACol][0].ReservID<=0) or ((Length(ChooseDays)=0) and ((PagesDays[pagesBuildings.ActivePageIndex][ARow, ACol][1].ReservID<=0)))) then begin SetLength(ChooseDays, Length(ChooseDays)+1); ChooseDays[High(ChooseDays)] := Point(ACol, ChooseDaysInGridRowIndex); InvalidateRect((Sender as TDrawGrid).Handle, (Sender as TDrawGrid).CellRect(ACol, ARow), True); end; ChooseDaysInGrid := True; end; end; procedure TfmMain.GridMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin if ChooseDaysInGrid then begin (Sender as TDrawGrid).MouseToCell(X, Y, ACol, ARow); ChooseDaysInGrid := False; fmGuestArrival.roomID := GridRowTitles[(Sender as TDrawGrid).Tag][ARow].RoomID; // Integer((Sender as TDrawGrid).Objects[0, ARow]); if Length(ChooseDays)>0 then begin fmGuestArrival.dateArrival.DateTime := IncDay(StartDatePeriod, ChooseDays[0].X-1); if Length(ChooseDays)>1 then begin fmGuestArrival.dateDeparture.DateTime := IncDay(StartDatePeriod, ChooseDays[High(ChooseDays)].X - 1); end else begin fmGuestArrival.dateDeparture.DateTime := IncDay(fmGuestArrival.dateArrival.DateTime, 1); end; end; fmGuestArrival.IsEditing := False; fmGuestArrival.cbStatus.ItemIndex := 0; fmGuestArrival.ShowModal; end; end; Что нужно подправить, чтобы код заработал? |