Вверх ↑
Ответов: 4631
Рейтинг: 749
#1: 2015-06-28 10:57:16 ЛС | профиль | цитата
Galkov писал(а):
Он упорно не хочет отличать строку, длиной в один символ - от символа
А чем это чревато для нас? Свойства все равно объявляются как string. И каким образом PChar помогает это исправить?
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;
строка длиной до 255 вообще в ресурсы не заносится. Какой тогда смысл в _prop_XXX := PChar('ABC'#0)?

Кто хочет поэкспериментировать - замените в 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;
и выполните make.bat Сообщите, если обнаружите ошибки в работе программ.
карма: 26

0