I made an application, a text editor which uses SRichViewEdit component ( v3.2), with RTFReadProperties.UnicodeMode = rvruNoUnicode.
Database connection: Firebird 2.1, ADO, IBProvider3 with unicode_mode = false. Charset of FB database is WIN1250.
I make a document with this text :"Hello World ! ", i save them into database, ( or i edit later the text). INSERT and UPDATE works both correct.
When i edit this document style ( font size set to 30 etc.) and save RVF into database, comes up an error:
"IB-native IN-parameter value create failed. Position 0. Write BLOB: Can't translate text from UNICODE to [WIN1250]"
How can i convert this full document to ANSI ?
Users can edit documents, copy+paste from older documents, etc., that's why i have to convert it first.
I made a converter by this article, but it thid'nt work for me:
http://www.trichview.com/forums/viewtopic.php?t=70
My converter's code:
Code: Select all
procedure ConvertToANSI(rv: TCustomRichView);
var i: Integer;
begin
ConvertRVToANSI(rv.RVData);
for i := 0 to rv.Style.TextStyles.Count-1 do
rv.Style.TextStyles[i].Unicode := False;
end;
procedure ConvertRVToANSI(RVData: TCustomRVData);
var i,r,c, StyleNo: Integer;
table: TRVTableItemInfo;
begin
for i := 0 to RVData.ItemCount-1 do begin
StyleNo := RVData.GetItemStyle(i);
if StyleNo>=0 then begin
if RVData.GetRVStyle.TextStyles[StyleNo].Unicode then
begin
RVData.SetItemTextA(i, RVData.GetItemText(i));
RVData.GetItem(i).ItemOptions := RVData.GetItem(i).ItemOptions - [rvioUnicode];
end;
end
else if RVData.GetItemStyle(i)=rvsTable then begin
table := TRVTableItemInfo(RVData.GetItem(i));
for r := 0 to table.Rows.Count-1 do
for c := 0 to table.Rows[r].Count-1 do
if table.Cells[r,c]<>nil then
ConvertRVToANSI(table.Cells[r,c].GetRVData);
end;
end;
end;
Code: Select all
RVData.SetItemTextA(i, RVData.GetItemText(i));
RVData.GetItem(i).ItemOptions := RVData.GetItem(i).ItemOptions - [rvioUnicode];