شنبه، مهر ۲۳، ۱۳۸۴

چطور یک برنامه تنظیم اولیه بنویسیم.

Using the RunOnce Registry Key

گاهی نیاز داریم که یک برنامه فقط یکبار آنهم زمانی که ویندوز بالا می آید اجرا شده و در دفعات دیگر بالا آمدن ویندوز اجرا نشود. مثلا می خواهیم این برنامه در اولین بار بعد از نصب برنامه ما بر روی سیستم اجرا شده و تنظیمات خاصی را بر روی سیستم انجام دهد.
برای اینکار در رجیستری ویندوز کلید خاصی وجود دارد که اگر درست تنظیم نمائیم اینکار را برای ما انجام می دهد.
نمونه سورس کد دلفی زیر می تواند به شما در این زمینه کمک نماید.

uses Registry;

procedure TForm1.Button1Click(Sender: TObject) ;
var reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := False;
reg.OpenKey(
'Software\Microsoft\Windows CurrentVersion\RunOnce',
False) ;
reg.WriteString('Delete Me!',
'command.com /c del Dummy.txt') ;
reg.CloseKey;
reg.free;
end;


در رجیستری ویندوز در بخض زیر اطلاعات مورد نظر ما نوشته خواهد شد. البته شما می توانید نام هر برناه دیگری را هم در این بخش بنویسید.
برنامه بالا در اولین بار بالا آمدن ویندوز یک فایل که اسمش نوشته شده را پاک می نماید.


HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce

چهارشنبه، مهر ۱۳، ۱۳۸۴

سورس کد یک برنامه نمونه برای لرزاندان پنجره برنامه

حتما در برنامه یاهو دیده اید که با زدن زنگ پنجره برنامه شروع به لرزش می کند. اگر می خواهید اینکار را در دلفی انجام دهید می توانید از سورس کد زیر استفاده نمائید.



procedure WindowShake(wHandle: THandle) ;
const
MAXDELTA = 4;
SHAKETIMES = 500;
var
oRect, wRect :TRect;
deltax : integer;
deltay : integer;
cnt : integer;
dx, dy : integer;
begin
//نگهداری محل اصلی پنجره
GetWindowRect(wHandle,wRect) ;
oRect := wRect;

Randomize;
for cnt := 0 to SHAKETIMES do
begin
deltax := Round(Random(MAXDELTA)) ;
deltay := Round(Random(MAXDELTA)) ;
dx := Round(1 + Random(2)) ;
if dx = 2 then dx := -1;
dy := Round(1 + Random(2)) ;
if dy = 2 then dy := -1;
OffsetRect(wRect,dx * deltax, dy * deltay) ;
MoveWindow(wHandle, wRect.Left,wRect.Top,
wRect.Right - wRect.Left,wRect.Bottom - wRect.Top,true) ;
end;
//برگرداندن برنامه به محل اصلی
MoveWindow(wHandle, oRect.Left,oRect.Top,
oRect.Right - oRect.Left,oRect.Bottom - oRect.Top,true) ;
end;


برای استفاده می توانید در برنامه اصلی مثلا بر روی رویداد کلیک یک دکمه بصورت زیر بنویسید :


WindowShake(Application.MainForm.Handle) ;