Hi Sebastian,
diesen Quellcode benutze ich in meiner RTF-Form (ist von den Demo abgeleitet).
Im Gegensatz zum Demo-Code werden hier alle Style richtig angewandt und kombiniert.
Für dich sollte es möglich sein die grundsätzliche Technik abzuleiten.
Delphi-Quellcode:
procedure TFRtfForm.SetStyle(lSet: Boolean; xStyle: TFontStyles);
var
i : integer;
nStart : integer;
nLength : integer;
xMerkStyle: TFontStyles;
nStartMerker : integer;
lCopy : Boolean;
edText3 : TRxRichEdit;
begin
bUpdating := True;
try
nStart := edText.SelStart;
nLength := edText.SelLength;
if nLength = 0 then
begin
if lSet then
edText.SelAttributes.Style := edText.SelAttributes.Style + xStyle
else edText.SelAttributes.Style := edText.SelAttributes.Style - xStyle;
Exit;
end;
lCopy := False;
edText3 := edText;
i := nStart+1;
edText3.SelStart := i;
edText3.SelLength := 1;
nStartMerker := nStart;
xMerkStyle := edText3.SelAttributes.Style;
while i < nStart+nLength do
begin
edText3.SelStart := i;
if xMerkStyle = edText3.SelAttributes.Style then
begin
Inc(i);
Continue;
end;
if not lCopy then
begin
CopyRxRichEditText(edText, edText2);
edText3 := edText2;
lCopy := True;
edText3.SelStart := i;
end;
xMerkStyle := edText3.SelAttributes.Style;
edText3.SelStart := nStartMerker;
edText3.SelLength := i-nStartMerker-1;
if lSet then
edText3.SelAttributes.Style := edText3.SelAttributes.Style + xStyle
else edText3.SelAttributes.Style := edText3.SelAttributes.Style - xStyle;
nStartMerker := i-1;
Inc(i);
end;
edText3.SelStart := nStartMerker;
edText3.SelLength := i-nStartMerker;
if lSet then
edText3.SelAttributes.Style := edText3.SelAttributes.Style + xStyle
else edText3.SelAttributes.Style := edText3.SelAttributes.Style - xStyle;
if lCopy then
CopyRxRichEditText(edText3, edText);
edText.SelStart := nStart;
edText.SelLength := nLength;
finally
bUpdating := False;
end;
end;
Gruß
Frank