Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.07.2018, 14:07
M1ndAction M1ndAction вне форума
Прохожий
 
Регистрация: 05.09.2010
Сообщения: 13
Репутация: 10
По умолчанию 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;


Что нужно подправить, чтобы код заработал?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter