|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#46
|
||||
|
||||
Я бы делал так (ИМХО):
1. Есть базовый класс (для ANSI). 2. Есть список форматов, генерирующийся на основе содержимого папки с программой. 3. В папке содержатся файлы (например, с расширением .enc), являющиеся DLL. Функции, предоставляемые DLL: PHP код:
При вызове функции загрузки/сохраниния/перекодирования, пробегаемся по списку и проверяем... Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 14.07.2010 в 22:52. |
#47
|
|||
|
|||
Да, да... в правильном направлении мыслите.
Делай код, присылай, бум прикручивать и смотреть что получилось. |
#48
|
||||
|
||||
Набросал основной каркас. Ничего (вообще) не написал, только основная наработка. Схема в принципе понятна.
Некоторые моменты оформлены "чисто по русски", в конечной "версии" сделаю нормально. Поправьте, если что не так. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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,
Цитата:
Я накидал маленько в каркас функционала, щас сделаю тестовое приложение, проверю... Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 15.07.2010 в 16:12. |
#51
|
||||
|
||||
Базовая часть работает, надо проверять на "модулях".
У кого есть желание, накидайте дллку на любую кодировку... Для тестирующего приложения, кликаем по полю ввода "ПКМ". П.С. Вообще ни фига не оптимизировано, писал "в лоб". Только для проверки. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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 длл в ресурсы... Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 15.07.2010 в 22:24. |
#55
|
|||
|
|||
А смысл устраивать себе трудности?
То, что придется поддерживать в любом случае, лучше пихать в основной exe. При этом поддержку DLL можно сейчас не писать - потом напишем. Надо ее иметь в виду |
#56
|
||||
|
||||
Хм, смотрю на этом форуме что-то серьёзное шевелится. А я уже от разочарования забыл про этот форум если есть вакансии - готов помочь
кстати, lmikle вы случаем не из Владивостока? TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; |
#57
|
|||
|
|||
Так. Есть функция определения, явяется ли файл UTF8,
Является ли строка UTF8, И перекодировка UTF8-> Ansi, Ansi->UTF8 |
#58
|
||||
|
||||
а! у меня возникла шальная мысль. Можно развить мой вариант. При создании "форматтера", добавлять нужные кодировки по указателям функций (так же, как с DLL, но функции описать в "соседнем" юните). Получим поддержку "искаропки". И переделывать ничего не надо.
Могу накидать пример, оценишь? И, да, про Цитата:
По мне, если уж делать, то делать толково и сразу. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 16.07.2010 в 14:10. |
#59
|
|||
|
|||
Функции вроде работают. Но пока не определимся в каком виде у нас форматы - Dll или классы, выкладывать не буду - их еще в божеский вид привести надо
|
#60
|
||||
|
||||
Цитата:
TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; |