Непреднамеренная смена кодировки выводимого на экран текста
Добавлено: 14.04.2016 15:25:02
Во вложении скриншот. Проблема в следующем, программа запускается и работает нормально. В ячейках таблицы выводит текст вида "29 января 2016г.". Спустя какое то время, текст превращается в знаки вопроса. В каком направлении искать проблему с кодировкой?
Код вывода текста
Код вывода текста
- Код: Выделить всё
procedure TFEditorRemd.vstMainTreeGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: String);
var
Data: PVirtualRecord;
dbItem:TRemdItem;
tmp, tmp2:string;
ColItem:TVirtualTreeColumn;
begin
try
if Column<0 then exit;
dbItem:=nil;
Data := Sender.GetNodeData(Node);
CellText := '';
tmp:='';
if (Assigned(Data)and Assigned(Data^.Item)) then
begin
if (Data^.Item.ClassNameIs(COMPARECLASSNAME_REMD)) then
begin
dbItem:=TRemdItem(Data^.Item);
end;
end;
ColItem:=vstMainGetColumnByIndex (Column); //TVirtualTreeColumn;
if ColItem.ID=vstMainColumnID_LabelName then //Маркировка
begin
if Assigned(dbItem) then
begin
tmp:=dbItem.Text;
end;
end
else if ColItem.ID=vstMainColumnID_Date then //Дата
begin
if Assigned(dbItem) then
begin
if dbItem.RemdMode=tmStandard then
begin
tmp:=FormatDateTime(UTF8ToSys(FORMATDATETIME_DAY), dbItem.DateOriginal);
tmp:=SysToUTF8(tmp);
end
else if dbItem.RemdMode=tmEveryDay then
begin
tmp:=FORMATDATETIME_EVERY_DAY2;
end
else if dbItem.RemdMode=tmEveryWeek then
begin
tmp:=FORMATDATETIME_EVERY_Week3;
end
else if dbItem.RemdMode=tmEveryMonth then
begin
tmp:=formatdatetime(UTF8ToSys(FORMATDATETIME_EVERY_Month2), dbItem.DateOriginal);
tmp:=SysToUTF8(tmp);
end
else if dbItem.RemdMode=tmEveryYear then
begin
tmp:=formatdatetime(UTF8ToSys(FORMATDATETIME_EVERY_Year2), dbItem.DateOriginal);
tmp:=SysToUTF8(tmp);
end
else if (dbItem.RemdMode=tmBeginQuarter)then
begin
tmp:=formatdatetime(UTF8ToSys(FORMATDATETIME_QUARTERBEGIN), dbItem.DateOriginal);
tmp:=SysToUTF8(tmp);
end
else if (dbItem.RemdMode=tmEndQuarter) then
begin
tmp:=formatdatetime(UTF8ToSys(FORMATDATETIME_QUARTEREND), dbItem.DateOriginal);
tmp:=SysToUTF8(tmp);
end;
end;
end
else if ColItem.ID=vstMainColumnID_Time then //Куда
begin
if Assigned(dbItem) then
begin
tmp:=FormatDateTime('HH:mm', dbItem.TimeOriginal);
end;
end
else if ColItem.ID=vstMainColumnID_Status then //Марка кабеля
begin
if Assigned(dbItem) then
begin
if dbItem.Postpone then
begin
tmp:=FormatDateTime('Отложено до dd.mm.yyyy HH:mm', dbItem.NextComplite);
end
else
begin
tmp:=FormatDateTime('Было выполнено dd.mm.yyyy HH:mm', dbItem.LastComplite);
if dbItem.RemdMode<>tmStandard then
begin
tmp:=tmp+' '+chr(13)+chr(10);
tmp:=tmp+FormatDateTime('Повторение dd.mm.yyyy HH:mm', dbItem.NextComplite);
end;
end;
end;
end
else if ColItem.ID=vstMainColumnID_Comments then //Примечание
begin
if Assigned(dbItem) then
begin
tmp:=dbItem.Comment;
end;
end;
tmp:=StringReplace(tmp,'\n ',#13,[rfReplaceAll,rfIgnoreCase]);
tmp:=StringReplace(tmp,'\n',#13,[rfReplaceAll,rfIgnoreCase]);
tmp:=StringReplace(tmp,'\r ',#13,[rfReplaceAll,rfIgnoreCase]);
tmp:=StringReplace(tmp,'\r',#13,[rfReplaceAll,rfIgnoreCase]);
Data^.ViewText[ColItem.ID]:=tmp;
CellText := tmp;
except
end;
end;
- Код: Выделить всё
unit u_lang_res;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
resourcestring
EVERY_DAY ='Каждый день';
EVERY_Week ='Каждую неделю';
EVERY_Month ='Каждый месяц';
EVERY_Month2 ='Числа';
EVERY_Year ='Каждый год';
EVERY_Year2 ='Ежегодно';
FORMATDATETIME_EVERY_Month ='Ежемесячно';
FORMATDATETIME_EVERY_Month2 ='Каждый месяц \r d числа';
FORMATDATETIME_EVERY_Month3 ='d числа';
FORMATDATETIME_EVERY_Year ='Ежегодно';
FORMATDATETIME_EVERY_Year2 ='Каждый год \r d mmmm';
FORMATDATETIME_EVERY_Year3 ='d mmmm';
FORMATDATETIME_EVERY_Week ='Еженедельно';
FORMATDATETIME_EVERY_Week2 ='Каждую неделю';
FORMATDATETIME_EVERY_Week3 ='Каждую неделю';
FORMATDATETIME_EVERY_DAY ='Ежедневно';
FORMATDATETIME_EVERY_DAY2 ='Каждый день';
FORMATDATETIME_EVERY_DAY3 ='Каждый день';
FORMATDATETIME_DAY ='dd mmmm yyyy';
FORMATDATETIME_QUARTERBEGIN ='Начало квартала \r dd mmmm';
FORMATDATETIME_QUARTEREND ='Конец квартала \r dd mmmm';
FORMATPOSTPONE_MIN ='%d минут';
FORMATPOSTPONE_HOUR ='%d часов';
FORMATPOSTPONE_DAYS ='%d дней';
FORMATPOSTPONE_WEEK1 ='%d неделя';
FORMATPOSTPONE_WEEK2 ='%d недели';
FORMATPOSTPONE_YEAR ='%d год';