Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2008, 17:49   #11
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Попробую накидать и потом выложу код.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 25.11.2008, 17:55   #12
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 DeKot - жду заранее благодарен.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 25.11.2008, 18:42   #13
NieL
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 116
По умолчанию

Используй дополнительные файловые потоки NTFS. Вот небольшой пример:
Код:

// данные из Memo сохраняются в доп. поток NTFS

procedure Tform_Test.saveClick(Sender: TObject);
begin
  Memo1.Lines.SaveToFile(ParamStr(0) + ': MyData');
end;

procedure Tform_Test.loadClick(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile(ParamStr(0) + ': MyData');
end;
В твоем случае запоминать значение счетчика можно так:

Код:
procedure Tform_Test.saveClick(Sender: TObject);
var
  M: TMemoryStream;
  i: Integer;
begin
  M := TMemoryStream.Create;
  try
    i := 12345; // temp счетчик
    M.Write(i, SizeOf(i));
    M.SaveToFile(ParamStr(0) + ':Data');
  finally
    M.Free;
  end;
end;

procedure Tform_Test.loadClick(Sender: TObject);
var
  M: TMemoryStream;
  i: Integer;
begin
  M := TMemoryStream.Create;
  try
    M.LoadFromFile(ParamStr(0) + ':Data');
    M.Read(i, SizeOf(i));
    //-----------------
    ShowMessageFmt('%d', [i]);
  finally
    M.Free;
  end;
end;

Последний раз редактировалось NieL; 25.11.2008 в 19:05.
NieL вне форума Ответить с цитированием
Старый 25.11.2008, 20:12   #14
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

А разве ресурсы не сам собераеш, тоесть их можно пересобирать без своей помощи? И проще не рисовать прямоугольник а сделать бмб размерностью 1х1 и при каждом нажатии менять на 2х1 3х1 4х1 и тд.
Zeraim вне форума Ответить с цитированием
Старый 25.11.2008, 20:23   #15
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 NieL - пример с Memo получился - но этот пример только при работающей программе запоминает содержимое Мемо.
и втрой пример тоже! - у меня i так и остается - 12345 и я никак не могу его поменять. Не могу понять - как при следющем открытии увеличить i на определенное значение?
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 25.11.2008, 20:41   #16
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 Zeraim - напиши пример, как увеличить этот бмп в ресурсах?
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 25.11.2008, 21:49   #17
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Вот, набросал примерчик:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses SysUtils, Windows, Forms;

const ValidMarker: Integer = $0A52BC93; // маркер
      MaxCount = 5; // число запусков програмы

function LimitCheck: Integer;
// Проверка лимитов запуска:
var H, Marker, Count, I: Integer;
    B: Byte;
    TempName: string;
begin
  TempName := ChangeFileExt (Application.ExeName, '.tmp');
  if TempName = Application.ExeName then
  begin
    TempName := ChangeFileExt (Application.ExeName, '.exe');
    CopyFile (PChar (Application.ExeName), PChar (TempName), False);
    WinExec (PChar (TempName), SW_SHOWNORMAL);
    ExitProcess (0);
  end; {if}
  H := FileOpen (Application.ExeName, fmOpenRead or fmShareDenyWrite);
  FileSeek (H, GetFileSize (H, nil) - SizeOf (Marker) - SizeOf (Count), 0);
  FileRead (H, Marker, SizeOf (Marker));
  if Marker = ValidMarker
    then FileRead (H, Count, SizeOf (Count))
    else Count := MaxCount;
  if not FileExists (TempName) then
  begin
    Dec (Count);
    if Count <= 0 then ExitProcess (0);
    FileClose (H);
    CopyFile (PChar (Application.ExeName), PChar (TempName), False);
    H := FileOpen (TempName, fmOpenWrite);
    if Marker = ValidMarker then
    begin
      FileSeek (H, GetFileSize (H, nil) - SizeOf (Count), 0);
      FileWrite (H, Count, SizeOf (Count));
    end else
    begin
      FileSeek (H, 0, 2);
      FileWrite (H, ValidMarker, SizeOf (ValidMarker));
      FileWrite (H, Count, SizeOf (Count));
    end; {if}
    FileClose (H);
    WinExec (PChar (TempName), SW_HIDE);
    ExitProcess (0);
  end else FileClose (H);
  DeleteFile (PChar (TempName));
  Result := Count;
end; {func LimitCheck}

begin
  WriteLn ('Count: ', LimitCheck);
  Write ('Press [ENTER]... ');
  ReadLn;
end.
Счётчик записывается в конец EXE-файла и при запуске уменьшается.
Первый запуск определяется отсутствием специального маркера в конце файла. Поэтому, защита не надёжная, т.к. если этот маркер удалить, счётчик сбросится. Можно маркер и начальное значение счётчика создавать руками, после компиляции, так будет надёжнее.

Последний раз редактировалось Arigato; 26.11.2008 в 09:50.
Arigato вне форума Ответить с цитированием
Старый 26.11.2008, 08:59   #18
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Пример Arigato наиболее оптимальный.У меня попытки реализовать через графику не увенчались успехом, т.к. изменненый в программе файл можно сохранить только на диске, а в ресурсах или в каком либо компоненте не получилось.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 26.11.2008, 15:04   #19
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 Arigato - да, то что нужно.))))) именно этого и добивался. Спасибо большое!.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 27.11.2008, 19:26   #20
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

а если с болванки ? Или это нелицензионное копирование?
Как минимум надо предусмотреть
Don't worry be happy
Izhic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вставка значений Iskin Microsoft Office Excel 0 27.10.2008 13:21
Суммирование значений БД Andi2118 БД в Delphi 3 12.10.2008 20:25
Поиск значений Rom1k06 Microsoft Office Excel 11 04.09.2008 05:14
Перевод значений DeDoK Общие вопросы Delphi 3 19.05.2008 08:39
Сложение значений Torrenter Компоненты Delphi 2 11.01.2008 19:14