Einzelnen Beitrag anzeigen

Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#3

Re: Problem mit SendMessage, RichEdit und WinNT

  Alt 23. Sep 2004, 19:23
Zitat von Helmi:
will ich ein RichEdit (RichEdit_Infos) ganz nach unten scrollen
Zitat von Sprint:
Wie kann ich zur ersten oder letzten Zeile in einem TMemo / TRichEdit scrollen?

Mit der Nachricht EM_LINESCROLL können wir TMemo bzw. TRichEdit anweisen Zeilen aufwärts bzw. abwärts zu scrollen.
Die aktuelle Zeilenposition können wir mit der Nachricht EM_LINEFROMCHA ermitteln. Als Parameter müssen wir die laufende Position des Cursors übergeben. Das machen wir mit TCustomMemo.SelStart.
EM_LINESCROLL wird mit der Anzahl der zu scrollenden Zeilen aufgerufen. Ein positiver Wert scrollt nach unten und ein negativer Wert nach oben.

Delphi-Quellcode:
unit Scrolling_Unit;

interface

uses
  StdCtrls, Messages, ComCtrls;

procedure ScrollToFirstLine(AMemo: TMemo); overload;
procedure ScrollToFirstLine(ARichEdit: TRichEdit); overload;
procedure ScrollToLastLine(AMemo: TMemo); overload;
procedure ScrollToLastLine(ARichEdit: TRichEdit); overload;

implementation

// -----------------------------------------------------------------------------

procedure Scroll(AObject: TCustomMemo; ToFirstLine: Boolean);
var
  CurrentLine: Integer;
  Count: Integer;
begin

  with AObject do
  begin
    CurrentLine := Perform(EM_LINEFROMCHAR, SelStart, 0);
    Inc(CurrentLine);

    if ToFirstLine then
      Count := Lines.Count - CurrentLine
    else
      Count := -Lines.Count - CurrentLine;

    Perform(EM_LINESCROLL, 0, Count);
  end; {end with}

end; {end procedure}

// -----------------------------------------------------------------------------

procedure ScrollToFirstLine(AMemo: TMemo);
begin

  Scroll(AMemo, True);

end; {end procedure}

// -----------------------------------------------------------------------------

procedure ScrollToFirstLine(ARichEdit: TRichEdit);
begin

  Scroll(ARichEdit, False);

end; {end procedure}

// -----------------------------------------------------------------------------

procedure ScrollToLastLine(AMemo: TMemo);
begin

  Scroll(AMemo, False);

end; {end procedure}

// -----------------------------------------------------------------------------

procedure ScrollToLastLine(ARichEdit: TRichEdit);
begin

  Scroll(ARichEdit, False);

end; {end procedure}

// -----------------------------------------------------------------------------

end.
Ist zwar schon zweieinhalb Jahre her, als ich das geschrieben habe. Sollte aber wohl noch funktionieren.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat