powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / обработка Drag'n'Drop в DBGrid блокирует доступ к данным
24 сообщений из 24, страница 1 из 1
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508023
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть DBGrid, хочется иметь возможность пользователю манипулировать с данными в нем и при этом хватать мышью отдельные строки и перетаскивать их, например, в другой контрол
если у DBGrid.DragMode=dmAutomatic, то с данными пользователь уже не может работать, а если dmManual, то тянуть не получается

можно ли это как-то совместить без дополнительных переключений со стороны пользователя?
где почитать про это?

спасибо
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508036
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Васяможно ли это как-то совместить без дополнительных переключений со стороны пользователя?
где почитать про это?

Можно.
В справке по DragMode.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508037
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в справке написано
Call BeginDrag to start a drag operation.

в какой момент вызывать-то? при получении фокуса сеткой? как я узнаю, что юзер желает тащить?
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508038
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Васяв какой момент вызывать-то? при получении фокуса сеткой? как я узнаю, что юзер желает тащить?

А вот это написано в справке по BeginDrag.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508040
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА вот это написано в справке по BeginDrag.

Там, кстати, куча геморроя в этих Drag'ах. Во всяком случае в DXE2 параметр Threshold (или как он там) в BeginDrag игнорируется и если вызывать это в OnMouseDown, то при нажатии мышки сразу начинается перетаскивание. В итоге мне для своего приложения пришлось эмулировать этот Threshold самому через OnMouseMove и там была куча подводных камней.
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508042
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну поясните непонятливому

Setting Immediate to false allows the control to accept mouse clicks without beginning a drag-and-drop operation.

это описан один из параметров метода
но ведь, чтоб отложенная реакция на действия пользователя сработала, нужно все равно вызвать этот метод BeginDrag
а в какой момент его вызвать-то, не пойму :(
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508043
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Васяа в какой момент его вызвать-то, не пойму :(

Тебе же сказали: в OnMouseDown.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508045
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТебе же сказали: в OnMouseDown.

мы сделали свои посты одновременно, так что не нервничай :)

спасибо, буду пробовать
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508048
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ВасяSetting Immediate to false allows the control to accept mouse clicks without beginning a drag-and-drop operation.

Вот как раз эта шняга и не работала, в любом случае перетаскивание начиналось сразу.
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508057
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня в Д2010 immediate работает

но вот странность таки наблюдается:
в обработчик OnMouseDown попадает только тогда, когда кликнуть на шапку сетки или на свободное от записей пространство
а если на любую запись, то событие не происходит :(
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508060
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит происходит какое-нибудь другое событие. Найди какое и будет тебе счастье. Или не будет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508076
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovпроисходит какое-нибудь другое событие

или в каком-нибудь другом компоненте
может, вообще в каком-нибудь inplace-editor, который в сетке активизируется?

на скроллбаре сетки и левой боковой колонке с указателем текущей строки тоже не срабатывает

найти пока не получается
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508126
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перетаскивание мышкой данных - это очень сложно. Лучше повесить 2 кнопки со стрелками -> и <- и все действия прописать на них.
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508132
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,
удивительно слышать именно это и именно от тебя
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508154
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrЛучше повесить 2 кнопки со стрелками -> и <- и все действия прописать на них.
в моем случае это не подходит, логика несколько сложнее
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508222
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокDimaBr,
удивительно слышать именно это и именно от тебя
Очень сложно для пользователей, для бабушек с трясущимися руками
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508256
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrдля бабушек с трясущимися руками
вот ты о чем :)
Я бы добавил сюда юзверей, которые как можно реже стараются хвататься за мышь, предпочитая ей клаву
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508297
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Если делать софт специально для бабушек с трясущимися руками - толь они и будут его использовать. Хотя дублирование кнопками - хорошая идея в любом случае.
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508308
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonDimaBr,

Если делать софт специально для бабушек с трясущимися руками - толь они и будут его использовать. Хотя дублирование кнопками - хорошая идея в любом случае.
Поверь, Drag'n'Drop это зло !!!
Даже у опытного пользователя во время перетаскивания под мышь попадает волос или мусор на столе и курсор начинает прыгать.
А перетаскивание узлов в дереве - это ВСЕЛЕНСКОЕ ЗЛО !!!
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508323
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonDimaBr,

Если делать софт специально для бабушек с трясущимися руками - толь они и будут его использовать. Хотя дублирование кнопками - хорошая идея в любом случае.

Я тоже не люблю драг энд дроп. Крайне редко, когда этот механизм действительно удобен, чаще всего для понтов - перетащите документ на принтер и он распечатается.
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508335
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schimakhaonDimaBr,

Если делать софт специально для бабушек с трясущимися руками - толь они и будут его использовать. Хотя дублирование кнопками - хорошая идея в любом случае.

Я тоже не люблю драг энд дроп. Крайне редко, когда этот механизм действительно удобен, чаще всего для понтов - перетащите документ на принтер и он распечатается.
Порядок строк в таблице тоже удобнее менять мышкой, чем кнопками.
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508594
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПоверь, Drag'n'Drop это зло !!!

DND - это очень удобно. Бывает, ускоряет действия в 5-10 раз. Другое дело, что обязательно стоит дублировать - это бесспорно.
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39508602
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonавторПоверь, Drag'n'Drop это зло !!!
DND - это очень удобно. Бывает, ускоряет действия в 5-10 раз. Другое дело, что обязательно стоит дублировать - это бесспорно.
Зависит от контекста. Например, порядок менять - удобно, а вот между двумя списками проще по даблклику, если только не несколько элементов сразу. В проводнике вообще ужас, проще Ctrl-C - Ctrl-V.
...
Рейтинг: 0 / 0
обработка Drag'n'Drop в DBGrid блокирует доступ к данным
    #39511925
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант решения проблемы нечувствительности грида к мыши
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
type
  TDBGrid = class( DbGrids.TDBGrid )
    protected
      procedure MouseDown( Button: TMouseButton; Shift: TShiftState; X, Y: Integer ); override;
  end;
...
procedure TDBGrid.MouseDown( Button: TMouseButton; Shift: TShiftState; X, Y: Integer );
var
  xCell: TGridCoord;
begin
  inherited;
  xCell := MouseCoord( X, Y );
  if( xCell.X >= IndicatorOffset ) and ( xCell.Y > 0 ) then
    if( Assigned( OnMouseDown ) ) then
      OnMouseDown( Self, Button, Shift, X, Y );
end;


обработчик срабатывает только в области данных грида, заголовок и свободные поля реагируют как раньше
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / обработка Drag'n'Drop в DBGrid блокирует доступ к данным
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]