Главная страница
    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.009 c
3-11091
Dennis S
2002-10-15 01:52
2002.11.04
Помогите прочесть в TStringGrid


14-11482
Opuhshii
2002-10-14 08:40
2002.11.04
A-a-a-a-a-а (крик души), Cranberry,


14-11389
Шурик Ш
2002-10-16 18:10
2002.11.04
Злой админ отрубил доступ к аське


14-11398
Igorek
2002-10-07 15:52
2002.11.04
Опрос:


8-11342
Саня
2002-07-11 11:38
2002.11.04
Как перевести RGB в формат байт





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский