Форум: "Основная";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
ВнизКолесико мыши в DBGrid Найти похожие ветки
← →
*Ray* © (2006-10-23 20:22) [0]Уважаемые мастера!
Не могли бы вы подсказать как сделать, чтобы в DBGride, который отображает много записей из таблицы базы данных, можно ыбло перемещаться с помощью колесика мыши, а не только ScrollBar. Заранее спасибо! С уважением Кутушев Юрий.
← →
Leonid Troyanovsky © (2006-10-23 21:07) [1]
> *Ray* © (23.10.06 20:22)
> можно ыбло перемещаться с помощью колесика мыши,
Можно ыбло так
http://groups.google.com/group/borland.public.delphi.vcl.components.using.general/msg/c97a9b532941d566
--
Regards, LVT.
← →
HelloWord (2006-10-23 21:08) [2]Оно не будет работать, это глюк такой в этом копоненте. Если хочешь что бы колёсико работало используй компонент DBGridEh из набора копмонентов EhLib
← →
Ketmar © (2006-10-23 21:10) [3]>[1] Leonid Troyanovsky(c) 23-Oct-2006, 21:07
>Можно ыбло так
+1
%-)
← →
Desdechado © (2006-10-23 21:41) [4]HelloWord (23.10.06 21:08) [2]
Только ради этого нет смысла тащить целую библиотеку компонентов, если можно сделать самому целых 2 строчки кода для этого.
← →
Германн © (2006-10-23 22:42) [5]
> Leonid Troyanovsky © (23.10.06 21:07) [1]
>
>
ПисАть слишком много и к тому каждый раз как только пользуешь DBGrid. Куда как лучше пойти путём RxLib.
← →
Loginov Dmitry © (2006-10-23 23:12) [6]*Ray* © (23.10.06 20:22)
как сделать, чтобы в DBGride, который отображает много записей из таблицы базы данных, можно ыбло перемещаться с помощью колесика мыши
Лучше использовать сторонние компоненты, типа TRxDBGrid. А отсутствие скролла у TDBGrid - это не единственный его глюк.
← →
Германн © (2006-10-23 23:39) [7]
> Лучше использовать сторонние компоненты, типа TRxDBGrid.
>
Да не надо их использовать. Лучше посмотреть как там сделан скролл колесом и сделать у себя так же.
← →
КиТаЯц © (2006-10-24 08:34) [8]Поищи по форуму (или в архиве): сам лично раз 5 писал + помимо меня раз 40...
← →
MsGuns © (2006-10-24 10:03) [9]>HelloWord (23.10.06 21:08) [2]
>Оно не будет работать, это глюк такой в этом копоненте. Если хочешь что бы колёсико работало используй компонент DBGridEh из набора копмонентов EhLib
Иногда лучше жевать.
>Германн © (23.10.06 22:42) [5]
>ПисАть слишком много и к тому каждый раз как только пользуешь DBGrid. Куда как лучше пойти путём RxLib.
Много писать не надо. Можно сделать фрэйм и положить его в репозиторий. Там заодно реализовать поиски, сортировки и т.д. НД. Одна несомненная польза будет - автор разберется наконец и с гридом, и с датасетами и не будет задавить детских вопросов.
>Loginov Dmitry © (23.10.06 23:12) [6]
>Лучше использовать сторонние компоненты, типа TRxDBGrid.
Лучше не лезть с советами типа "поставь ух(эх/их/ах...) либ и не мучайся" по поводу и без. См.Desdechado © (23.10.06 21:41) [4]
>А отсутствие скролла у TDBGrid - это не единственный его глюк.
Перечислите, будьте так любезны.
← →
Loginov Dmitry © (2006-10-24 19:05) [10]MsGuns © (24.10.06 10:03) [9]
Перечислите, будьте так любезны.
Перечислять не стану. Грубить меньше надо.
← →
*Ray* © (2006-10-25 12:26) [11]Я использовал событие MouseWheelUp и MouseWheelDown формы с кодом DBGrid.DataSource.DataSet.Next(Prior). В принципе работает, но работает до тех пор, пока не щелкнуть на DBGrid, а у него такого события как MouseWheel нет. Подскажите поалуйста как подправить код.
← →
*Ray* © (2006-10-25 12:26) [12]Я использовал событие MouseWheelUp и MouseWheelDown формы с кодом DBGrid.DataSource.DataSet.Next(Prior). В принципе работает, но работает до тех пор, пока не щелкнуть на DBGrid, а у него такого события как MouseWheel нет. Подскажите поалуйста как подправить код.
← →
*Ray* © (2006-10-25 12:29) [13]А сторонникам других компонентов был бы багодаен за ссылки где можно их скачать.
← →
*Ray* © (2006-10-25 12:31) [14]Прошу прощения, опечатался, правильно: был бы благодарен
← →
Leonid Troyanovsky © (2006-10-25 13:45) [15]
> *Ray* © (25.10.06 12:26) [12]
> Я использовал событие MouseWheelUp и MouseWheelDown формы
> с кодом DBGrid.DataSource.DataSet.Next(Prior). В принципе
> работает, но работает до тех пор, пока не щелкнуть на DBGrid,
> а у него такого события как MouseWheel нет. Подскажите
Yes. The grid inherits a OnMousewheel event from TCustomgrid, but it is
protected, so you cannot access it from the IDE. But you can do so in
code, e.g.in the forms OnCreate event. The handler can then be used to
send fake arrow keys or scroll messages to the grid.
procedure TForm1.GridMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
Var
code: Cardinal;
begin
Handled := true;
If WheelDelta < 0 Then // you may use > 0 according to taste
code := VK_UP
Else
code := VK_DOWN;
(sender as TWincontrol).Perform( WM_KEYDOWN, code, 0 );
(sender as TWincontrol).Perform( WM_KEYUP, code, 0 );
end;
type
TGridCracker = class(TDBGrid)
public
property OnMouseWheel;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TGridCracker(dbgrid1).OnMouseWheel := GridMousewheel;
end;
--
Peter Below (TeamB)
--
Regards, LVT.
← →
Loginov Dmitry © (2006-10-25 20:21) [16]Leonid Troyanovsky © (25.10.06 13:45) [15]
type
TGridCracker = class(TDBGrid)
public
property OnMouseWheel;
end;
Замечена некая избыточность %))
Было бы достаточно:
TGridCracker = class(TDBGrid);
← →
Leonid Troyanovsky © (2006-10-25 20:42) [17]
> Loginov Dmitry © (25.10.06 20:21) [16]
> TGridCracker = class(TDBGrid)
> public
> property OnMouseWheel;
> end;
>
> Замечена некая избыточность %))
Оные приседания есть часть ритуала.
--
Regards, LVT.
← →
Германн © (2006-10-26 01:51) [18]Кстати. Волей случая ознакомился с реализацией обработки мышиного колёсика у TDBGrid в BDS2006. Почти точь в точь как у ребят создавших RxLib. А сколько лет тому!
← →
MsGuns © (2006-10-26 23:36) [19]>Loginov Dmitry © (24.10.06 19:05) [10]
>Перечислять не стану. Грубить меньше надо.
А фразы, подобные оброненной Вами, неплохо бы подкреплять аргументацией, а не эмоциями.
← →
Loginov Dmitry © (2006-10-27 07:45) [20]MsGuns © (26.10.06 23:36) [19]
А фразы, подобные оброненной Вами, неплохо бы подкреплять аргументацией, а не эмоциями.
Ну вот. Уже мягче. Прогресс... %)
Хорошо. Я упоминал, что отсутствие скролла у TDBGrid - это не единственный его глюк. Перечислять другие глюки не могу, ибо сам не много их знаю. Помимо скролла еще есть глюк с потерей фокуса (о нем знают многие, но не все). Кладешь DBGrid на дочернюю MDI-форму, и далее передаешь фокус какому-либо Win-контролу главной формы, и далее пытаешься передать фокус обратно DBGrid"у. Реакции - ноль. Чтобы перевести фокус на сетку, нужно щелкнуть на каком-либо другом компоненте дочерней формы, после чего передача фокуса сетке происходит как положено. У других гридов подобных глюков не наблюдалось. [D7]
← →
Savek (2006-10-27 13:14) [21]Еще один вариант решения проблемы (скрол колесиком)
Вот процедура подмены сообщиний системы:
procedure TBaseForm.AppMessage(var Msg: TMsg; var Handled: Boolean);
var I : SmallInt;
begin
if Msg.message= WM_MOUSEWHEEL then begin
Msg.message:=WM_KEYDOWN;
Msg.lParam:=0;
i:=HiWord(Msg.wParam);
if i>0 then Msg.wParam:=VK_UP else Msg.wParam:=VK_DOWN;
Handled:=false;
end;
end;
Теперь достаточно в событии создания главной формы написать
Application.OnMessage:=AppMessage;
После этого все гриды в программе реагируют на скрол
PS Минусы этого метода, конечно, очевидны, но во многих случаях это прокатывает
← →
GrBob (2006-10-27 13:23) [22]
Loginov Dmitry © (27.10.06 07:45) [20]
Простите за офтоп, но есть ли решение этой проблемы? Сам натолкнулся буквально только что, а тут оказывается это не у меня руки кривые :) Естественно я использую некоторого потомка этого грида с более широкой функциональностью, но этот косяк видимо там исправлен не был и мне его придется ковырять самому. Только вот в какую сторону? В чем причина такого поведения?
← →
PZ (2006-10-27 15:21) [23]Проверил два метода:
[15] Leonid Troyanovsky © (25.10.06 13:45)
и
[21] Savek (27.10.06 13:14)
Первый из них работает с каким-то странным засыпанием: надо много раз крутить колесом туда-сюда, чтобы DBGrid сдвинулась с места.
Втрой способ работает без замечаний, нормально.
← →
PZ (2006-10-27 15:24) [24]Прошу прощения: не [15] Leonid Troyanovsky © (25.10.06 13:45), а [1] Leonid Troyanovsky © (23.10.06 21:07)
← →
Loginov Dmitry © (2006-10-27 15:47) [25]> [22] GrBob (27.10.06 13:23)
Я раньше исправлял этот глюк посредством отлавливания сообщения щелчка левой кнопки мыши, и далее устанавливал на сетке фокус программным путем.
Кстати, только что проверил - в RxDBGrid этот глюк остался. :))
← →
*Ray* © (2006-10-31 12:07) [26]Всем большое спасибо! Проблема решена. Отдельное спасибо Savek, чьим вариантом я воспользовался. Был бы благодарен если бы Вы прокомментировали код, как это работает. Понимаю вопрос глупый, но не хочу использовать бездумно, хочу понять.
procedure TBaseForm.AppMessage(var Msg: TMsg; var Handled: Boolean);
var I : SmallInt;
begin
if Msg.message= WM_MOUSEWHEEL then begin
Msg.message:=WM_KEYDOWN;
Msg.lParam:=0;
i:=HiWord(Msg.wParam);
if i>0 then Msg.wParam:=VK_UP else Msg.wParam:=VK_DOWN;
Handled:=false;
end;
end;
Application.OnMessage:=AppMessage;
← →
Loginov Dmitry © (2006-10-31 12:49) [27]> Теперь достаточно в событии создания главной формы написать
>
> Application.OnMessage:=AppMessage;
Изврат!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.037 c