AGB  ·  Datenschutz  ·  Impressum  







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

2 TEdits synchron scrollen

Ein Thema von 3_of_8 · begonnen am 14. Jun 2005 · letzter Beitrag vom 16. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#1

2 TEdits synchron scrollen

  Alt 14. Jun 2005, 18:11
Hallo.
Ich habe zwei TEdits, und das erste soll immer genausoweit gescrollt sein wie das zweite.

Ich habe bereits jede Menge Lösungen für RichEdits gefunden, aber keine für TEdits.
Auch mit SelStart geht es nicht wirklich.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: 2 TEdits synchron scrollen

  Alt 14. Jun 2005, 18:16
Frage missverstanden
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: 2 TEdits synchron scrollen

  Alt 14. Jun 2005, 18:21
Hallo,
Bei Edits kannst du zu seite scrollen, indem du
Edit2.SelStart := Edit1.SelStart immer wirder aufrufst.

Müsste eigentlich gehen ...

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: 2 TEdits synchron scrollen

  Alt 14. Jun 2005, 18:34
Soweit ich weiß geht das nur mit TRichEdit, denn nur das kennt EM_GETSCROLLPOS und EM_SETSCROLLPOS.

Kannst du keine TRichEdits als einfache TEdits "missbrauchen"?
Volker
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: 2 TEdits synchron scrollen

  Alt 14. Jun 2005, 21:21
@Florian Bernd: Hab ich schon probiert. Die beiden Edits sind trotzdem unterschiedlich gescrollt.

Das Programm wird nämlich ein Tipptrainer, edtRead ist die Vorlage, in edtWrite gibt man den Text ein. Darum sollte die Vorlage so weit wie das Eingabefeld gescrollt sein.

Also edtRead so weit wie edtWrite.

@Flocke: Ja, kann ich. Ich habe allerdings auch noch keine Lösung für RichEdits gefunden.

Die beiden Windows-Messages klingen interessant. Ich müsste praktisch von edtWrite die ScrollPos feststellen und edtRead um genau den gleichen Wert scrollen.

Erklärst du mir noch, welche Parameter ich angeben muss?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#6

Re: 2 TEdits synchron scrollen

  Alt 14. Jun 2005, 21:39
Zitat:
Ich habe bereits jede Menge Lösungen für RichEdits gefunden, aber keine für TEdits.
Zitat:
Ich habe allerdings auch noch keine Lösung für RichEdits gefunden.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: 2 TEdits synchron scrollen

  Alt 14. Jun 2005, 23:47
Sollte so aussehen (ungetestet):
Delphi-Quellcode:
const
  // Braucht mindestens ein RichEdit 3.0!
  {$EXTERNALSYM EM_GETSCROLLPOS}
  EM_GETSCROLLPOS = WM_USER + 221;
  {$EXTERNALSYM EM_SETSCROLLPOS}
  EM_SETSCROLLPOS = WM_USER + 222;

procedure GetRichEditScrollPos(Rich: TCustomRichEdit; var Pnt: TPoint);
begin
  Rich.Perform(EM_GETSCROLLPOS, 0, Integer(@Pnt));
end;

procedure SetRichEditScrollPos(Rich: TCustomRichEdit; const Pnt: TPoint);
begin
  Rich.Perform(EM_SETSCROLLPOS, 0, Integer(@Pnt));
end;
Allerdings brauchst du für die Meldungen mindestens ein RichEdit in der Version 3.0.

Wenn du auch noch informiert werden willst, wann das Control gescrollt wird, dann musst du eine abgeleitete Klasse erstellen (das geht schon in allen 32-Bit-Versionen von RichEdit):
Delphi-Quellcode:
type
  TScrollRichEdit = class(TRichEdit)
  private
    FOnVerticalScroll: TNotifyEvent;
    FOnHorizontalScroll: TNotifyEvent;
  protected
    procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
  published
    property OnVerticalScroll: TNotifyEvent read FOnVerticalScroll write FOnVerticalScroll;
    property OnHorizontalScroll: TNotifyEvent read FOnHorizontalScroll write FOnHorizontalScroll;
  end;

procedure TScrollRichEdit.CNNotify(var Message: TWMNotify);
begin
  case Message.NMHdr^.code of
    EN_VSCROLL:
      if Assigned(FOnVerticalScroll) then
        FOnVerticalScroll(Self);
    EN_HSCROLL:
      if Assigned(FOnHorizontalScroll) then
        FOnHorizontalScroll(Self);
    else
      inherited;
  end;
end;
Volker
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: 2 TEdits synchron scrollen

  Alt 15. Jun 2005, 17:54
@urbanbruhin:
Dumm formuliert von mir, ich weiß.

Also: Ich habe gefunden, wie man ein RichEdit scrollen kann, aber wie man das synchronisieren kann nicht.

@Flocke:
Danke, aber was ist pnt? Bzw. was muss ich dafür angeben?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: 2 TEdits synchron scrollen

  Alt 15. Jun 2005, 18:04
Pnt ist TPoint der die virtuellen Koordinaten der linken oberen Fensterecke des RichEdit in Relation zur linken oberen Ecke des Dokuments enthält. Stell dir dazu das Dokument z.B. als riesige Bitmap vor; dann ist der Punkt (Pnt.x, Pnt.y) der Punkt in der Bitmap, der in der linken oberen Fensterecke des RichEdit angezeigt wird.

Synchronisierung zweier RichEdits:

Delphi-Quellcode:
procedure Sync;
var x: TPoint;
begin
  GetRichEditScrollPos(RichEdit1, x);
  SetRichEditScrollPos(RichEdit2, x);
end;
Dieser Code würde die links oben angezeigte Ecke (die Scrollposition) von RichEdit2 auf die Position von RichEdit1 setzen. In deinem Beispiel wäre RichEdit2 die Vorgabe und RichEdit1 wäre das Eingabefenster.
Volker
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: 2 TEdits synchron scrollen

  Alt 15. Jun 2005, 18:08
Danke. Muss man erstmal verstehen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  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 11:35 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