Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
ВнизБез Ини файла Найти похожие ветки
← →
Semion (2002-10-22 06:28) [0]Люди подскажите как мне сделать так чтобы программа сохраняла информацию не в каком-то файле а дабовляла в свой и причем еще работала...пожалуста ;-(
← →
Rouse_ (2002-10-22 06:33) [1]Сохранять все данные в ресурсах
Вот примерный код
//------------------------------------------------------------------------------
//
// Пример использования ресурсов для хранения в них текстовой информации.
//
// (с) Филиппов Владимир. 2002.
// damageinc@sbor.ru
//
//------------------------------------------------------------------------------
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TMainFrm = class(TForm)
Memo: TMemo;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
StaticText1: TStaticText;
procedure BitBtn1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
iniDLL:array of byte;
procedure UpdateMemo;
function WriteToResource:boolean;
public
{ Public declarations }
end;
var
MainFrm: TMainFrm;
implementation
{$R *.DFM}
procedure TMainFrm.BitBtn1Click(Sender: TObject);
var
hLib:HINST;
hFile,hN:THandle;
p:pointer;
begin
SetLength(iniDLL,0);
//грузим либу:
hLib:=LoadLibrary("MyDLL.dll");
if hLib<>0 then
begin
//находим pесурс в ней
hFile:=FindResource(hLib,"MYFILE",RT_RCDATA);
if hFile<>0 then
begin
//загружаем его
try
hN:=LoadResource(hLib,hFile);
//получаем указатель на первый байт
p:=LockResource(hN);
SetLength(iniDLL,SizeofResource(hLib,hFile));
if Length(iniDLL)>0 then CopyMemory(@iniDLL[0],p,Length(iniDLL));
except
ShowMessage("Библиотека повреждена!!!")
end;
end else
begin
ShowMessage("Не найден ресурс.");
end;
//выгружаем либу, чтобы можно было в неё писать
FreeLibrary(hLib);
UpdateMemo;
end else ShowMessage("Библиотека не найдена!!!");
end;
procedure TMainFrm.UpdateMemo;
var
i,k:integer;
s:string;
begin
Memo.Clear;
i:=0;
while i<High(iniDLL) do
begin
k:=i;
while (i<=High(iniDLL))and(iniDLL[i]<>$D)and(iniDLL[i+1]<>$A) do inc(i);
SetLength(s,i-k);
CopyMemory(@s[1],@iniDLL[k],i-k);
Memo.Lines.Add(s);
inc(i,2);
end;
end;
function TMainFrm.WriteToResource:boolean;
var
hLib:THandle;
begin
hLib:=BeginUpdateResource("MyDLL.dll",false);
if Length(iniDLL)>0 then Result:=UpdateResource(hLib,RT_RCDATA,"MYFILE",0,@iniDLL[0],Length(iniDLL))
else Result:=UpdateResource(hLib,RT_RCDATA,"MYFILE",0,nil,0);
EndUpdateResource(hLib,false);
end;
procedure TMainFrm.FormResize(Sender: TObject);
begin
StaticText1.Repaint;
end;
procedure TMainFrm.BitBtn2Click(Sender: TObject);
var
i,k:integer;
begin
SetLength(iniDLL,0); k:=0;
for i:=0 to Memo.Lines.Count-1 do
begin
SetLength(iniDLL,Length(iniDLL)+Length(Memo.Lines[i])+2);
if Length(Memo.Lines[i])>0 then CopyMemory(@iniDLL[k],@Memo.Lines[i][1],Length(Memo.Lines[i]));
iniDLL[k+Length(Memo.Lines[i])]:=$D;
iniDLL[k+Length(Memo.Lines[i])+1]:=$A;
inc(k,Length(Memo.Lines[i])+2);
end;
if not WriteToResource then ShowMessage("Не удаётся произвести запись в библиотеку.");
end;
end.
Желаю успехов
← →
Semion (2002-10-22 07:17) [2]По коментариям я вижу, что она записывает в библиотеку dll а мне надо было в exe, Если я понял не так покажите где...
← →
Semion (2002-10-23 06:11) [3]Ктонибудь подкинте еще идейку или разъясните это
← →
DeadHDD (2002-10-23 06:35) [4]Можешь писать в свой exe"шник, добавляя данные в конец файла - это его не испортит. Чтобы писать в запущенный exe"шник - посмотри, как это делается в примере Delphi (c:\program files\borland\delphi\demos\resxplor).
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c