Форум по 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
По умолчанию

Если сильно хочется, но нельзя - значит можно
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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;
Немного глупый способ, но все же. Можно хранить настройки хоть в самом ЕХЕ файле.

Вот если надо "мини-демка":
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Запись
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
По умолчанию

Код:
1
2
3
4
5
6
7
8
9
10
uses
  IniFiles,
 
var
  ini: TIniFile;
begin
  ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'<b><font color="Red">Project1.dll</font></b>');
  ini.WriteString('Section', 'Ident', 'Value');
  ini.Free;
end;
__________________
Пишу программы за еду.
__________________

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


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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