Size: a a a

2020 March 10

a

aford in Delphi & Lazarus
Геннадий Малинин
Я не понимаю, почему не подходят события грида
Сначала идёт скролл в наборе данных, а потом обрабатывается onmousedown
источник

a

aford in Delphi & Lazarus
А мне надо наоборот
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
При каком действии?
источник

a

aford in Delphi & Lazarus
При нажатии лкм, пкм, колесиком. Если выбирается строка, которая в списке неактивных (у меня он в tlist, проверяю на соответсвие в afterscroll), то перехожу на предыдущую или следующую запись в зависимости от типа скролла: клик или след/пред запись. Как-то так
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
aford
При нажатии лкм, пкм, колесиком. Если выбирается строка, которая в списке неактивных (у меня он в tlist, проверяю на соответсвие в afterscroll), то перехожу на предыдущую или следующую запись в зависимости от типа скролла: клик или след/пред запись. Как-то так
Так, а в событии скрола у тебя что?
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Почему не должно оно происходить?
источник

a

aford in Delphi & Lazarus
if not FExcepts.Contains(FDQuery.FieldByName('user_id').AsString) then
             Exit; // не попали на неактивную строку
           if FMouseDown then // кликнули мышкой
             FDQuery.RecNo:= FPrevID;
          { else
             if FDQuery.RecNo > FPrevID then // скролл вниз
             begin
               if FDQuery.RecNo = FDQuery.RecordCount - 1 then
                 FDQuery.Prior // если последняя запись - вверх
               else
                 FDQuery.Next;
             end else // скролл вверх
               begin
                 if FDQuery.RecNo = 0 then
                   FDQuery.Next
                 else
                   FDQuery.Prior;
               end; }
источник

a

aford in Delphi & Lazarus
Нашел вроде решение.. извините, может я неправильно объясняю то, чего хочу)
источник

AS

Alexey Shumkin in Delphi & Lazarus
aford
if not FExcepts.Contains(FDQuery.FieldByName('user_id').AsString) then
             Exit; // не попали на неактивную строку
           if FMouseDown then // кликнули мышкой
             FDQuery.RecNo:= FPrevID;
          { else
             if FDQuery.RecNo > FPrevID then // скролл вниз
             begin
               if FDQuery.RecNo = FDQuery.RecordCount - 1 then
                 FDQuery.Prior // если последняя запись - вверх
               else
                 FDQuery.Next;
             end else // скролл вверх
               begin
                 if FDQuery.RecNo = 0 then
                   FDQuery.Next
                 else
                   FDQuery.Prior;
               end; }
FExcepts.Contains
FExcepts - TList?  ой, нинада!
источник

a

aford in Delphi & Lazarus
Alexey Shumkin
FExcepts.Contains
FExcepts - TList?  ой, нинада!
где-то читал, что это вредно, но вроде пока проблем не было)
источник

AS

Alexey Shumkin in Delphi & Lazarus
aford
if not FExcepts.Contains(FDQuery.FieldByName('user_id').AsString) then
             Exit; // не попали на неактивную строку
           if FMouseDown then // кликнули мышкой
             FDQuery.RecNo:= FPrevID;
          { else
             if FDQuery.RecNo > FPrevID then // скролл вниз
             begin
               if FDQuery.RecNo = FDQuery.RecordCount - 1 then
                 FDQuery.Prior // если последняя запись - вверх
               else
                 FDQuery.Next;
             end else // скролл вверх
               begin
                 if FDQuery.RecNo = 0 then
                   FDQuery.Next
                 else
                   FDQuery.Prior;
               end; }
и зачем тебе отдельный список неактивных записей?
источник

a

aford in Delphi & Lazarus
Alexey Shumkin
и зачем тебе отдельный список неактивных записей?
можно массивом, мне без разницы, сделал как удобнее. А вот зачем - отдельная история, оч оч оч долго объяснять(
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Alexey Shumkin
и зачем тебе отдельный список неактивных записей?
Вероятно так логика построена
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
aford
можно массивом, мне без разницы, сделал как удобнее. А вот зачем - отдельная история, оч оч оч долго объяснять(
А не можешь хранить user_id числом?
источник

AS

Alexey Shumkin in Delphi & Lazarus
aford
можно массивом, мне без разницы, сделал как удобнее. А вот зачем - отдельная история, оч оч оч долго объяснять(
ну "зачем " - это самое интересное.. как правило, озвучивание приводит к пересмотру решения )))))))
источник

a

aford in Delphi & Lazarus
лучше конечно числом, но в моем случае не подходит.
источник

a

aford in Delphi & Lazarus
Alexey Shumkin
ну "зачем " - это самое интересное.. как правило, озвучивание приводит к пересмотру решения )))))))
Согласен, но жаль, что времени нет весь огород перекапывать((
источник

N

Nik in Delphi & Lazarus
aford
При нажатии лкм, пкм, колесиком. Если выбирается строка, которая в списке неактивных (у меня он в tlist, проверяю на соответсвие в afterscroll), то перехожу на предыдущую или следующую запись в зависимости от типа скролла: клик или след/пред запись. Как-то так
Там есть событие выбора строки или ячейки - проще его задействовать.
источник

a

aford in Delphi & Lazarus
Nik
Там есть событие выбора строки или ячейки - проще его задействовать.
блин. OnCellMouseClick? А то я уже нагородил такого...

function HookProc(Code: Integer; WParam: Word; LParam: Longint): Longint; Stdcall;
var
 msg: PEVENTMSG;
begin
 if Code >= 0 then
 begin
   msg:= Pointer(LParam);
   case Msg.message of
     WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN: FrmGetGroup.MouseDown:= True;
     WM_LBUTTONUP, WM_RBUTTONUP, WM_MBUTTONUP: FrmGetGroup.MouseDown:= False;
   end;
 end;
End;
источник

N

Nik in Delphi & Lazarus
aford
блин. OnCellMouseClick? А то я уже нагородил такого...

function HookProc(Code: Integer; WParam: Word; LParam: Longint): Longint; Stdcall;
var
 msg: PEVENTMSG;
begin
 if Code >= 0 then
 begin
   msg:= Pointer(LParam);
   case Msg.message of
     WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN: FrmGetGroup.MouseDown:= True;
     WM_LBUTTONUP, WM_RBUTTONUP, WM_MBUTTONUP: FrmGetGroup.MouseDown:= False;
   end;
 end;
End;
Я точное название не помню. Не за компом сейчас.
источник