Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.023 c
1-11153
Corte ™
2002-10-24 13:41
2002.11.04
Вопрос !!!.


1-11137
acorus
2002-10-22 18:29
2002.11.04
Мастера выручайте! - как побороть access violation Delphi 5/6


1-11188
Weare
2002-10-24 14:34
2002.11.04
Как распечатать *.jpg файл


1-11146
opoloXAI
2002-10-24 13:05
2002.11.04
Сообщение об ошибке при показе MessageDlg.


14-11386
Dmitriy Polskoy
2002-10-17 09:25
2002.11.04
Операция





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский