C
crosser
Unregistered / Unconfirmed
GUEST, unregistred user!
我是想通过 对现在操作的TRichEdit指定位置字符颜色的提取,因为使用都正在操作TRichEdit没办法通过SelStart和SelLength来定位得到颜色,
下面的代码好像可行是吧,可是实际上,通过stream这样搞一下(后来发现保存到File也一样不行也会出现后面的情况),本来全角的双引号变成了半角的双引号,内容大小也发生了变化,本来全角双引号二个字节,现在变成一个字节,
本来想通过StartPos来定位得到颜色,可是大小都发生了变化还怎么能定位呢。
function TParseKeyWord.GetTextColor(const StartPos: integer;
var Color: TColor): Boolean;
var
stream: TMemoryStream;
tmpEditor: TRichEdit;
begin
Result := false;
if FEditor.Text = '' then
Exit;
stream := TMemoryStream.Create;
try
FEditor.Lines.SaveToStream(stream);
stream.Seek(0, soFrombegin
ning);
//-create tmpEditor
tmpEditor := TRichEdit.Create(FEditor);
try
tmpEditor.Visible := false;
tmpEditor.Parent := FEditor;
tmpEditor.Font.Assign(FEditor.Font);
tmpEditor.ReadOnly := true;
tmpEditor.Lines.LoadFromStream(stream);
tmpEditor.SelStart := StartPos - 1;
tmpEditor.SelLength := 1;
if tmpEditor.SelText <> '' then
begin
Color := tmpEditor.SelAttributes.Color;
Result := True;
end;
finally
FreeAndNil(tmpEditor);
end;
//---------
finally
FreeAndNil(stream);
end;
end;
下面的代码好像可行是吧,可是实际上,通过stream这样搞一下(后来发现保存到File也一样不行也会出现后面的情况),本来全角的双引号变成了半角的双引号,内容大小也发生了变化,本来全角双引号二个字节,现在变成一个字节,
本来想通过StartPos来定位得到颜色,可是大小都发生了变化还怎么能定位呢。
function TParseKeyWord.GetTextColor(const StartPos: integer;
var Color: TColor): Boolean;
var
stream: TMemoryStream;
tmpEditor: TRichEdit;
begin
Result := false;
if FEditor.Text = '' then
Exit;
stream := TMemoryStream.Create;
try
FEditor.Lines.SaveToStream(stream);
stream.Seek(0, soFrombegin
ning);
//-create tmpEditor
tmpEditor := TRichEdit.Create(FEditor);
try
tmpEditor.Visible := false;
tmpEditor.Parent := FEditor;
tmpEditor.Font.Assign(FEditor.Font);
tmpEditor.ReadOnly := true;
tmpEditor.Lines.LoadFromStream(stream);
tmpEditor.SelStart := StartPos - 1;
tmpEditor.SelLength := 1;
if tmpEditor.SelText <> '' then
begin
Color := tmpEditor.SelAttributes.Color;
Result := True;
end;
finally
FreeAndNil(tmpEditor);
end;
//---------
finally
FreeAndNil(stream);
end;
end;