Преобразование Unicode строк в DFM файлах Delphi 6 в Ansi строкиDelphi , Синтаксис , ПреобразованияПреобразование Unicode строк в DFM файлах Delphi 6 в Ansi строки
Автор: Alx2 { **** UBPFD *********** by delphibase.endimus.com **** >> Преобразование Unicode строк в DFM файлах Delphi 6 в Ansi строки. При попытке открыть проект созданный в Delphi 6 из Delphi 5 возникает проблема с чтением DFM-файла. Проблема заключается в том, что Delphi5 не может прочитать строки, записанные в формате Unicode (WideString). Данная функция переводит строки из DFM файла в формат ANSI, после чего DFM файл читается в D5. Но при этом может возникнуть проблема, связанная с незнакомыми для D5 свойствами компонентов, которая, в свою очередь, решается игнорированием этих свойств. Зависимости: Classes Автор: Радионов Алексей (Alx2), alx@argo.mv.ru, ICQ:113442587, Ульяновск Copyright: Alx2 Дата: 31 мая 2002 г. ***************************************************** } procedure RemoveUnicodeFromDFM(const Filename: string); function isChanges(const S: string; var Res: string): Boolean; var len: Integer; function LexemSharp(var K: Integer): Boolean; begin Result := (K < len) and (S[K] = '#'); if Result then begin inc(K); while (K <= len) and (S[K] in ['0'..'9']) do inc(K); end; end; function LexemAp(var K: Integer): Boolean; begin Result := (K < len) and (S[K] = ''''); if Result then begin inc(K); while (K <= len) and (S[K] <> '''') do inc(K); if K <= len then inc(K); end; end; function Lexem(var K: Integer; var Str: string): Boolean; var Start: Integer; ValS: string; begin Result := False; Start := K; if LexemSharp(K) then begin ValS := Copy(S, Start + 1, K - Start - 1); Str := WideChar(StrToInt(ValS)); Result := True; end else if LexemAp(K) then begin Str := Copy(S, Start + 1, K - Start - 2); Result := True; end; end; function Prepare(var K: Integer): string; var Str: string; WasLexem: Boolean; begin Result := ''; WasLexem := False; while Lexem(K, Str) do begin Result := Result + Str; WasLexem := True; end; if Result <> '' then Result := '''' + Result + '''' + Copy(S, K, Length(S)) else if not WasLexem then Result := S else Result := ''''''; end; function Min(A, B: Integer): Integer; begin if A = 0 then Result := B else if B = 0 then Result := A else if A > B then Result := B else Result := A; end; var StartIdx: Integer; begin Result := False; StartIdx := Min(Pos('#', S), Pos('''', S)); if StartIdx > 0 then begin len := Length(S); while (StartIdx <= len) and (not (S[StartIdx] in ['#', ''''])) do inc(StartIdx); if StartIdx < len then begin Res := Copy(S, 1, StartIdx - 1) + Prepare(StartIdx); Result := True; end; end; end; var SList: TStringList; K: Integer; Res: string; begin SList := TStringList.Create; try SList.LOADFROMFILE(Filename); for K := 0 to SList.Count - 1 do if isChanges(SList[K], Res) then SList[K] := Res; SList.SaveToFile(Filename); finally SList.Free; end; end; Пример использования: procedure TForm1.Button1Click(Sender: TObject); var K: Integer; begin if OpenDialog1.Execute then for K := 0 to OpenDialog1.Files.Count - 1 do RemoveUnicodeFromDFM(OpenDialog1.Files[K]); end; Эта функция Delphi, написанная Alx2, конвертирует строковые значения в файле DFM (Delphi Form Files) из формата Unicode в формат ANSI, позволяя файл быть прочитанным Delphi 5. Функция Функция использует несколько вложенных функций для выполнения этого преобразования:
Функция также обрабатывает случаи, когда в строке нет символов '#' или ''', в которых случае она просто копирует оригинальную строку. Для использования этой функции вам нужно создать форму с кнопкой и компонентом OpenDialog. В обработчике события клика по кнопке вызовите Некоторые предложения по улучшению:
Пример использования этой функции:
В этом примере обработчик события клика по кнопке вызывает Преобразование Unicode строк в DFM файлах Delphi 6 в Ansi строки позволяет открыть проект, созданный в Delphi 6, в Delphi 5, исправляя проблему чтения DFM-файла. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Преобразования ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |