Newsgroup: it.comp.lang.delphi
Titolo: Attivare scrolling

Ciao a tutti, nel mio progetto ci sono delle dbrgid, ma purtroppo l'unico
modo per farle scorrere è quello di cliccare sulle freccette nella barra di
scrrimento, come potrei attvare lo scroll agenso semplicemnte sulla
"rotellina" del mouse?
Grazie 1000
-- 
Lorenzo Mendini Iz2FOS
ICQ: 26993628 (Ayrton)
http://www.polopositivo.org
 (Home Page)

)

Just drop a TApplication component on a form
Scusate l'ignoranza, ma dove lo trovo il componente TApplication?
Grazie

 Scusate l'ignoranza, ma dove lo trovo il componente TApplication?
Non preoccuparti, è probabilmente un errore nell'articolo. Suppongo si
riferisca al componente TApplicationEvents che si trova nella pagina
"Additional" della Palette dei Componenti.
Io non ho usato quel componente, ma ho carpito la logica dell'intervento
che viene fatto per limitare poi l'effetto solo al controllo DBGrid,
creandone un discendente.


Ok ora provo, per curiosità tu che componente hai usato?

 Ok ora provo, per curiosità tu che componente hai usato?
Nessun componente; invece di intercettare l'evento OnMessage a livello
dell'applicazione, ho creato un discendente del controllo DBGrid e ho
ridefinito la gestione dei messaggi generici inviati da Windows,
sostituendo quelli relativi al movimento della rotellina del mouse con
le pressioni dei tasti freccia su e giù, così come descritto nel tip che
ti ho segnalato.


ho capito, cmq io ho provato con il componente e funziona grazie ciao ciao

 ho capito, cmq io ho provato con il componente e funziona grazie ciao
Sono consapevole del fatto che funziona... :-)
Il problema è un altro: gestito a livello di applicazione, l'effetto di
scrolling up e down usando la rotellina come se si premessero i pulsanti
su e giù influisce su qualsiasi controllo visuale.
Un simile effetto mi sta bene sulla DBGrid dove il movimento della
rotellina provoca spiacevoli effetti collaterali, ma negli altri
controlli standard preferisco il comportamento "nativo".
Per fare un esempio pratico, muovendo la rotellina quando un controllo
TreeView possiede il focus non causerà lo scorrimento del contenuto, ma
bensì la selezione del nodo successivo a quello corrente e così via...
Ciao!


Ho capito, potresti spedirmi il tuo codice di come hai gestito la cosa?
Così lo provo e gli dò un occhiata grazie 1000

 cosa? Così lo provo e gli dò un occhiata grazie 1000
Chiedo scusa del ritardo nella risposta, ma ero impegnato in un
intervendo tecnico. :-)
Pubblico il codice della unit intera che contiene il componente:
===
(*
    ABLS Team Components
      VCL Components & Experts for Delphi development
    Copyright (C) 2004 ABLS Team Snc
      ABLS Team Snc - Software & Web
      Via De Gasperi, 14
      42019 Scandiano
      Reggio Emilia - ITALY
      Phone: (+39) 522 981088
*)
unit ABLSDBGrid;
interface
uses
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Graphics,
  ComCtrls, DB, DBCtrls, DBGrids;
type
{ TABLSDBGrid }
  TABLSDBGrid = class(TDBGrid)
  private
    { Private declarations }
    FMouseWheel: Boolean;
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    procedure MouseWheelHandler(var Message: TMessage); override;
  published
    { Published declarations }
    property MouseWheel: Boolean read FMouseWheel write FMouseWheel
default True;
  end;
implementation
{ TABLSDBGrid }
constructor TABLSDBGrid.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FMouseWheel := True;
end;
procedure TABLSDBGrid.MouseWheelHandler(var Message: TMessage);
var
  D: Smallint;
begin
  if FMouseWheel then
  begin
    if Message.Msg = WM_MOUSEWHEEL then
    begin
      Message.Msg := WM_KEYDOWN;
      Message.LParam := 0;
      D := HiWord(Message.WParam);
      if D > 0 then
        Message.WParam := VK_UP
      else
        Message.WParam := VK_DOWN;
      Message.Result := 1;
      Self.Perform(Message.Msg, Message.WParam, Message.LParam);
    end;
  end
  else
    inherited MouseWheelHandler(Message);
end;
end.
===
Ho creato questa classe per poter man mano inserire nel controllo
discendente eventuali modifiche ed espansioni al comportamento standard
della DBGrid, oppure per correggerne i bug (come in questo caso).
Il codice di questo componente è molto semplice; la gestione della
rotellina viene abilitata da una proprietà MouseWheel che, per default,
è impostata a True.
Magari modifica il prefisso "ABLS" della unit e del componente con le
lettere che utilizzi normalmente per i componenti che riservi ad un uso
interno o personale.


Proverň grazie 1000 ciao ciao