Delphi-PRAXiS

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 2 Scrollbars gleichsetzen (https://www.delphipraxis.net/126385-2-scrollbars-gleichsetzen.html)

Tim-94 23. Dez 2008 10:41


2 Scrollbars gleichsetzen
 
Hi meine Frage ist, ob man die Scrollbars von zwei verschiedenen Memos bzw. RichEdits miteinander gleichsetzen kann?

Vielen Dank im Vorraus

Tim :wink:

Klaus01 23. Dez 2008 10:52

Re: 2 Scrollbars gleichsetzen
 
Hallo Tim,

hier ist ein Beispiel mit zwei RichEdit zu finden vielleicht kannst Du es an Deine Bedürfnisse anpassen.

Delphi-Quellcode:
//************************* Source for the TMyRichEdit component...

unit Unit1;

interface

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

type
  TMyRichEdit = class(TRichEdit)
    protected
      procedure OnWMHScroll(var Message : TMessage); message WM_HSCROLL;
      procedure OnWMVScroll(var Message : TMessage); message WM_VSCROLL;
      procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
    public
      SyncWithRichEdit : TRichEdit;
  end;

procedure Register;

implementation

uses
  RichEdit;

{ TMyRichEdit }

procedure TMyRichEdit.OnWMHScroll(var Message: TMessage);
begin
  SendMessage(SyncWithRichEdit.Handle, WM_HSCROLL, Message.WParam, Message.LParam);
end;

procedure TMyRichEdit.OnWMVScroll(var Message: TMessage);
begin
 SendMessage(SyncWithRichEdit.Handle, WM_VSCROLL, Message.WParam, Message.LParam);
 inherited;
end;

procedure TMyRichEdit.CNNotify(var Message: TWMNotify);
var
  Diff : Integer;
  c : integer;
begin
  Inherited;
  with Message do
    case NMHdr^.code of
      EN_SELCHANGE:
      begin
        Diff := SyncWithRichEdit.Perform(EM_GETFIRSTVISIBLELINE, 0, 0) -
                 Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
        c := abs(diff);
        while c > 0 do
          begin
            if diff < 0 then
              SyncWithRichEdit.perform(em_scroll, SB_LINEDOWN, 0)
             else
              SyncWithRichEdit.perform(em_scroll, SB_LINEUP, 0);
            dec(c);
          end;
      end;
    end;
end;


procedure Register;

begin
  RegisterComponents('Samples', [TMyRichEdit]);
end;

end.

//************************* Form to test it with - just put a TRichEdit and a TMyRichEdit on it
unit RicheditForm;

interface

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

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    MyRichEdit1: TMyRichEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyRichEdit1.SyncWithRichEdit := RichEdit1;
end;
Grüße
Klaus

Tim-94 23. Dez 2008 15:03

Re: 2 Scrollbars gleichsetzen
 
Das hilft mir leider nicht sehr weiter, da ich mit soetwas noch nicht viel Erfahrung habe!
Ich hoffe mir kann noch jemand weiterhelfen :o

Matze 23. Dez 2008 15:42

Re: 2 Scrollbars gleichsetzen
 
Hallo,

dieses Beispiel von SDC ist etwas einfacher: ...das Scrollen zweier RichEdits synchronisieren?

Grüße, Matze

Tim-94 23. Dez 2008 17:00

Re: 2 Scrollbars gleichsetzen
 
Jo Danke Matze das läuft perfekt! :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr.

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