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 Problem mit SendMessage, RichEdit und WinNT (https://www.delphipraxis.net/30337-problem-mit-sendmessage-richedit-und-winnt.html)

Helmi 23. Sep 2004 16:28


Problem mit SendMessage, RichEdit und WinNT
 
Hallo,

ich hab folgendes Problem:

mit dem Code:
Code:
//RichEdit ganz nach unten scrollen
SendMessage(RichEdit_Infos.Handle, WM_VSCROLL, SB_BOTTOM, 0);
will ich ein RichEdit (RichEdit_Infos) ganz nach unten scrollen

Beim Testen unter WinXP funktioniert das ganze auch problemlos.

Aber wenn ich das unter WinNT ausprobiere, dann wird zwar nach
unten gescrollt, aber ich seh keine Einträge mehr.

Erst wenn ich den Scrollbalken kurz mit der Maus anklicke und
bewege sehe ich die Einträge.

Weiss jemand Rat warum das so ist und wie man das ändern kann,
dass es genau so geht wie bei WinXP?

mfg
Helmi

gekmihesg 23. Sep 2004 16:34

Re: Problem mit SendMessage, RichEdit und WinNT
 
probier mal
richedit1.Perform(EM_SCROLLCARET, 0, 0);

Sprint 23. Sep 2004 18:23

Re: Problem mit SendMessage, RichEdit und WinNT
 
Zitat:

Zitat von Helmi
will ich ein RichEdit (RichEdit_Infos) ganz nach unten scrollen

Zitat:

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.

Luckie 23. Sep 2004 20:01

Re: Problem mit SendMessage, RichEdit und WinNT
 
Zitat:

Zitat von Helmi
Erst wenn ich den Scrollbalken kurz mit der Maus anklicke und
bewege sehe ich die Einträge.

Weiss jemand Rat warum das so ist und wie man das ändern kann,
dass es genau so geht wie bei WinXP?

Lös mal explizit ein Repaint oder Refresh des RichEdits aus.

Helmi 23. Sep 2004 21:33

Re: Problem mit SendMessage, RichEdit und WinNT
 
ein refresh bringt nix - schon ausprobiert

jfheins 23. Sep 2004 21:37

Re: Problem mit SendMessage, RichEdit und WinNT
 
Sonst probier mal
Delphi-Quellcode:
Perform(WM_VSCROLL, SB_BOTTOM,0);
und http://www.swissdelphicenter.ch/de/showcode.php?id=439

DP-Maintenance 24. Sep 2004 19:07

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Windows 9x / ME / 2000 / XP / 2003" nach "VCL-Komponenten und Controls" verschoben.
Hauptsächlich ein Programmierproblem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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