2011년 3월 15일 화요일

쉐어웨어 프로그램을 만들때 유용한 기법

// 처음 실행될때 글로바 아톰을 선언하고 종료시 이를 제거하지 않습니다.
// 때문에 또 실행하면 당연히 아톰이 선언된채 있기 때문에 알수 있습니다.
// 주로 프로그램이 두번실행되는것을 막을때 사용됩니다.

procedure TForm1.FormShow (Sender: TObject);
var
atom : integer;
begin
if GlobalFindAtom ('오늘비가와~') = 0 then
atom := GlobalAddAtom ('오늘비가와~')
else
begin
ShowMessage ('등록하지 않으면 다시 윈도우를 재부팅해야 사용할수 있습니다. 왠만하면 등록하시죠?');
Close ;
end
end;


========================================

프로그램 중복실행을 방지하려고 GlobalAddAtom과 GlobalFindAtom함수를 아래와 같이 썼습니다.
var

atom:Word; //전역변수

procedure TForm1.FormCreate(Sender: TObject);
begin
if GlobalFindAtom('ISRUNNING') = 0 then
atom := GlobalAddAtom('ISRUNNING')
else begin
MessageDlg('프로그램이 이미 실행중입니다.', mtWarning,[mbOK], 0);
Halt;
end;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
GlobalDeleteAtom(atom);
end;

==============================

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
TMainForm = class(TForm)
btnEncode: TButton;
btnDecode: TButton;
procedure btnEncodeClick(Sender: TObject);
procedure btnDecodeClick(Sender: TObject);
private
FAtom: DWORD;
public
function EncodeURL(const URL: string): DWORD;
function DecodeURL(dwAtom: Integer): string;
end;

var
MainForm: TMainForm;

implementation

{$R *.DFM}

function TMainForm.DecodeURL(dwAtom: DWORD): string;
var
Buf: array[0..255] of Char;
begin
GlobalGetAtomName(dwAtom, Buf, SizeOf(Buf));
Result := Buf;
end;

function TMainForm.EncodeURL(const URL: string): DWORD;
begin
Result := GlobalAddAtom(PChar(URL));
end;

procedure TMainForm.btnEncodeClick(Sender: TObject);
begin
FAtom := EncodeURL('www.delphi.co.kr');
end;

procedure TMainForm.btnDecodeClick(Sender: TObject);
begin
ShowMessage(DecodeURL(FAtom));
end;

end.
=====================================================================
procedure TfrmMain.FormShow(Sender: TObject);
var
atom : integer;
wdate : string;
cdate : TDateTime;
tmp_str : string;
nAtm :Word;
buf :Array [0..255] of Char;
begin
wdate := '2010-12-30';
FAtom := EncodeURL(wdate);
//해지
//GlobalDeleteAtom(FAtom);
if FAtom = 0 then begin
atom := GlobalAddAtom (PChar( FAtom ));
end
else begin
tmp_str := DecodeURL(FAtom);
cdate := StrToDate(tmp_str);
if TRUNC(cdate) < TRUNC(now()) then begin
ShowMessage ('사용기간이 지났습니다.');
Close ;
end;
end;
end;

댓글 없음:

댓글 쓰기