Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.04;
Скачать: CL | DM;

Вниз

Без Ини файла   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
4-11542
raiks
2002-09-21 20:33
2002.11.04
Как запретить получение фокуса компонентом TMemo?


1-11147
Stocker!
2002-10-24 10:13
2002.11.04
TImage и таблица Word или Excel


1-11220
Le!
2002-10-25 09:03
2002.11.04
Размер окна!


7-11531
начинающий програмер
2002-08-28 14:53
2002.11.04
Памагите


1-11316
Eugene_post
2002-10-23 19:36
2002.11.04
Как подсчитать контрольную сумму файла?