خاصیت KeyPreview از فرم رو به True تغییر بدین و فقط کد زیر رو تو رویداد KeyPress از فرم بذارین
procedure TForm1.FormKeyPress(Sender: TObject;
var
Key: Char);
begin
if
Key= #13 then begin
keybd_event(VK_TAB,1,0,0);
keybd_event(VK_TAB,1,KEYEVENTF_KEYUP,0);
Key:= #0;
end
;
end
;
به عنوان نمونه اگر فایل ini با نام ConfigurationFile به صورت زیر باشد :
[general]
title="1234"
کد زیر را برای تغییر دادن مقادیر فایل می نویسیم :
var path,value :string;
IniFile : TIniFile;
begin
value:='1111';
path:=ExtractFilePath(Application.ExeName);
try
IniFile:=TIniFile.Create(path+'\ConfigurationFile.ini');
inifile.WriteString('general','title',value);
finally
inifile.Free;
close;
end;
کد زیر به جای انتخاب فایل در OpenDialog، انتخاب مسیر را نشان میدهد
var
OpenDialog: TFileOpenDialog;
SelectedFolder: string;
begin
OpenDialog := TFileOpenDialog.Create(nil);
try
OpenDialog.Options := OpenDialog.Options + [fdoPickFolders];
if not OpenDialog.Execute then
Abort;
SelectedFolder := OpenDialog.FileName;
finally
OpenDialog.Free;
end;
اگر روی RadioGroup بخواهیم فاکوس کنیم میتوانیم از کد زیر استفاده نماییم :
(RadioGroup1.Controls[0] as TRadioButton).SetFocus;
شاید برای شما هم اتفاق افتاده باشه که نیاز به کلیک در dbgrid داشته باشید به عنوان مثال در داخل dbgrid چک باکس دارید و میخواهید با کلیک روی ان انتخاب شود . در این صورت از کد زیر میتونید استفاده کنید :
procedure DbGridCellClick(Column: TColumnEh);
begin
if DbGrid.SelectedField.DataType=ftBoolean then
// statement
end;
Edit1.Text:=StringReplace(Edit1.Text,' ','',[rfReplaceAll]);
کد ملی شماره ای است 10 رقمی که از سمت چپ سه رقم کد شهرستان ، شش رقم بعدی کد منحصر به فرد برای فرد دارنده و رقم آخر آن هم یک رقم کنترل است که از روی 9 رقم سمت چپ بدست می آید. برای بررسی کنترل کد کافی است مجدد از روی 9 رقم سمت چپ رقم کنترل را محاسبه کنیم
از آنجایی که درسیستم کد ملی معمولا قبل از کد تعدادی صفر وجود دارد.(رقم اول و رقم دوم از سمت چپ کد ملی ممکن است صفر باشد) و در بسیاری از موارد ممکن است کاربر این صفرها را وارد نکرده باشد و یا نرم افزار این صفرها را ذخیره نکرده باشد بهتر است قبل از هر کاری در صورتی که طول کد بزرگتر مساوی 8 و کمتر از 10 باشد به تعداد لازم (یک تا دو تا صفر) به سمت چپ عدد اضافه کنید. ساختار کد ملی در زیر نشان داده شده است
1- برای محاسبه رقم کنترل از روی سایر ارقام ، هر رقم را در موقعیت آن ضرب کرده و حاصل را با هم جمع می کنیم.
2- مجموع بدست آمده از مرحله یک را بر 11 تقسیم می کنیم
3- اگر باقیمانده کمتر از 2 باشد ، رقم کنترل باید برابر باقیمانده باشد در غیر اینصورت رقم کنترل باید برابر یازده منهای باقیمانده باشد
به عنوان مثال
4709450552
باید از سمت چپ
یکی یکی اعداد را از 10 به پایین ضرب کنیم البته تا 9 تا عدد یعنی 470945055
40=10*4
63=9*7
0=8*0
63=7*9
24=6*4
25=5*5
0=4*0
15=3*5
10=2*5
خوب
حالا باید تمام این حاصلضرب ها رو با هم جمع کنیم
که میشه 240
حالا باید این عدد رو تقسیم بر 11
کنیم البته ما با باقیمانده تقسیم کار داریم
اگر باقیمانده از 2 کوچکتر بود همون
عدد میشه رقم آخر کد ملی
اما اگر از 2 بیشتر بود 11 رو منهای
باقیمانده میکنیم
در این مثال باقیمانده عدد 9 میشه
2=9-11
پس کد اخر میشه عدد 2 حالا به کد ملی ما نگاه کنید 4709450552
شما هم میتونید از همین روش بفهمید که
کد ملی درست وارد شده یا نه
امید وارم خوب تونسته باشم توضیح بدم
ادامه مطلب ...
درصورتی که از دیتابیس فاکس پرو در داس استفاده کنید برای استفاده از ان در ویندوز کاراکتر ها به هم ریخته و ناخوانا میشوند .توابع زیر در دلفی این مشکل را حل میکنند
ادامه مطلب ...
با استفاده از کد زیر شما می توانید یک رشته را با دو الگوریتم SAH1 , MD5 که به طور همزمان استفاده میشوند Hash نمایید همچنین با تغییر در برنامه قادر خواهید بود فایل را نیز hash کنید تنها کافی است به جای HashStringAsHex از دستور HashStreamAsHex استفاده کنید .
uses idhash,idhashsha, IdHashMessageDigest
procedure hash(Code:string):string;
var idmd5: TIdHashMessageDigest5;
sthash: TIdHashSHA1;
str:string;
begin
idmd5 := TIdHashMessageDigest5.Create;
sthash := TIdHashSHA1.Create;
try
str := idmd5.HashStringAsHex(Code);
result:=sthash.HashStringAsHex(str);
finally
idmd5.Free;
sthash.Free;
end;
end;
یک کد جالب که با توجه به نیازتون اگر تغییرات لازم بدین کاربرد جالبی میتونه داشته باشه
procedure TForm1.FormCreate(Sender: TObject);
var
FullRgn, ClientRgn, ButtonRgn: THandle;
Margin, X, Y: Integer;
begin
Margin := (Width - ClientWidth) div 2;
FullRgn := CreateRectRgn(0, 0, Width, Height) ;
X := Margin;
Y := Height - ClientHeight - Margin;
ClientRgn := CreateRectRgn
(X, Y, X + ClientWidth, Y + ClientHeight) ;
CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF) ;
X := X + Button1.Left;
Y := Y + Button1.Top;
ButtonRgn := CreateRectRgn
(X, Y, X + Button1.Width, Y + Button1.Height) ;
CombineRgn(FullRgn, FullRgn, ButtonRgn, RGN_OR) ;
SetWindowRgn(Handle, FullRgn, True) ;
end;
یکسری از این دستورات قبلا هم گذاشتم ولی دقیقا نمیدونم کدوم کدا رو گذاشتم . اینا رو توی یک وبلاگ دیدم یک جورایی کپی برداری ولی چون صفحه رو ذخیره کرده بودم ادرس وبلاگ نتونستم پیدا کنم
ممکن روزی به درد بخورن
ادامه مطلب ...یک تعداد کد روی سیستم داشتم که اینجا میذارم امیدوارم مورد استفاده دوستان واقع بشه .
پاک کردن، کپی کردن و انتقال یک فایل یا فولدر
غیر فعال کردن Task Manager
بدست آوردن تعداد فایل های موجود در سطل آشغال به همراه سایز آنها
بدست آوردن نام Cpu و سرعت آن
فرمت درایو
اجرای Task Manager
مشخص نمودن اجراء بودن یک پروسس
غیر فعال کردن Ctrl+Alt+Delet
ادامه مطلب ...سورس کد زیر را می توانید برای دانلود یک فایل از طریق اینترنت استفاده نمائید.فراموش نکنید که در ابتدای برنامه حتما یونیت اشاره شده در ابتدای سورس را فراخوانی کنید
uses ExtActns, ...
type
TfrMain = class(TForm)
...
private
procedure URL_OnDownloadProgress
(Sender: TDownLoadURL;
Progress, ProgressMax: Cardinal;
StatusCode: TURLDownloadStatus;
StatusText: String; var Cancel: Boolean) ;
...
implementation
...
procedure TfrMain.URL_OnDownloadProgress;
begin
ProgressBar1.Max:= ProgressMax;
ProgressBar1.Position:= Progress;
end;
function DoDownload;
begin
with TDownloadURL.Create(self) do
try
URL:='http://z.about.com/6/g/delphi/b/index.xml';
FileName := 'c:\ADPHealines.xml';
OnDownloadProgress := URL_OnDownloadProgress;
ExecuteTarget(nil) ;
finally
Free;
end;
end;
{
Note:
URL property points to Internet
FileName is the local file
}
شما برای کار با رجیستری در دلفی نیاز به تعریف و نوشتن هیچ کلاس و متد و آبجکت ندارید شرکت برای کار با رجیستر یه یونیت با همین نام Registry ارائه داده است برای کار با رجیستر شامل کلاس TRegistry که دارای روال ها و تابع های خاصی مثل
CreateKey یا WriteString یا DeleteKey یا MoveKey یا ReadFloat و....میباشد. نحو اصلی کار با رجیستری و ثبت کردن مقدار ایجاد یک کلید و.... به این صورت می باشد که :
ابتدا یونیت رجیستری رو به لیست Uses یونیتمون اضافه می کنیم به شکل زیر :
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Registry;
متغیر باید از نوع کلاس TRegistry تعریف کنیم تا بتوانیم از توابع آن ها استفاده کنیم. به شکل زیر
Var
B:TRegistry;
سپس باید یک نوع از کلاس را بوجود بیاوریم که طبق معمول باید از constructorایجاد کنیم مربوط به اکثر کلاس ها استفاده کنیم به شکل زیر
b:=TRegistry.Create;
برای کار با رجیستری باید به یکی از کلیدهای زیر اشاره کنیم که عبارتند از :
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_PERFORMANCE_DATA
HKEY_CURRENT_CONFIG
HKEY_DYN_DATA
برای این که یکی از این مقدار ها را انتخاب کنیم باید از پراپرتی RootKey به شکل زیر استفاده کنید :
B.RootKey:=HKEY_LOCAL_MACHINE;
سپس باید آدرس مربوط به کلیدی که می خواهیم در آن اعمال انجام دهیم رو با استفاده از تابع OpenKey مشخص کنیم به شکل زیر :
B.OpenKey(آدرس کلید مربوطه , اجازه بوجود آوردن کلید )
در مورد آدرس شما باید آدرس کلید مربوطه رو بدونkey root آن تایپ کنید و به صورت یک string در مورد اجازه بوجود آوردن که با یک مقدارFalse یا True مقداردهی میشود شما می توانید با set کردن آن به صورت True به آن اجازه بدهید تا یک کلید با آدرس که شما تایپک کردید بوجود بیاورد البته به شما یشنهاد می کنم که مقدار مربوط را همیشه False کنید چون شما می توانید با تابع CreateKey یک key بسازید پس بهتره که شما از تابع اپن کیOpenKey آدرس کلید مربوطه تان را لود کنید .
سپس شما در این مرحله قادر هستید تا هر کاری انجام دهید مثلا می توانید :
کلید بسازید ( منظورم کلید رجیستری است)یک رشته وارد سازید و یا یک عدد و یا یک زمان وارد سازید و یا یک رشته را فرا بخوانید و یا یک عدد را فرا بخوانید و یا کلیدی را از بین ببرید و یا کلیدی را تغییر مکان (MoveKey) کنید و تمامی اعمال که می خواهید را انجام دهید . برای مثال به کد زیر یک نگاه بیندازید این کد task manager (ctrl+Alt+Delete) را غیر فعال می کند:
var
dbm: Tregistry;
begin
DbM:= tregistry.Create;
DbM.RootKey:= HKEY_CURRENT_USER;
DbM.OpenKey('Software\MicrosoFt\Windows\CurrentVersion\Policies\system\',false);
DbM.WriteInteger('DisableTaskMgr',0);
DbM.Free;
end;
فکر کنم که کار با توابع رجیستری رو آموخته باشید همین طور که می بینید تمام کار ها گفته شده انجام شده و تمام تابع ها آشنا می باشد در ضمن تابع WriteInteger توابعی از این دست برای ثبت یک عدد ویا یک مقدار در رجیستری می باشد این تابع ها خیلی زیادند وهمه دارای ساختمانی به شکل زیر می باشند
نام تابع (نام مقداری که باید از نو ثبت شود و یا با نویسی شود , مقدار)
همچنین توابعی نیز برای خوندن یک مقدار و باز گرداندن یک مقدار ووجود دارد مثل ReadString که اکثرا داری یک نوع ساختمان می باشند برای مثال با استفاده از کد زیر می توانید مسیر کوکی ها را از رجیستری بخوانید :
var
reg : tregistry;
Cooki:String;
begin
reg := tregistry.Create;
reg.RootKey := hkey_current_user ;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',true);
Cooki := reg.ReadString('Cookies');
end;
ساختمان تابع های خواندنی به شکل زیر می باشد
نام تابع (نام عبارتی که باید خوانده شود )
دید که به چه سادگی میشه با رجیستری در دلفی بازی کرد .