PDA

View Full Version : نکات دلفی و توابع کاربردی



babak_delphi
یک شنبه 25 فروردین 1387, 00:26 صبح
سلام خدمت دوستان
من چند تا پست در زمینه توابع کاربردی و خوب دلفی نوشتم
حالا به سفارش آقای کشاورز این تاپیک رو ساختم تا از این به بعد این توابع رو اینجا قرار بدم
از دوستان هم اگر کسی همکاری کنه مجموعه خوبی از توابع خواهیم داشت که به درد همه دوستان خواهد خورد انشاالله




تابعی جهت بدست آوردن ولوم سریالِ دیسک 2#
چگونه Edit فقط عدد بگیرد 3#
چگونه برنامه مان فقط یک نسخه اجرا شود 6#
تغییر رزولوشن مانیتور 7#
چگونه Edit فقط عدد بگیرد 12#
ساختن کتابخانه توابع 14#
پاک کردن تمام EDIT های فرم 15#

babak_delphi
دوشنبه 26 فروردین 1387, 00:41 صبح
با این تابع می توانید ولوم سریالِ دیسک را بدست آوردید



Function GetDiscVolSerialID(cDriveName : char) :DWORD;
var
dwtemp1,dwtemp2 : DWORD;
begin
GetVolumeInformation(PChar(cDriveName + ':\'),Nil,0,@Result , dwtemp1 ,dwtemp2,Nil, 0);
end;

babak_delphi
دوشنبه 26 فروردین 1387, 00:47 صبح
تابعی که میشه اون رو در رویدادهای کیبورد برای Edit قرار داد تا فقط عدد بگیره



Function IsNum(ch : char) : char;
begin
if Pos(ch,#8#13'1234567890') = 0 then
ch := #0;
Result := ch;
end;

babak_delphi
دوشنبه 26 فروردین 1387, 01:03 صبح
شما هم اگر توابع کاربردی دارید بگذارید تا تاپیک کاربردی بشه

vcldeveloper
دوشنبه 26 فروردین 1387, 02:44 صبح
اگر بتونید در صفحه اول تاپیک (پست اول) فهرستی از نکات را آماده کنید، با دسته بندی موضوعی، و پست های بی ربط (مثل تشکر، یا سوال) را گزارش کنید تا حذف بشند، تاپیک مفیدی خواهد شد. در صورت انجام این کار، تاپیک بصورت اعلان در میاد.

موفق باشید

babak_delphi
دوشنبه 26 فروردین 1387, 03:22 صبح
برای اینکه بعد از اجرای برنامه اگر کاربر روی آیکن برنامه کلیک کرد ، همزمان چند نسخه از اون اجرا نشه می تونیم فایل DPR پروژه رو بصورت زیر تغییر بدیم



uses
windows;
var
hmutex : THandle;
begin
hmutex := CreateMutex(nil,false,'OneCopyMutex');
if waitforsingleobject(hmutex, 0) <> wait_timeout then
begin
Application.Initialize;
.
.
.
Application.Run;
end;
end.

computer-mag
دوشنبه 26 فروردین 1387, 08:27 صبح
تغییر رزولوشن مانیتور





function SetDisplay1024x768: Boolean;
var
DevMode: TDeviceMode;
begin
EnumDisplaySettings(nil, 0, DevMode);
DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
DevMode.dmPelsWidth := 1024;
DevMode.dmPelsHeight := 768;
Result := ChangeDisplaySettings(DevMode, CDS_UPDATEREGISTRY)
= DISP_CHANGE_SUCCESSFUL;
end;


این رو از وبلاگی برداشتم ولی چون قدیمی هست منبعش رو متاسفانه یادم نیست

hr110
دوشنبه 26 فروردین 1387, 10:07 صبح
اگر بتونید در صفحه اول تاپیک (پست اول) فهرستی از نکات را آماده کنید، با دسته بندی موضوعی، و پست های بی ربط (مثل تشکر، یا سوال) را گزارش کنید تا حذف بشند، تاپیک مفیدی خواهد شد. در صورت انجام این کار، تاپیک بصورت اعلان در میاد.

موفق باشید

جناب کشاورز شما چرا!؟ در اعلانات این بخش تاپیکی به نام "نکات برنامه نویسی در دلفی" تاپیک شماره 52234 که به این امر اختصاص داده شده.

لطفاً دوستان تمامی نکات رو در این تاپیک مرقوم بفرمایند، ضمنا در این اولی پست نیز ایندکس وجود دارد.

با عرض پوزش و تشکر فراوان

Vahid_moghaddam
دوشنبه 26 فروردین 1387, 11:28 صبح
تاپیک نکات برنامه نویسی در دلفی مناسب تر نیست؟ البته با یه فهرست بندی موضوعی.

H_T_O_A
دوشنبه 26 فروردین 1387, 15:33 عصر
من چند تا پست در زمینه توابع کاربردی و خوب دلفی نوشتم

اگه میشه ادرس تاپیک هایی که قبلا نوشتید بدید

H_T_O_A
دوشنبه 26 فروردین 1387, 16:18 عصر
تابعی که میشه اون رو در رویدادهای کیبورد برای Edit قرار داد تا فقط عدد بگیره



Function IsNum(ch : char) : char;
begin
if Pos(ch,#8#13'1234567890') = 0 then
ch := #0;
Result := ch;
end;





از این کد هم می توان به منظور مورد نظر رسید



if key = #13 then
frmAddNewItem.SelectNext(edtMablaq,true,false);
if not(key in ['0'..'9',#8]) then
begin
key:=#0;
beep;
end;

H_T_O_A
دوشنبه 26 فروردین 1387, 16:23 عصر
تابعی که میشه اون رو در رویدادهای کیبورد برای Edit قرار داد تا فقط عدد بگیره



Function IsNum(ch : char) : char;
begin
if Pos(ch,#8#13'1234567890') = 0 then
ch := #0;
Result := ch;
end;





از این کد هم می توان به منظور مورد نظر رسید







if not(key in ['0'..'9',#8]) then
begin
;key:=#0
;beep
;end

H_T_O_A
دوشنبه 26 فروردین 1387, 16:27 عصر
تابعی که میشه اون رو در رویدادهای کیبورد برای Edit قرار داد تا فقط عدد بگیره



Function IsNum(ch : char) : char;
begin
if Pos(ch,#8#13'1234567890') = 0 then
ch := #0;
Result := ch;
end;



از این کد هم میشه استفاده کرد




if not(key in ['0'..'9',#8]) then
begin
;key:=#0
;beep
;end

babak_delphi
دوشنبه 26 فروردین 1387, 18:52 عصر
شما خودتون می تونید مثل دلفی یا هر زبان برنامه نویسی دیگر ، برای خود کتابخانه ای از توابع بنویسید و با کپی کردن آن در پروژه ها یا اضافه کردن آن به مسیر فایلهای دلفی در تنظیمات کامپایلر و سپس USE کردن در فرمها ، می توانید از توابع موجود در آن در تمام پروژه هایتان استفاده کنید
فقط باید توابع را عمومی بنویسید و مثلا از نام فرم یا در کل نام کنترل استفاده نکنید و نهایتا اگر مجبور به این کار بودید آن کنترل یا نام آن (مورد دوم بهتر است) را به صورت پارامتر به توابعتان ارسال کنید

babak_delphi
دوشنبه 26 فروردین 1387, 18:53 عصر
در اکثر فرمهایی که برای دریافت اطلاعات از کاربر هستند ، معمولا دکمه ای داریم که برای پاک کردن فرم یا در حقیقت پاک کردن محتوای Edit ها بکار میره
میتونید کد زیر رو برای این دکمه قرار بدین تا لازم نباشه که برای هر فرم تک تک edit ها رو بنویسید
این کد به این صورت کار میکنه که روی فرم تمام Edit ها رو پیدا میکنه و اونها رو Clear می کنه


procedure clear_Edits;
var
cnt : integer;
begin
for cnt := 0 to ComponentCount - 1 do
begin
if Components[cnt].ClassName = 'TEdit' then
TEdit(Components[cnt]).Clear
end;
end;


حالا اگه توابعتون رو در یک کتابخونه نگهداری می کنید و اون Unit رو در فرمتون Use می کنید ، می تونید این تابع رو به شکل زیر تغییر بدین تا با فراخوانی از یک Unit دیگه هم بدرستی کار کنه



procedure clear_Edits;
var
cnt : integer;
begin
for cnt := 0 to Screen.ActiveForm.ComponentCount - 1 do
begin
if (Screen.ActiveForm.Components[cnt].ClassName = 'TEdit') then
TEdit(Screen.ActiveForm.Components[cnt]).Clear
end;
end

babak_delphi
دوشنبه 26 فروردین 1387, 19:15 عصر
جناب آقای hr110 من اون تاپیک که اعلان شده رو دیدم
خب این هم یک تاپیکه
به هر حا شما یا آقای کشاورز عزیز اگر صلاح می دونید این پستها رو به اونجا منتقل کنید و به من هم اطلاع بدید
اگر هم که نه ، همینجا ادامه میدیم

یا حق

hr110
دوشنبه 26 فروردین 1387, 19:23 عصر
قرار بود که تمامی مطالب و موضوعات در اون تاپیک پیگیری شوند که کاربران از سردرگمی رها بشن و همچنین مطالب تکراری عنوان نشه.

لطفاً اینگونه مطالب رو در همون تاپیک ادامه دهید، به این دلیل من این تاپیک رو قفل میکنم.