برنامه نویس

به وبلاگ خودتان خوش آمدید.

برنامه نویس

به وبلاگ خودتان خوش آمدید.

کد استفاده Enter به جای Tab در دلفی


خاصیت 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;
یا از این کد هم میتونید استفاده کنید.
در رویداد onkeypress :

if (key=#13) then
begin
Key := #0;
Perform (CM_DialogKey, VK_TAB, 0);
end;


استفاده از فایل ini در دلفی

به عنوان نمونه اگر فایل 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 برای انتخاب folder

کد زیر به جای انتخاب فایل در 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;


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

program ProjectExtractPathDemo;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
    Path : string ;
begin
  Path:='C:\Program Files\Borland';
  Writeln(ExtractFileName(Path));//return Borland

  Path:='C:\Program Files\Borland\';
  Writeln(ExtractFileName(Path));//return ''

  Path:='C:\Program Files\Borland\';
  Writeln(ExtractFileName(ExcludeTrailingPathDelimiter(Path)));//return Borland


  Readln;
end.

یا :
uses SysUtils;

Delete(Path, 1, LastDelimiter('\', Path));

SetFocus بر روی RadioGroup1 در دلفی

اگر روی RadioGroup  بخواهیم فاکوس کنیم میتوانیم از کد زیر استفاده نماییم :


 (RadioGroup1.Controls[0] as TRadioButton).SetFocus;

on click در dbgrid دلفی

شاید برای شما هم اتفاق افتاده باشه که نیاز به کلیک در dbgrid داشته باشید به عنوان مثال در داخل dbgrid چک باکس دارید و میخواهید با کلیک روی ان انتخاب شود . در این صورت از کد زیر میتونید استفاده کنید :

procedure DbGridCellClick(Column: TColumnEh);

begin

  if DbGrid.SelectedField.DataType=ftBoolean then

    //  statement

end;

کد برداشتن space از وسط رشته در دلفی

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
شما هم میتونید از همین روش بفهمید که کد ملی درست وارد شده یا نه
امید وارم خوب تونسته باشم توضیح بدم 

 

ادامه مطلب ...

تبدیل کاراکترهای فاکس پرو در ویندوز به نحوی که قابل خواندن باشند (با دلفی)

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

 

ادامه مطلب ...

hash کردن با Indy 10 در دلفی

با استفاده از کد زیر شما می توانید یک رشته را با دو الگوریتم 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

}

تشخیص پلتفورم ویندوز

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

if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
کدتان را وارد کنید//
end Else
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
begin
کدتان را وارد کنید//
end;

 

نحوه برقراری ارتباط دلفی با رجیستری ویندوز!!!!!!!!

شما برای کار با رجیستری در دلفی نیاز به تعریف و نوشتن هیچ کلاس و متد و آبجکت ندارید شرکت برای کار با رجیستر یه یونیت با همین نام 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;

ساختمان تابع های خواندنی به شکل زیر می باشد

نام تابع (نام عبارتی که باید خوانده شود )

دید که به چه سادگی میشه با رجیستری در دلفی بازی کرد .