Einzelnen Beitrag anzeigen

Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#1

Interessantes Problem mit Scroll und Sendmessage

  Alt 21. Apr 2010, 00:19
Es ist eine Form mit 2 Memo Komponenten, beide haben etwa 50 Zeilen Text im Design time.

Hier erstmals der Code.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  protected
    procedure WndProc(var Msg: TMessage); virtual;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  _OldProc: TWndMethod;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  _OldProc := Memo1.WindowProc;
  Memo1.WindowProc := WndProc;
end;

procedure TForm1.WndProc(var msg: TMessage);
begin
  case msg.Msg of
    WM_VSCROLL: SendMessage(Memo2.Handle, WM_VSCROLL,
        TWMVScroll(msg).ScrollCode, TWMVScroll(msg).Pos);
    WM_MOUSEWHEEL:
    begin SendMessage(Memo2.Handle, WM_VSCROLL,
        TWMVScroll(msg).ScrollCode, TWMVScroll(msg).Pos);
         caption := timetostr(now);
    end;
  end;
  _OldProc(msg);
end;

end.
Wenn man mit dem Mausrad im Memo1 Scrollt wird auch Memo2 gescrollt.

Alles funktioniert auf meinem PC, Delphi 5 + Windows 7 x64.

Ich schickte die Exe zu einem Freund (Windows 7 32 bit) und dort funktioniert es nicht und zwar das zweite Memo scrollt immer nach oben, d.h. egal ob ich nach oben oder unten links mit dem Mausrad scrolle, das rechte Memo bewegt sich immer nur nach oben!

Ich machte zwei weitere Tests unter VMWare mit WindowsXP 32bit und Windows7 64bit und in beiden VMs funktioniert es nicht richtig, d.h. das rechte Memo scrollt wieder nur nach oben!

Nach etwas mehr Untersuchung stelle ich fest dass auf meinem PC beim Scrollen mit dem Mausrad im Memo WM_VSCROLL ausgelöst wird, auf dem PC des Freundes und in beiden VMs wird hingegen beim Scrollen mit dem Mausrad WM_MOUSEWHEEL ausgelöst und da geht dann was bei der Übertragung zum zweiten Memo schief.

Hoffe jemand hat eine Vermutung was hier los ist!
  Mit Zitat antworten Zitat