PDA

View Full Version : آموزش چک کردن نام وب سايت با Delphi و چند نکته



Ahmad Chehreghani
یک شنبه 12 آبان 1387, 17:19 عصر
با سلام
ابتدا روي فرم يک Edit و يک Button قرار دهيد.
داخل رويداد onclick مربوط به Button اسکريپت زير را مي نويسيم.


var c:TComponent;
i:Integer;

begin
for i := 0 to Self.ComponentCount - 1 do
begin
c:=Components[i];
if c is TEdit then TEdit(c).Text:=Trim(TEdit(c).Text);
end;
end;


خوب کد بالا تمامي edit هاي فرم را پيدا کرده و کاراکتر فاصله را از دو طرف متن آن ها پاک مي کند.
دستور trim کار پاک کردن متن ها را انجام مي دهد. شما مي توانيد از Ltrim يا Rtrim نيز استفاده کنيد.
کد ما در دلفي 7 به خوبي کار خواهد کرد اما بهتر است کد خود را مختصر تر و زيبا تر در دلفي هاي ورژن بالاتر از 2005 به صورت زير بنويسيم:


var c:TComponent;
begin
for c in self do
if c is TEdit then TEdit(c).Text:=Trim(TEdit(c).Text);
end;

در دلفي به جاي for each از دستور for in استفاده کرديم و سعي مي کنيم در دستورهاي بعدي بيشتر هم استفاده کنيم.
حالا به قسمت چک کردن نام وب سايت مي رسيم.
در ابتدا تابعي مي نويسيم که يک رشته به عنوان نام سايت دريافت کند و بگويد که کاراکتر هاي به کار رفته در آن صحيح است يا خير.


Function IsCorrectWebsite(s:string):Boolean;
var k:Char;
begin
Result:=False;
for k in s do
if not (UpCase(k)in ['A'..'Z','0'..'9','-','.']) then Exit;
Result:=True;
end;

کار UpCase در کد بالا بزرگ کردن کاراکتر هاست، شما مي تونيد از UpperCase براي بزرگ کردن کاراکترهاي يک رشته استفاده کنيد.
حالا به ادغام کد ها مي رويم
کد مربوط به Button خود را به کد زير تغيير مي دهيم:


var c:TComponent;
begin
for c in self do
if c is TEdit then TEdit(c).Text:=Trim(TEdit(c).Text);
if not IsCorrectWebsite(Edit1.Text) then
Raise Exception.Create('Website Error');
end;

در کد بالا به جاي نوشتن Raise Exception مي توانستيد از showmessage نيز استفاده کنيد.
Exception ها هنگامي اتفاق مي افتند که يک runtime error در نرم افزار اتفاق افتاده باشد(مثلا تقسيم بر صفر). اين خطا ها را شما مي توانيد با ApplicationEvents کنترل کنيد و پيغام سيستم را مديريت نماييد. فرض کنيد شما مي خواهيد نرم افزار حسابداري تهيه کنيد،
حال بايد شما هميشه مواظب باشيد خطاي تقسيم بر صفر اتفاق نيفتد يا کاربر اعداد را به درستي وارد نمايد و ...
شما با اضافه نمودن ApplicationEvents به فرم خود خطا را گرفته و آن را تحليل مي کنيد و پيغام مناسب را به کاربر نمايش مي دهيد! ( براي توضيحات بيشتر تلاش کنيد!!! :لبخند: )

خوب برگرديم سر اصل مطلب

حالا براي کامل تر شدن کد مربوط به چک کردن نام وب سايت ، کد تابع IsCorrectWebsite رو به کد زير تغيير مي دهيم:



Function IsCorrectWebsite(s:string):Boolean;
var k:Char;
begin
Result:=False;
if RightStr(s,1)='.' then Exit;
if Pos('.',s)<=1 then Exit;
if AnsiStartsText('http://',s) then s:=Copy(s,8,length(s));
for k in s do
if not (UpCase(k)in ['A'..'Z','0'..'9','-','.']) then Exit;
Result:=True;
end;

راستي StrUtils رو به Uses اضافه کنيد تا بتونيد از RightStr استفاده کنيد.
کار RightStr : به تعداد دلخواه کاراکتر از سمت راست رشته جدا کرده و برمي گرداند که در مثال ما چک مي شود که اگر کاراکتر شماره 1 از راست رشته مساوي نقطه نباشد.(آخر سايت نبايد نقطه باشد.)
خوب تقريبا برنامه ما کامل شد و مي تونه 99% خطاها رو بگيره!
100% رو چکار کنيم؟
خوب اين کار رو خود دلفي براي ما انجام مي ده ديگه!!!:قهقهه:
کد IsCorrectWebsite رو به کد زير تغيير بديد:


Function IsCorrectWebsite(s:string):Boolean;
begin
Result:=PathIsURL(pchar(s));
end;

يادتون نره shlwapi رو به Uses اضافه کنيد.

مطلبي که خونديد نوشته Henk Schreij بود البته با کمي تغييرات در نحوه گفتار.
اميدوارم اين مطلب مورد توجهتون قرار گرفته باشه
موفق و پيروز باشيد
يا علي