Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Sichtbaren Bereich im RichEdit-Feld abfragen? (https://www.delphipraxis.net/40627-sichtbaren-bereich-im-richedit-feld-abfragen.html)

Mr. No 18. Feb 2005 12:34


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

sniper_w 18. Feb 2005 16:12

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;

TStringlist 18. Feb 2005 16:46

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.

Mr. No 18. Feb 2005 23:02

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?

Mr. No 18. Feb 2005 23:09

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

sniper_w 18. Feb 2005 23:21

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;

Mr. No 18. Feb 2005 23:34

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 16:48 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