Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Разное > Флейм
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #46  
Старый 14.07.2010, 22:50
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Я бы делал так (ИМХО):
1. Есть базовый класс (для ANSI).
2. Есть список форматов, генерирующийся на основе содержимого папки с программой.
3. В папке содержатся файлы (например, с расширением .enc), являющиеся DLL.
Функции, предоставляемые DLL:
PHP код:
procedure GetInfo(var EncodingClassinteger; var Namestring; var Descrstring; var Authorstring);
// Информация о модуле:
// * класс (зарезервировано на случай, если модули будут использоваться в разных программах пакета),
// * название (в данном случае - кодировка),
// * описание (любой текст от разработчика),
// * автор.
function IsFileInEnc(FileNamestring): boolean;
// Проверяет файл на возможность загрузки при помощи данного модуля
function IsStringInEnc(SString): boolean;
// То же самое для строки
function FileToAnsi(FileNamestring): string;
// Преобразует файл из кодировки модуля в ANSI
function StringToAnsi(Sstring): string;
// То же самое для строки
function AnsiToString(SString): string;
// Преобразует строку из ANSI в кодировку модуля.
procedure AnsiToFile(SStringFileNamestring);
// Преобразует строку из ANSI в кодировку модуля и сохраняет в файл. 
Можно ещё добавить функционал для работы со Stream-данными, но не существенно.
При вызове функции загрузки/сохраниния/перекодирования, пробегаемся по списку и проверяем...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 14.07.2010 в 22:52.
Ответить с цитированием
  #47  
Старый 15.07.2010, 01:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да, да... в правильном направлении мыслите.
Делай код, присылай, бум прикручивать и смотреть что получилось.
Ответить с цитированием
  #48  
Старый 15.07.2010, 15:04
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Набросал основной каркас. Ничего (вообще) не написал, только основная наработка. Схема в принципе понятна.
Некоторые моменты оформлены "чисто по русски", в конечной "версии" сделаю нормально.
Поправьте, если что не так.
Вложения
Тип файла: rar EncodesManager.rar (870 байт, 5 просмотров)
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #49  
Старый 15.07.2010, 15:25
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Поподробнее можно про 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  
Старый 15.07.2010, 15:53
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

ChinYan,
Цитата:
Сообщение от DJ PhoeniX
Функции, предоставляемые DLL:
PHP код:
procedure GetInfo(var EncodingClassinteger; var Namestring; var Descrstring; var Authorstring);
// Информация о модуле:
// * класс (зарезервировано на случай, если модули будут использоваться в разных программах пакета),
// * название (в данном случае - кодировка),
// * описание (любой текст от разработчика),
// * автор.
..... 
Читать внимательнее надо.
Я накидал маленько в каркас функционала, щас сделаю тестовое приложение, проверю...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 15.07.2010 в 16:12.
Ответить с цитированием
  #51  
Старый 15.07.2010, 16:09
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Базовая часть работает, надо проверять на "модулях".
У кого есть желание, накидайте дллку на любую кодировку...

Для тестирующего приложения, кликаем по полю ввода "ПКМ".
П.С. Вообще ни фига не оптимизировано, писал "в лоб". Только для проверки.
Вложения
Тип файла: rar synEncodes.rar (3.4 Кбайт, 7 просмотров)
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #52  
Старый 15.07.2010, 16:41
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Я пытаюсь с UTF8 разобраться
Ответить с цитированием
  #53  
Старый 15.07.2010, 21:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от DJ PhoeniX
Базовая часть работает, надо проверять на "модулях".
У кого есть желание, накидайте дллку на любую кодировку...

Для тестирующего приложения, кликаем по полю ввода "ПКМ".
П.С. Вообще ни фига не оптимизировано, писал "в лоб". Только для проверки.

Ненравится.
Собственно, замечания.
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  
Старый 15.07.2010, 22:21
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Есть, шеф! Намёк понят. Щас будем иметь себе моск...
Хотя, мой вариант тоже жизнеспособен... Если хочется поддержки форматов "искаропки", можно паковать 2-3 длл в ресурсы...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 15.07.2010 в 22:24.
Ответить с цитированием
  #55  
Старый 15.07.2010, 22:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А смысл устраивать себе трудности?
То, что придется поддерживать в любом случае, лучше пихать в основной exe.
При этом поддержку DLL можно сейчас не писать - потом напишем. Надо ее иметь в виду
Ответить с цитированием
  #56  
Старый 16.07.2010, 08:50
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Хм, смотрю на этом форуме что-то серьёзное шевелится. А я уже от разочарования забыл про этот форум если есть вакансии - готов помочь

кстати, lmikle вы случаем не из Владивостока?
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #57  
Старый 16.07.2010, 11:40
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Так. Есть функция определения, явяется ли файл UTF8,
Является ли строка UTF8,
И перекодировка UTF8-> Ansi, Ansi->UTF8
Ответить с цитированием
  #58  
Старый 16.07.2010, 14:04
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

а! у меня возникла шальная мысль. Можно развить мой вариант. При создании "форматтера", добавлять нужные кодировки по указателям функций (так же, как с DLL, но функции описать в "соседнем" юните). Получим поддержку "искаропки". И переделывать ничего не надо.

Могу накидать пример, оценишь?

И, да, про
Цитата:
При этом поддержку DLL можно сейчас не писать - потом напишем.
"При этом, можно программу сейчас не писать - потом напишем", "При этом, можно сейчас вообще не жить, потом поживём..." и так далее
По мне, если уж делать, то делать толково и сразу.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 16.07.2010 в 14:10.
Ответить с цитированием
  #59  
Старый 16.07.2010, 15:44
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Функции вроде работают. Но пока не определимся в каком виде у нас форматы - Dll или классы, выкладывать не буду - их еще в божеский вид привести надо
Ответить с цитированием
  #60  
Старый 16.07.2010, 15:48
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от ChinYan
Но пока не определимся в каком виде у нас форматы - Dll или классы...
зачем кодировки в ДЛЛки? пользовательских кодировок нет, ну по крайней мере они не нужны, поэтому динамичная модульность здесь не к чему, максимум наследование от абстрактного класса внутри кода
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter