Announcement

Collapse
No announcement yet.

Tscrollbar mit Tastenrad der Maus bewegen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tscrollbar mit Tastenrad der Maus bewegen

    Ich möchte die Tscrollbar bzw. die Scrollleiste von herkömmlichen Komponenten mit dem Tastenrad der Maus bewegen. Gibt es einen speziellen Treiber? Oder stellt mir jemand die Tscrollbar-Kompontente mit onWheel-Ereignis zur Verfügung? Oder gibts noch eine andere Möglichkeit?
    Danke und Gruß
    Klaus

  • #2
    Hallo,

    das folgende Beispiel (Delphi 3.02) demonstriert, wie das Tastenrad (am Beispiel der Microsoft IntelliMouse) ausgewertet werden kann:
    <pre>
    unit IntelliMouseFrm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls;

    type
    TFormMain = class(TForm)
    Memo1: TMemo;
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    BitBtnClose: TBitBtn;
    ListView1: TListView;
    procedure BitBtnCloseClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    private
    { Private-Deklarationen }
    FWMMouseWheel : Integer; // Ergebnis von RegisterWindowMessage
    FWMCount : Integer; // Anzahl der eingetroffenen Botschaften
    FzDelta : Integer; // Info über aktuelle Zeile
    procedure WndProc(var Message: TMessage); override;
    procedure WMMouseWheel(var Message: TMessage);
    message WM_MOUSEWHEEL;
    public
    { Public-Deklarationen }
    end;

    var
    FormMain: TFormMain;

    implementation

    {$R *.DFM}

    (* Bei Programmstart wird geprüft, welche Win32-Version vorliegt.
    Zur Vereinfachung geht das Programm von den folgenden Vor-
    aussetzungen aus:
    a) falls Windows NT, handelt es sich mindestens um 4.0
    b) falls kein Windows NT, ist Windows 95 auf dem Rechner.
    Soll exakter zwischen den Versionen unterschieden werden, bzw.
    muß mit Windows 98 gerechnet werden, sollte anstelle der
    Delphi-Systemkonstante »Win32Platform« die Win32-Version direkt
    über die Win32-API-Funktion »GetVersionEx« ermittelt werden. *)

    procedure TFormMain.FormCreate(Sender: TObject);
    resourcestring
    cMsg1 = '%s: MouseWheel-Botschaftswert = $%4x';
    cMsg2 = 'WM_MOUSEWHEEL-Botschaftswert = $%s';
    var
    sVer : String;
    begin
    if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then begin
    // Windows 95: Botschaftwert zur Laufzeit auslesen
    FWMMouseWheel := RegisterWindowMessage('MSWHEEL_ROLLMSG');
    sVer := 'Windows 95';
    end else begin
    // Windown NT 4.0: Botschaftswert aus Konstante übernehmen
    FWMMouseWheel := WM_MOUSEWHEEL;
    // ist überhaupt eine IntelliMouse angeschlossen?
    if Boolean(GetSystemMetrics(SM_MOUSEWHEELPRESENT))
    then sVer := 'Windows NT (4.0)'
    else sVer := 'Windows NT (4.0). Sorry - keine IntelliMouse!';
    end;
    with StatusBar1 do begin
    // tatsächlich ausgewertete Botschaft
    Panels[0].Text := Format(cMsg1, [sVer, FWMMouseWheel]);
    // Wert der vordefinierten Botschaft WM_MOUSEWHEEL
    Panels[1].Text := Format(cMsg2, [IntToHex(WM_MOUSEWHEEL,4)]);
    end;
    end;

    procedure TFormMain.WMMouseWheel(var Message: TMessage);
    begin
    inherited;
    // Dies ist unter Windows95 niemals sichtbar!
    ShowMessage('Die Botschaft WM_MOUSEWHEEL ist eingetroffen!');
    end;

    procedure TFormMain.WndProc(var Message: TMessage);
    var
    zDelta : SmallInt;
    begin
    // nur die MouseWheel-Botschaft auswerten
    if (Message.Msg = FWMMouseWheel) then begin
    Inc(FWMCount);
    // Wurde das Rad vor- oder zurückgedreht ?
    zDelta := HiWord(Message.wParam);
    if zDelta < 0 then begin
    // -1 = eine Zeile zurück
    PostMessage(Memo1.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
    Inc(FzDelta);
    end else begin
    // 0 = eine Zeile vor
    PostMessage(Memo1.Handle, WM_VSCROLL, SB_LINEUP, 0);
    Dec(FzDelta);
    end;
    // das Ganze optisch zur Kontrolle anzeigen
    with ListView1 do begin
    Items[0].SubItems[0] := IntToStr(FWMCount);
    Items[2].SubItems[0] := IntToStr(FzDelta);
    Items[4].SubItems[0] := IntToStr(LoWord(Message.lParam));
    Items[5].SubItems[0] := IntToStr(HiWord(Message.lParam));
    end;
    end;
    inherited;
    end;

    procedure TFormMain.BitBtnCloseClick(Sender: TObject);
    begin
    Close
    end;

    end.
    </pre>
    &#10

    Comment

    Working...
    X