AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Memofelder gleichzeitig scrollen

Ein Thema von Ginko · begonnen am 13. Mär 2010 · letzter Beitrag vom 19. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#1

Zwei Memofelder gleichzeitig scrollen

  Alt 13. Mär 2010, 16:56
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;
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#2

Re: Zwei Memofelder gleichzeitig scrollen

  Alt 14. Mär 2010, 00:15
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;
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Zwei Memofelder gleichzeitig scrollen

  Alt 14. Mär 2010, 11:51
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?
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#4

Re: Zwei Memofelder gleichzeitig scrollen

  Alt 14. Mär 2010, 17:36
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.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Zwei Memofelder gleichzeitig scrollen

  Alt 14. Mär 2010, 18:17
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.
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#6

Re: Zwei Memofelder gleichzeitig scrollen

  Alt 14. Mär 2010, 18:21
Schon Min, Max und PageSize eingestellt?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Zwei Memofelder gleichzeitig scrollen

  Alt 15. Mär 2010, 18:37
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.
Angehängte Dateien
Dateityp: zip memo__scrollbar_577.zip (200,5 KB, 21x aufgerufen)
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#8

Re: Zwei Memofelder gleichzeitig scrollen

  Alt 16. Mär 2010, 12:28
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.
Angehängte Dateien
Dateityp: rar laufleiste_109.rar (300,3 KB, 33x aufgerufen)
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Zwei Memofelder gleichzeitig scrollen

  Alt 16. Mär 2010, 18:34
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?
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#10

Re: Zwei Memofelder gleichzeitig scrollen

  Alt 17. Mär 2010, 12:02
Argh, stimmt, dass mir die Idee nicht gekommen ist... Manchmal lässt man sich durch Fragesteller aber auch sowas von irritieren...
Angehängte Dateien
Dateityp: rar laufleiste__nachrichtendruplizierung_150.rar (217 Bytes, 53x aufgerufen)
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 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