![]() |
Zwei Memofelder gleichzeitig scrollen
Hallo ich versuche gerade zwei Memofelder gleichzeitig zu scrollen, allerdings scheitert es schon an einem :(
Irgendwie bekomme ich es nicht hin, dass das scrollen und der Text synchron laufen. Der Scrollbalken ist immer zu früh unten, obwohl die Max Position der Scrollbar genau die Zeilenanzahl des Textes besitzt. Auch klappt das Scrollen nur wenn man auf die Pfeilbuttons der Scrollbar klickt oder vor und hinter den eigentlichen Scrollbalken. Hier ist mal der Code:
Delphi-Quellcode:
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer); begin case ScrollCode of scLineUp: Memo1.Perform(EM_LINESCROLL, 0, -1); scLineDown: Memo1.Perform(EM_LINESCROLL, 0, 1); scPageUp: Memo1.Perform(EM_LINESCROLL, 0, -1); scPageDown: Memo1.Perform(EM_LINESCROLL, 0, 1); scTop: Memo1.Perform(EM_LINESCROLL, 0, -1); scBottom: Memo1.Perform(EM_LINESCROLL, 0, Memo1.Lines.Count); scEndScroll: Memo1.Perform(EM_LINESCROLL, 0, Memo1.Lines.Count-ScrollBar1.Position); end; end; |
Re: Zwei Memofelder gleichzeitig scrollen
Delphi-Quellcode:
object Memo1: TMemo
Lines.Strings = ( 'Memo1' '2' '3' ... '29') ScrollBars = ssVertical end object ScrollBar1: TScrollBar Kind = sbVertical PageSize = 10 // im Programm anpassen Max = 100 // im Programm anpassen Min = 0 // im Programm anpassen OnScroll = ScrollBar1Scroll end
Delphi-Quellcode:
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer); var TopLineIndex: Integer; begin case ScrollCode of scLineUp: Memo1.Perform(EM_SCROLL, SB_LINEUP, 0); scLineDown: Memo1.Perform(EM_SCROLL, SB_LINEDOWN, 0); scPageUp: Memo1.Perform(EM_SCROLL, SB_PAGEUP, 0); scPageDown: Memo1.Perform(EM_SCROLL, SB_PAGEDOWN, 0); scTrack: begin TopLineIndex := Memo1.Perform(EM_GETFIRSTVISIBLELINE, 0, 0); Memo1.Perform(EM_LINESCROLL, 0, ScrollPos - TopLineIndex); end; end; end; |
Re: Zwei Memofelder gleichzeitig scrollen
Hallo Panthrax,
danke für deine Antwort, der eigentliche Scrollbalken wird jetzt angesprochen. Aber leider läuft es noch nicht synchron. Wo genau im Prgramm muss ich die Werte: PageSize = 10 // im Programm anpassen Max = 100 // im Programm anpassen Min = 0 // im Programm anpassen anpassen? Und muss Memo1 zusätlich zur Scrollbar1noch eine eigene haben? |
Re: Zwei Memofelder gleichzeitig scrollen
Die Memos müssten doch synchron laufen, wenn die gezeigten Befehle für Memo 2 dupliziert werden!?
Der obere Kasten zeigt die Textdarstellung der Objekte, die darin enthaltenen Eigenschaften können im Objektinspektor geändert werden. Die Werte müssen entsprechend der synchron zu scrollenden Memos gesetzt werden. Sinnvollerweise gelten diese Einstellungen für beide Memos. Scrollen von Min (für die erste Zeile) bis Max (für die letzte Zeile), dabei sind jeweils PageSize Zeilen in jedem Memo sichtbar. Ich denke, die (ersetzten) Scrollbalken der Memos sind nicht notwendig, hängt aber wiederum davon ab, was gewollt ist. Werden sie angezeigt, können die Memos wieder unabhängig voneinander gescrollt werden. |
Re: Zwei Memofelder gleichzeitig scrollen
Hallo,
ich meinte mit synchron, dass der Scrollbalken genau mit dem Zeilenende unten ankommt. Bis jetzt teste ich nur an einem Memo, weil das wie gesagt noch nicht klappt. Also der Scrollbalken ist immer zu spät unten, also nach dem das Textende erreicht wurde. |
Re: Zwei Memofelder gleichzeitig scrollen
Schon Min, Max und PageSize eingestellt?
|
Re: Zwei Memofelder gleichzeitig scrollen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Panthrax,
ich hab das ganze mal als kleines Programm geschrieben und für die Pagesize einzustellen, die Formel geholt, die in de Hilfe angegeben war. Vielleicht werden meine Fehler so ersichtlicher. |
Re: Zwei Memofelder gleichzeitig scrollen
Liste der Anhänge anzeigen (Anzahl: 1)
Das Projekt im Anhang zeigt, wie es gehen könnte. Es ist nicht perfekt, und um ehrlich zu sein, glaube ich, der Teufel steckt hier noch richtig im Detail. Diese Fehler sind bekannt:
* Kommunikation zwischen Memo und Laufleiste ist unvollständig. Es gibt keine Positionsanpassung, wenn im Memo am Ende geschrieben wird. * Die Berechnung der Werte PageSize und Max stimmt nicht, wenn der Text das Memo nicht ausfüllt. * Wenn im Memo geschrieben wird, verhält sich die Laufleiste seltsam. |
Re: Zwei Memofelder gleichzeitig scrollen
Hallo Panthrax,
danke für die Mühe die du dir gemacht hast, das funktioniert ja schon ziemlich gut. Ist es eigentlich auch möglich ein Memo abzuleiten und dann die eingebaute Scrollbar so zu verändern, dass sie 2 Memos anspricht? |
Re: Zwei Memofelder gleichzeitig scrollen
Liste der Anhänge anzeigen (Anzahl: 1)
Argh, stimmt, dass mir die Idee nicht gekommen ist... Manchmal lässt man sich durch Fragesteller aber auch sowas von irritieren... :duck: :spin2:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 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