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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.01.2012, 12:43
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
Вопрос Dll как хранилище настроек

Всем привет, проблема не могу разобраться как хранить в ДЛЛ настроики программы.

Например пути к фаилам, настроики фильтров и размеры окон кто с талкивался с такой проблемой подскажите как это делается ....
Ответить с цитированием
  #2  
Старый 18.01.2012, 12:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Как то не слышал, чтобы в dll хранили настройки. Реестра или файла не хватает?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 18.01.2012, 14:13
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Как то не слышал, чтобы в dll хранили настройки. Реестра или файла не хватает?

Хм впринципе можно и инишник сделать, но это как-то неинтересно хочется что-то новое...
Ответить с цитированием
  #4  
Старый 18.01.2012, 16:24
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Честным способом ОС не даст писать в dll или другой файл. Но если не хочется писать в ini в текстовом виде, пиши в бинарном, можешь ещё и закодировать при этом.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 18.01.2012, 17:31
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Если сильно хочется, но нельзя - значит можно
Код:
function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
 aStream: TFileStream; 
 iSize: Integer; 
begin 
 Result := False; 
 if not FileExists(AFileName) then 
 Exit; 
 try 
 aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite); 
 MemoryStream.Seek(0, soFromBeginning);  
 aStream.Seek(0, soFromEnd); 
 aStream.CopyFrom(MemoryStream, 0); 
 iSize := MemoryStream.Size + SizeOf(Integer); 
 aStream.Write(iSize, SizeOf(iSize)); 
 finally 
 aStream.Free; 
 end; 
 Result := True; 
end; 

function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; 
var 
 aStream: TFileStream; 
 iSize: Integer; 
begin
 Result := False; 
 if not FileExists(AFileName) then 
 Exit; 

 try 
 aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); 
 aStream.Seek(-SizeOf(Integer), soFromEnd); 
 aStream.Read(iSize, SizeOf(iSize)); 
 if iSize > aStream.Size then 
 begin 
 aStream.Free; 
 Exit; 
 end; 
 aStream.Seek(-iSize, soFromEnd); 
 MemoryStream.SetSize(iSize - SizeOf(Integer)); 
 MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize)); 
 MemoryStream.Seek(0, soFromBeginning); 
 finally 
 aStream.Free; 
 end; 
 Result := True;
end; 
Немного глупый способ, но все же. Можно хранить настройки хоть в самом ЕХЕ файле.

Вот если надо "мини-демка":
Код:
// Запись
var
 aStream: TMemoryStream;
begin
 aStream := TMemoryStream.Create;
 Memo1.Lines.SaveToStream(aStream);
 if not FileExists('options.exe') then showmessage('error!!!');
 AttachToFile('options.exe', aStream);
 aStream.Free;
end;

// Чтение
var 
 aStream: TMemoryStream; 
begin 
 aStream := TMemoryStream.Create;
 if not FileExists('options.exe') then showmessage('error!!!');
 LoadFromFile('options.exe', aStream);
 Memo1.Lines.LoadFromStream(aStream);
 aStream.Free; 
end;
__________________
Помогаю за Спасибо

Последний раз редактировалось v1s2222, 18.01.2012 в 17:33.
Ответить с цитированием
  #6  
Старый 18.01.2012, 19:33
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

хороший способ
сама же в себя программа не может писать
вроде можно сделать самоудаляющиейся bat/vbs скрипт, который бы это записывал, тогда вобще всё можно держать в одном exe
Ответить с цитированием
  #7  
Старый 18.01.2012, 19:42
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Ну а если брать отдельную dll, как надо ТС, то все спокойно записывается.
Да и в сам ЕХЕ записать можно, только через др. программу, либо скрипт.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #8  
Старый 18.01.2012, 21:40
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от v1s2222
Если сильно хочется, но нельзя - значит можно

Немного глупый способ, но все же. Можно хранить настройки хоть в самом ЕХЕ файле.

Это не просто глупый, это давно известный варварский способ, но ведь нужно и голову на плечах иметь и думать что выкладываете, а не только желание похвастать свими знаниями.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 18.01.2012, 21:47
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Цитата:
Сообщение от angvelem
а не только желание похвастать свими знаниями.
Я наоборот своими знаниями почти не хвастаюсь, если не заметил.
А код выложил для ознакомления. Хотели писать в библиотеки - пожалуйста
__________________
Помогаю за Спасибо
Ответить с цитированием
  #10  
Старый 19.01.2012, 11:18
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
uses
  IniFiles,

var
  ini: TIniFile;
begin
  ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Project1.dll');
  ini.WriteString('Section', 'Ident', 'Value');
  ini.Free;
end;
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 19.01.2012 в 11:33.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter