Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
Delphi 7 Professional
|
Re: RichEdit: Mitscrollen bei Änderung verhindern
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
|
|
Zitat
|