Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

DBGrid i MouseWheel

[es] :: Pascal / Delphi / Kylix :: DBGrid i MouseWheel

[ Pregleda: 2020 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.vdial.verat.net.



+1 Profil

icon DBGrid i MouseWheel 17.02.2005. u 14:50 - pre 233 meseci
Pozdrav svima, imam jednu molbu...

Da li bi neko bio ljubazan da mi objasni kako da implementiram handle-ovanje mousewheel-a u dbgrid-u (ili bilo cemu drugom, kad smo vec tu), po mogucnosti da ne pravim naslednika jer bi onda imao mnoooogo src-a da menjam, ali moze i to ako nema drugog nacina. Verujem da moze, sobzirom da TControl ima OnMouseWheel. Znam da moze i direktnom obradom poruke (ono, WM_nestonesto), ali ni to ne znam kako, uopste nisam u ljubavi sa porukama u windows-u...

Sta da radim, kad su sekretarice navikle da vrte tockic srednjim prstom... ;-)

Edit: Nebitno sta ce MWheel da radi, samo da kontrola odgovori na dogadjaj.
 
Odgovor na temu

sasas
Saša Slavnić
radim za neke švabe

Član broj: 35478
Poruke: 617
*.zaslon-telecom.si.



Profil

icon Re: DBGrid i MouseWheel 17.02.2005. u 14:58 - pre 233 meseci
Evo jedan brzinski odgovor, valjda će ti pomoći. Ubaci na formu ApplicationEvents i kopipejstuj ovo:

Code:

procedure TMojaForma.ApplicationEvents1Message(var Msg: tagMSG;
  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;
   inherited;
end;


ss.
When something is hard to do, then it's not worth doing.
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.vdial.verat.net.



+1 Profil

icon Re: DBGrid i MouseWheel 17.02.2005. u 15:03 - pre 233 meseci
Cekaj, cekaj, sa'cu da probam...
Btw., uopste nisam znao da postoji appevents, to bi mi resilo mnogo problema i na drugim mestima...
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.vdial.verat.net.



+1 Profil

icon Re: DBGrid i MouseWheel 17.02.2005. u 15:11 - pre 233 meseci
Radi, hvala puno!

Jes' da mi ne treba takva obrada poruke, ali verujem da cu lako izmenti. Ipak, neat trick, ono sa simuliranjem poruke za VK_UP i VK_DOWN, izgleda da je appevents komponenta prva u lancu (posle forme na kojoj je) za dobijanje win poruka, i izgleda da je isti tip poruke za tockic i pritisnute tastere na tastaturi, cim izmenom parametara poruke dobija se druga poruka...

Tnx onceagain!
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.vdial.verat.net.



+1 Profil

icon Re: DBGrid i MouseWheel 17.02.2005. u 15:46 - pre 233 meseci
Jos jedno pitanjce,

ovo radi super, ali ima jedan problem, odgovara na svaki mwheel dogadjaj na application level-u. Pojavljuje se potencijalan problem kad se vrsi iterativna obrada recorda tabele koja je pod dbgridom (pozvano iz druge forme), a npr. sekretarica dok ceka nervozno drnda mwheel u nadi da ce to podstaknuti racunar da brze zavrsi (moja obrada MWHEEL-a ne ide preko VK_XXX, vec pristupa underlying datasetu direktno, tako da TDataset.DisableControls ne vrsi posao) . Moje pitanje je kako najjednostavnije dobiti informaciju da li je neki TForm trenutno aktivan a bez uvodjenja kontrolne boolean varijable koja ce se postavljati svaki put kada forma prozove show neke druge forme i uklanjati se otherwise. TForm.Focused ne vrsi posao.
 
Odgovor na temu

sasas
Saša Slavnić
radim za neke švabe

Član broj: 35478
Poruke: 617
195.246.3.*



Profil

icon Re: DBGrid i MouseWheel 17.02.2005. u 15:52 - pre 233 meseci
Form.Active radi taj posao.

ss.

&you're welcome :)
When something is hard to do, then it's not worth doing.
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.vdial.verat.net.



+1 Profil

icon Re: DBGrid i MouseWheel 17.02.2005. u 16:41 - pre 233 meseci
Da, i ja sam isto to iskopao (kako li sam samo ovakve stvari resavao pre prijave na ES :-), samo uz malu izmenu, pa evo ako nekom zatreba...

Code:

if Msg.message = WM_MOUSEWHEEL then
begin
  if not FormMain.Active then
  begin
    Handled := False;
    Exit;
  end
  else
    if D.Qr.ControlsDisabled then
    begin
      Handled := True;  //Da ne bi ostale ne-handle-ovane poruke na cekanju
      Exit;
    end;

  if SmallInt(HiWord(Msg.wParam)) > 0 then
    D.Qr.Prior
  else
    D.Qr.Next;
  Handled := True;
end;



FormMain je forma gde je DBGrid, a D.Qr je dataset (TQuery) koji je ispod DBGrida. Mogla je i prosta provera DBGrid.HasFocus, ali ovako je zgodnije jer ako je npr. fokus na TEdit-u koji sluzi za pretragu i dalje ce raditi MWheel...
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: DBGrid i MouseWheel

[ Pregleda: 2020 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.