Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zwei Memofelder gleichzeitig scrollen (https://www.delphipraxis.net/149077-zwei-memofelder-gleichzeitig-scrollen.html)

DSCHUCH 17. Mär 2010 21:06

Re: Zwei Memofelder gleichzeitig scrollen
 
da fehlen die units, nur das dpr drin ^^

Panthrax 18. Mär 2010 09:55

Re: Zwei Memofelder gleichzeitig scrollen
 
Liste der Anhänge anzeigen (Anzahl: 1)
:wiejetzt: Junge, junge, so langsam glaube ich, das Thema ist verhext...

Ginko 19. Mär 2010 18:33

Re: Zwei Memofelder gleichzeitig scrollen
 
Hallo Panthrax, so klappt das natürlich noch besser :thumb: danke.
Ich habe mal die Scrollbar des Partner Memos rausgeholt und die MouseWheel Prozedur hinzugefügt, welche auch auf das Mausrad reagieren zu scheint, wenn nur die Scrollbar des TMyMemo vorhanden ist. Allerdings weiß ich nicht wie ich jetzt dem Partner Memo mitteilen kann, dass es das selbe macht wie das Hauptmemo. So wie ich es gemacht habe klappt es jedenfalls nicht, man sieht aber, dass das andere Memo reagiert.
Hier mal der erweiterte Quelltext:

Delphi-Quellcode:
unit Unit3;

interface

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

type
  TMyMemo = class(TMemo)
    private
    FPartner: TWinControl;
    public
    property Partner: TWinControl read FPartner write FPartner;
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
    procedure MouseWheelHandler(var Message: TMessage); reintroduce; message WM_MouseWheel;
  end;


  TForm3 = class(TForm)
    Memo1: TMemo;
    StaticText1: TStaticText;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

{ TMyMemo }


procedure TMyMemo.WMVScroll(var Message: TWMVScroll);
begin
  inherited;
  if Assigned(FPartner) then
    FPartner.Dispatch(Message);
end;

procedure TMyMemo.MouseWheelHandler(var Message: TMessage);
begin
  inherited;
  SendMessage(FPartner.Handle,WM_VSCROLL,SB_VERT,0);
end;

{ TForm3 }

procedure TForm3.FormCreate(Sender: TObject);
var
  Memo: TMyMemo;
begin
  with TMyMemo.Create(Self) do
  begin
    Parent := Self;
    Left := 3;
    Top := 8;
    Width := 185;
    Height := 89;
    ScrollBars := ssVertical;
    Lines.Text := Memo1.Lines.Text;
    Partner := Memo1;
  end;
end;

end.

Panthrax 19. Mär 2010 20:04

Re: Zwei Memofelder gleichzeitig scrollen
 
So geht's:
Delphi-Quellcode:
type
  TMyMemo = class(TMemo)
    public
    procedure WMMouseWheel(var Message: TWMMouseWheel); message WM_MOUSEWHEEL;
  end;

{ TMyMemo }

procedure TMyMemo.WMMouseWheel(var Message: TWMMouseWheel);
begin
  inherited;
  if Assigned(FPartner) and (Message.Result = 1) then
  begin
    Message.Result := 0;
    FPartner.Dispatch(Message);
  end;
end;
Die Nachrichten möglichst originär weiterreichen. Und die Methode MouseWheelHandler besser nicht verwenden. Die geerbte Implementierung wird nämlich auch von der Methode TControl.WMMouseWheel aufgerufen, der ursprünglichen Empfängerin der Nachricht. Also besser dort ansetzen, dann ist die Nachrichtenverarbeitung für beide Memos gleich.

Ginko 19. Mär 2010 20:21

Re: Zwei Memofelder gleichzeitig scrollen
 
Leider klappt es nur wenn beide Felder eine Scrollbar haben, merkwürdig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz