![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#46
|
||||
|
||||
|
Я бы делал так (ИМХО):
1. Есть базовый класс (для ANSI). 2. Есть список форматов, генерирующийся на основе содержимого папки с программой. 3. В папке содержатся файлы (например, с расширением .enc), являющиеся DLL. Функции, предоставляемые DLL: PHP код:
При вызове функции загрузки/сохраниния/перекодирования, пробегаемся по списку и проверяем... Последний раз редактировалось PhoeniX, 14.07.2010 в 22:52. |
|
#47
|
|||
|
|||
|
Да, да... в правильном направлении мыслите.
Делай код, присылай, бум прикручивать и смотреть что получилось. |
|
#48
|
||||
|
||||
|
Набросал основной каркас. Ничего (вообще) не написал, только основная наработка. Схема в принципе понятна.
Некоторые моменты оформлены "чисто по русски", в конечной "версии" сделаю нормально. Поправьте, если что не так. |
|
#49
|
|||
|
|||
|
Поподробнее можно про EncodingClass? А то я что-то не пойму назначения этого
----- Нашел способ определить, закодирован ли файл кодировкой UTF8: Код:
function isFileInEnc(fName:PChar):boolean; var Stream:TStream; b:Cardinal; Const sign=$BFBBEF; //Сигнатура UTF-8 begin Stream:=TFileStream.Create(String(fName),fmOpenRead); //открытие файла Stream.ReadBuffer(b,3); //чтение первых 3х быйт (сигнатура формата) Result:=b=sign; //если сигатура формата совпадает с сигнатурой UTF8, то вернуть true Stream.Free; end; Исходя из этого можно отметь файл, как UTF8: Код:
procedure MarkFileUTF8;
var
Stream: TStream;
b:cardinal;
begin
Stream := TFileStream.Create('C:\1.txt',fmCreate);
try
b:=$BFBBEF;
S.WriteBuffer(b, 3);
(*Теперь можно записывать строки в UTF8*)
finally
Stream.Free;
end;
end;Последний раз редактировалось ChinYan, 15.07.2010 в 15:37. |
|
#50
|
||||
|
||||
|
ChinYan,
Цитата:
Я накидал маленько в каркас функционала, щас сделаю тестовое приложение, проверю... Последний раз редактировалось PhoeniX, 15.07.2010 в 16:12. |
|
#51
|
||||
|
||||
|
Базовая часть работает, надо проверять на "модулях".
У кого есть желание, накидайте дллку на любую кодировку... Для тестирующего приложения, кликаем по полю ввода "ПКМ". П.С. Вообще ни фига не оптимизировано, писал "в лоб". Только для проверки. |
|
#52
|
|||
|
|||
|
Я пытаюсь с UTF8 разобраться
|
|
#53
|
|||
|
|||
|
Цитата:
Ненравится. Собственно, замечания. 1. Я бы сделал через классы. Почему - см. дальше. 2. Нет поддержки "Из коробки" некоторого набора форматов. Т.е. что я хочу: Код:
TFormatterBase=class // Базовый класс. Здесь описан интерфейс. ... public procedure SaveToFile(AStream : TStream; AText : String); virtual; abstract; function LoadFromFile(AStream : TStream) : String; virtual; abstract; function IsFormat(AStream : TStream) : Boolean; virtual; abstract; end; TFormatterAnsi=class(TFormatterBase) // Встроеный для ansi ... end; TFormatterUTF8=class(TFormatterBase) // Встроеный для UTF8 ... end; TFormatterUnicode=class(TFormatterBase) // Встроеный для Unicode ... end; TFormatterDLL=class(TFormatterBase) // Встроеный для внешних кодеков ... end; TFormatterManager=class // Менеджер кодеков ... public constructor Create(AEdit : TSynEdit); // запоминаем ссылку на редактор procedure LoadFromFile(AFileName : String); procedure SaveTofile(AFileName : String; AFormatter : String = ''); end; Если неясно почему именно так, то спрашивайте. |
|
#54
|
||||
|
||||
|
Есть, шеф! Намёк понят. Щас будем иметь себе моск...
![]() Хотя, мой вариант тоже жизнеспособен... Если хочется поддержки форматов "искаропки", можно паковать 2-3 длл в ресурсы... Последний раз редактировалось PhoeniX, 15.07.2010 в 22:24. |
|
#55
|
|||
|
|||
|
А смысл устраивать себе трудности?
То, что придется поддерживать в любом случае, лучше пихать в основной exe. При этом поддержку DLL можно сейчас не писать - потом напишем. Надо ее иметь в виду ![]() |
|
#56
|
||||
|
||||
|
Хм, смотрю на этом форуме что-то серьёзное шевелится. А я уже от разочарования забыл про этот форум
если есть вакансии - готов помочькстати, lmikle вы случаем не из Владивостока? |
|
#57
|
|||
|
|||
|
Так. Есть функция определения, явяется ли файл UTF8,
Является ли строка UTF8, И перекодировка UTF8-> Ansi, Ansi->UTF8 |
|
#58
|
||||
|
||||
|
а! у меня возникла шальная мысль. Можно развить мой вариант. При создании "форматтера", добавлять нужные кодировки по указателям функций (так же, как с DLL, но функции описать в "соседнем" юните). Получим поддержку "искаропки". И переделывать ничего не надо.
Могу накидать пример, оценишь? ![]() И, да, про Цитата:
![]() По мне, если уж делать, то делать толково и сразу. Последний раз редактировалось PhoeniX, 16.07.2010 в 14:10. |
|
#59
|
|||
|
|||
|
Функции вроде работают. Но пока не определимся в каком виде у нас форматы - Dll или классы, выкладывать не буду - их еще в божеский вид привести надо
|
|
#60
|
||||
|
||||
|
Цитата:
|