Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.042 c
2-1164547518
Мишок
2006-11-26 16:25
2006.12.17
автозагрузка


1-1162539533
Gear
2006-11-03 10:38
2006.12.17
Как правильно закрыть все потоки закрывая программу?


2-1164627544
mmms
2006-11-27 14:39
2006.12.17
Можно ли в TRichEdit вывести текст с фоном произв. цвета?


15-1164479682
DillerXX
2006-11-25 21:34
2006.12.17
Экслер - История безнадежно женатого человека


5-1145023755
SMAC
2006-04-14 18:09
2006.12.17
Binary component





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский