Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Memo Scrollbar Events (https://www.delphipraxis.net/169897-memo-scrollbar-events.html)

VkPenguin 20. Aug 2012 11:17

Memo Scrollbar Events
 
Guten Tag zusammen,
ich arbeite an einem neuen Programm, bei dem ich mehrere Memos habe. Nur eines der Memos hat eine Scrollbar (Vertikal), da alle Memos synchron scrollen sollen. Ich habe bereits im Internet danach gesucht und Befehle wie diesen hier

Delphi-Quellcode:
SendMessage(Memo1.Handle,WM_VSCROLL,SB_LINEDOWN,0)
gefunden, die sich wohl gut eignen, um die Befehle an die anderen Memos weiterzugeben. Nur: Ich finde im Objektmanager die Events nicht, die stattfinden, wenn der User mit dem Mausrad scrollt, die Scrollbar bewegt oder auf die Pfeile klickt. Meine Frage ist also, ob jemand eine Idee hat, wie ich an diese Events am besten drankomme. Oder bin ich auf dem völlig falschen Weg?

s.h.a.r.k 20. Aug 2012 11:23

AW: Memo Scrollbar Events
 
Kann folgendes leider gerade nicht für TMemo testen, aber folgender Code funktioniert für eine TScrollBox. Vielleicht kannst es ja auch auf dein Memo anwenden.
Delphi-Quellcode:
TMyScrollBox = class(TScrollBox)
private
  procedure WMHScroll(var Msg: TMessage); message WM_HSCROLL;
  procedure WMVScroll(var Msg: TMessage); message WM_VSCROLL;
end;


procedure TMyScrollBox.WMHScroll(var Msg: TMessage);
begin
  // Hier dein Code

  inherited;
end;

procedure TMyScrollBox.WMVScroll(var Msg: TMessage);
begin
  // Hier dein Code

  inherited;
end;

VkPenguin 20. Aug 2012 17:37

AW: Memo Scrollbar Events
 
Hi, danke für deine Antwort. Habe das mal ausprobiert, es hat aber leider nicht geklappt. Bin mir aber auch nicht sicher, ob ich das so ganz verstanden hab. Aber müsste es nicht einfach mit der Position der Scrollbalken des Memos gehen? Eine Art On-Change-Event...? Egal, ob man mit Mausrad oder den Buttons scrollt, die Position des Balken ändert sich immer. Wenn man das irgendwie abfangen könnte... Weiß jemand ob/wie das möglich ist?

DeddyH 20. Aug 2012 18:02

AW: Memo Scrollbar Events
 
Auf die Schnelle aus dem Hut:
Delphi-Quellcode:
type
  TScrollChangeEvent = procedure(Sender: TObject;
    const ScrollCode, Pos: SmallInt) of object;

  TMemo = class(StdCtrls.TMemo)
  private
    FOnHorzScroll: TScrollChangeEvent;
    FOnVertScroll: TScrollChangeEvent;
    procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;
    procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL;
  public
    property OnHorzScroll: TScrollChangeEvent read FOnHorzScroll write FOnHorzScroll;
    property OnVertScroll: TScrollChangeEvent read FOnVertScroll write FOnVertScroll;
  end;

  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure DoOnHorzScroll(Sender: TObject; const ScrollCode, Pos: SmallInt);
    procedure DoOnVertScroll(Sender: TObject; const ScrollCode, Pos: SmallInt);
  public
    { Public-Deklarationen }
  end;

...

procedure TMemo.WMHScroll(var Msg: TWMHScroll);
begin
  if Assigned(FOnHorzScroll) then
    FOnHorzScroll(self, Msg.ScrollCode, Msg.Pos);
  inherited;
end;

procedure TMemo.WMVScroll(var Msg: TWMVScroll);
begin
  if Assigned(FOnVertScroll) then
    FOnVertScroll(self, Msg.ScrollCode, Msg.Pos);
  inherited;
end;

procedure TForm1.DoOnHorzScroll(Sender: TObject; const ScrollCode,
  Pos: SmallInt);
begin
  ShowMessage('Horizontal: ' + IntToStr(Pos));
end;

procedure TForm1.DoOnVertScroll(Sender: TObject; const ScrollCode,
  Pos: SmallInt);
begin
  ShowMessage('Vertikal: ' + IntToStr(Pos));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.OnHorzScroll := DoOnHorzScroll;
  Memo1.OnVertScroll := DoOnVertScroll;
end;

lbccaleb 20. Aug 2012 18:34

AW: Memo Scrollbar Events
 
Liste der Anhänge anzeigen (Anzahl: 1)
Aus dem Forum umgewandeltes Bsp. von einem RichEdit:

VkPenguin 20. Aug 2012 20:59

AW: Memo Scrollbar Events
 
Hi, vielen Dank für die Hilfe. Das mag vielleicht eine Anfängerfrage sein, aber in der Demo wird das erweiterte MyMemo ja mit Memo1 synchronisiert. Wenn die Unit in meine Anwendung einbauen möchte, kann ich das Memo aber nicht einfach auf meine Memos zur Synchronisation umstellen, da es ja zwei verschiedene Units sind. Ich könnte das natürlich in meine Hauptunit einbauen, aber das ist denke ich eher eine Bastellösung. Hat jemand vielleicht einen Link zu einem Tutorial für soetwas oder kann mir einen Tipp geben, wie sowas geht? Würde das gerne "ein für alle mal" lernen, damit ich beim nächsten Mal nicht direkt wieder fragen muss...

VkPenguin 21. Aug 2012 21:32

AW: Memo Scrollbar Events
 
Hallo nocheinmal,
hab es inzwischen selbst rausbekommen, jetzt funktioniert alles, dankeschön nocheinmal für eure Hilfe!

Holloster 17. Jun 2013 12:03

AW: Memo Scrollbar Events
 
Hallo VkPenguin,

könntest du vielleicht erklären oder mir den Programmteil für das synchrone scrollen von mehreren memos zukommen lassen ?

Ich bräuchte es für ein Schulprojekt, ich lese txt-Dokumente in mehrere memos ein und möchte das wenn ich eins nach unten scrolle eben die 3 anderen in selber weise scrollen.

Vielen dank schonmal im voraus. =)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 Uhr.

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