CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - DBGrid - przewijanie rekordów Mouse Wheel

DBGrid - przewijanie rekordów Mouse Wheel

dział ogólny

DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez butchermw » piątek, 3 czerwca 2011, 10:48

Witam,

Mam mały problem z obiektem DBGrid w Builder C++, problem dotyczy przewijania rekordów "kółkiem w myszce" tz. mam załadowanego DBGrid-a danymi i po przesunięciu scroll-em rekordów w górę lub w duł strony z rekordami się nie przewijają - chodzi o to ze zaznaczenie rekordu przesuwa się na samą górę lub duł obszaru DBGrid-a i nie chce pokazać pozostałych danych które są po za tym obszarem. Bardzo proszę o pomoc bo przyznam że jest to dość uciążliwe w użytkowaniu większej ilości rekordów :)
Avatar użytkownika
butchermw
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): niedziela, 26 grudnia 2010, 00:39
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WinXP/Win7
Kompilator: Builder6
Builder2010
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez Cyfrowy Baron » piątek, 3 czerwca 2011, 11:00

Opisz jaśniej, pokaż jakiegoś screena bo nie rozumiem w czym problem.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez butchermw » piątek, 3 czerwca 2011, 11:15

chodzi o to że podczas przewijania rekordów myszką(scrollem) to przesuwa się to szare zaznaczenie wiersza w obszarze tylko tym co jest widoczny, przykładowo przewijam kółko w górę i szare zaznaczenie idzie na samą górę okna DBGrid ale nie przesunie się strona tak by zobaczyć wcześniejsze rekordy...
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
butchermw
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): niedziela, 26 grudnia 2010, 00:39
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WinXP/Win7
Kompilator: Builder6
Builder2010
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez Cyfrowy Baron » piątek, 3 czerwca 2011, 11:21

Rozumiem! By to zmienić musiałbyś chyba w opcjach dla DBGrid wyłączyć zaznaczanie całego wiersza.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez butchermw » piątek, 3 czerwca 2011, 15:34

Niestety ale to nie to, musi być jakiś inny sposób. Zauważyłem że podczas przekręcania scrollem zmienia się tylko szare zaznaczenie wiersza ale punkt edycji wiersza(taka strzałka po lewej) stoi w miejscu, natomiast gdy przesyłam strzałkami na klawiaturze to wszystko jest ok (zmienia się zaznaczenie po lewej i kolor wiersza)
Avatar użytkownika
butchermw
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): niedziela, 26 grudnia 2010, 00:39
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WinXP/Win7
Kompilator: Builder6
Builder2010
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez Cyfrowy Baron » sobota, 4 czerwca 2011, 08:20

Przeprowadź testy zmieniając inne opcje komponentu w sekcji Options.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez Corvis » sobota, 4 czerwca 2011, 13:27

Sprawdź tutaj:

http://www.experts-exchange.com/Program ... 90770.html

W Delphi ale można dojść o co chodzi.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez Cyfrowy Baron » sobota, 4 czerwca 2011, 14:35

Strona podana przez Corvis'a ma płatny dostęp, więc za darmo z niej nie skorzystasz. Poza tym sposób polegający na wykorzystaniu przechwytywania komunikatów nie jest tutaj akurat najlepszy.

Proste rozwiązanie. Tworzysz dla obiektu DBGrid1 trzy zdarzenia OnMouseMove, OnMouseWheelDown i OnMouseWheelUp, a następnie umieszczasz w nich taki kod:

KOD cpp:     UKRYJ  
void __fastcall TForm1::DBGrid1MouseMove(TObject *Sender, TShiftState Shift,
                int X, int Y) /* OnMouseMove */
{
  if(GetFocus() != DBGrid1->Handle)
  {
   DBGrid1->SetFocus();
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid1MouseWheelDown(TObject *Sender, TShiftState Shift,
          TPoint &MousePos, bool &Handled) /* OnMouseWheelDown */
{
 DBGrid1->Perform(WM_VSCROLL, 1, 0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::DBGrid1MouseWheelUp(TObject *Sender, TShiftState Shift,
          TPoint &MousePos, bool &Handled) /* OnMouseWheelUp */
{
 DBGrid1->Perform(WM_VSCROLL, 0, 0);
}


Ten kod działa u mnie prawidłowo. Niestety nie wiem, czy w Twojej wersji środowiska występuje metoda GetFocus(), oraz czy TDBGrid obsługuje zdarzenia OnMouseWheel... Jeżeli nie to podaj co nie działa, a poszukam innego rozwiązania.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez Corvis » sobota, 4 czerwca 2011, 15:38

Baronie jak płatna. Przewiń w dół i będzie kod :-)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez Cyfrowy Baron » sobota, 4 czerwca 2011, 17:07

U mnie wygląda to tak:

Mouse-wheel-on-dbgrid-_-delphi,-dbgrid,-mouse,-wheel.png
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez butchermw » sobota, 4 czerwca 2011, 22:26

Niestety ale nic z tego, w mojej wersji Buildera nie ma obsługi OnMouseMove, OnMouseWheelDown i OnMouseWheelUp. Szczerze to mnie trochę zdziwiło że nie ma obsługi scrolla w DBGrid, co tak naprawdę powinno być automatycznie zrobione tak jak to choćby jest w VB, zastanawiam się jeszcze nad skompilowaniem kodu w nowszej wersji Buildera, bo mam do niej dostęp. Co wy na to, może to coś pomóc??
Avatar użytkownika
butchermw
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): niedziela, 26 grudnia 2010, 00:39
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WinXP/Win7
Kompilator: Builder6
Builder2010
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez Cyfrowy Baron » niedziela, 5 czerwca 2011, 07:44

A czy masz zdarzenie OnMouseWheel... dla formularza?



Póki co mogę Tobie zaproponować tylko rozwiązanie wykorzystujące komponent TApplicationEvents (zakładka Additionals):

Umieść na formularzu komponent ApplicationEvents1. Utwórz mu zdarzenie OnMessage, a potem umieść w nim ten kod:

KOD cpp:     UKRYJ  
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
{
 static TPoint cPoint;
 static TRect wRect;

 if(Msg.message == WM_MOUSEMOVE)
 {
  GetCursorPos(&cPoint);

  GetWindowRect(DBGrid1->Handle, &wRect);
 }

 int left = cPoint.x;
 int top  = cPoint.y;

 if(Msg.message == WM_MOUSEWHEEL)
 {
  if( left > wRect.left && left < wRect.right &&
          top  > wRect.top  && top  < wRect.bottom)
  {
   if( (short)HIWORD(Msg.wParam) > 0) DBGrid1->Perform(WM_VSCROLL, 0, 0);
   if( (short)HIWORD(Msg.wParam) < 0) DBGrid1->Perform(WM_VSCROLL, 1, 0);
  }
 }
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez butchermw » niedziela, 5 czerwca 2011, 18:30

Dzięki wielkie za pomoc, jeśli nie ma innego sposobu to może tak zostać jak najbardziej.

A jeśli chodzi o zdarzenie OnMouseWheel dla formularza to mam możliwość wykorzystania.
Avatar użytkownika
butchermw
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): niedziela, 26 grudnia 2010, 00:39
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WinXP/Win7
Kompilator: Builder6
Builder2010
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - przewijanie rekordów Mouse Wheel

Nowy postprzez Cyfrowy Baron » niedziela, 5 czerwca 2011, 20:18

butchermw napisał(a):A jeśli chodzi o zdarzenie OnMouseWheel dla formularza to mam możliwość wykorzystania.


Miałem z tym pewien pomysł, ale nie działa dobrze, więc musi zostać z ApplicationEvents.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron