![]() |
Sichtbaren Bereich im RichEdit-Feld abfragen?
Hallo,
gibt es eine Möglichkeit in einem RichEdit-Feld abzufragen, welche Zeile die erste sichtbare ist, wenn ich in der vertikalen scrollen kann? Und gibt es eine Möglichkeit auf ein Event Scrollen zuzugreifen? Vielen Dank! Gruß MaX |
Re: Sichtbaren Bereich im RichEdit-Feld abfragen?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var n,lp,wp : integer; begin n := SendMessage(RichEdit1.Handle,EM_GETFIRSTVISIBLELINE,wp,lp); Caption :=RichEdit1.Lines.Strings[n]; end; |
Re: Sichtbaren Bereich im RichEdit-Feld abfragen?
Eine On...-Property mit der man einen entsprechenden Event-Handler fürs Scrollen pointen könnte gibt es nicht. Nichtsdestoweniger kannst du aber in der WndProc des Controls nach einer WM_VScroll- bzw. einer WM_HScroll-Message Ausschau halten und dann darauf reagieren. Hilfreich hierfür wären dann z.B. auch die Api-Funktionen GetScrollInfo/SetScrollInfo.
|
Re: Sichtbaren Bereich im RichEdit-Feld abfragen?
also - danke schon mal für diesen Tip
SendMessage(RichEdit1.Handle,EM_GETFIRSTVISIBLELIN E,wp,lp); das klappt wunderbar! :) Den zweiten versteh ich aber leider nicht so richtig. Wie kann ich in einer WndProc eines Controls nach WM_VScroll ausschau halten? - Wo kann ich da suchen? In der Delphi-Hilfe? Oder auf der Microsoft-Seite? |
Re: Sichtbaren Bereich im RichEdit-Feld abfragen?
Ok, wahrscheinlich ist die Microsoft-Seite der richtige Weg. Kann mir jetzt noch jemand erklären, wie ich eine Message, wie WM_VSCROLL von Windows abfangen kann?
thx! Gruß MaX |
Re: Sichtbaren Bereich im RichEdit-Feld abfragen?
Versuch es so...
HINWEIS !! Nur wenn du es(Scrolbar) mit dem Mause direkt anklickst und bewegst dann wird auch ein ensprechendes Ereignis aufgerufen. Wenn du es mit dem MouseWheel "scrollst" dann ist das ein ganz anderes Ereignis... Um mein Beispiel zu benutzen brauchst du ein TRichEdit mit Text (alles im Design modus gemacht), und 2 TLabel-s
Delphi-Quellcode:
type
TMyRichEdit = class(TRichedit) private procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL; procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL; end; TForm1 = class(TForm) RichEdit1: TRichEdit; Label1: TLabel; Label2: TLabel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } a:TMyRichEdit; end; var Form1: TForm1; implementation {$R *.dfm} procedure TMyRichEdit.WMHScroll(var Message: TWMHScroll); begin Form1.Label1.Caption :='Horizontal scroll ist im gange'+inttostr(random(100)); inherited; end; procedure TMyRichEdit.WMVScroll(var Message: TWMVScroll); begin Form1.Label2.Caption :='Vertical scroll ist im gange'+inttostr(random(100)); inherited; end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; a := TMyRichEdit.Create(self); with a do begin Parent := Self; Visible := true; Width := 100; Height :=100; Left := 20; Lines.Assign(RichEdit1.Lines); ScrollBars := ssBoth; WordWrap := False; end; end; procedure TForm1.FormDestroy(Sender: TObject); begin a.Free; end; |
Re: Sichtbaren Bereich im RichEdit-Feld abfragen?
wow - danke für die schnelle und so ausführliche Antwort - hast mir sehr viel weitergeholfen!
Gruß - MaX |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 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