Galkov писал(а):
Он упорно не хочет отличать строку, длиной в один символ - от символаGalkov писал(а):
нет ничего лучше, чем хранить строку в ресурсах
#pas
function StringToCode(const s:string):string;
var i:integer; intostr:bool;
begin
if Length(s) > 254 then begin
Result := 'PChar(LoadResData(''' + cgt.resAddStr(PChar(s)) + '''))';
exit;
end;
Result := 'PChar(';
intostr := false;
for i := 1 to Length(s) do
if ord(s[i])<32 then begin
if intostr then Result := Result + '''';
Result := Result + '#' + Int2Str(ord(s[i]));
intostr := false;
end else begin
if not intostr then Result := Result + '''';
if s[i]='''' then Result := Result + '''';
Result := Result + s[i];
intostr := true;
end;
if intostr then Result := Result + '''';
Result := Result + '#0)';
end;
Кто хочет поэкспериментировать - замените в CodeGen.dpr
#pas
function StringToCode(const s:string):string;
var i:integer; intostr:bool;
begin
if Length(s) > 254 then begin
Result := 'PChar(LoadResData(''' + cgt.resAddStr(PChar(s)) + '''))';
exit;
end;
//Result := 'PChar(';
Result := '';
intostr := false;
for i := 1 to Length(s) do
if ord(s[i])<32 then begin
if intostr then Result := Result + '''';
Result := Result + '#' + Int2Str(ord(s[i]));
intostr := false;
end else begin
if not intostr then Result := Result + '''';
if s[i]='''' then Result := Result + '''';
Result := Result + s[i];
intostr := true;
end;
if intostr then Result := Result + '''';
//Result := Result + '#0)';
if Result = '' then Result := '''''';
end;