|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | 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  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 |