Einzelnen Beitrag anzeigen

taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#8

Re: RichEdit: Mitscrollen bei Änderung verhindern

  Alt 1. Mai 2009, 19:24
Hmm, dann versuche es vielleicht mal hiermit:

Delphi-Quellcode:

procedure TreBase.InitCF2(var CF2:TCharFormat2;Mask:DWord);
begin
  FillChar(CF2,SizeOf(CF2),0);
  CF2.cbSize:=SizeOf(CF2);
  CF2.dwMask:=Mask
end;

function TreBase.GetVerScrollbarPos(RE:TRichEdit):Integer;
begin
  Result:=GetScrollPos(RE.Handle,SB_Vert);
end;

procedure TreBase.SetVerScrollbarPos(RE:TRichEdit;Position:Integer);
begin
  SetScrollPos(RE.Handle,SB_Vert,Position,true);
  RE.Perform(WM_VScroll,Position shl 16+SB_ThumbTrack,0)
end;

procedure TreBase.SetCharFormat(RE:TRichEdit;var CF2:TCharFormat2;Start,Length:Integer);
var OrgRange,SelRange : TCharRange;
    TmpPos : Integer;
begin
  TmpPos:=GetVerScrollbarPos(RE); // setcharformat modifies topline ?!?!

  SelRange.cpMin:=Start;
  SelRange.cpMax:=Start+Length;
  SendMessage(RE.Handle,EM_ExGetSel,0,LParam(@OrgRange));
  SendMessage(RE.Handle,EM_ExSetSel,0,LParam(@SelRange));
  SendMessage(RE.Handle,EM_SetCharFormat,SCF_Selection,LParam(@CF2));
  SendMessage(RE.Handle,EM_ExSetSel,0,LParam(@OrgRange));

  SetVerScrollbarPos(RE,TmpPos) // so we have to restore topline and scrollbar
end;

procedure TreBase.SetTextColor(RE:TRichEdit;Start,Length:Integer;Color:TColor);
var CF2 : TCharFormat2;
begin
  InitCF2(CF2,CFM_Color);
  CF2.crTextColor:=Color;
  SetCharFormat(RE,CF2,Start,Length)
end;
SetTextColor() ist die für dich entscheidende Methode, die übrigen werden nur intern verwendet.
Ralph
  Mit Zitat antworten Zitat