PDA

View Full Version : چند روتین کاربردی که (سورس)



khorsandreza
سه شنبه 20 مرداد 1388, 14:54 عصر
جدا سازی رشته ای عددی با استفاده از کاما
مثال: 12,300,000




FUNCTION Cama(A : String) : String;
Var
// N : Integer;
S : String;
T : String[1];
Begin
IF A='' Then A:='0';
If A[1] = '-' Then
Begin
Delete(A, 1, 1);
T := '-';
End
Else T := '';
If Length(A) <= 3 Then
Begin
Cama := T+A;
Exit;
End;
// N := 0;
S := '';
Repeat
// Inc(N,3);
S := '،'+Copy(A,Length(A)-2,3)+S;
Delete(A,Length(A)-2,3);
Until Length(A) <= 3;
S := A + S;
If S[1] = 'و' Then Delete(S,1,1);
Cama := T+S;
End;




این تابع یک مقدار عددی که String تبدیل شده را دریافت و با علامت کاما از هم جدا میکند

================================================== ==
تابع تغییر زبان
با استفاده از این تابع میتوانبد حین ورود به محیط Edit صفحه کلید را فارسی یا لاتین کنید
مثال :

SetLanguage(farsi)
or
SetLanguage(English);)








procedure SetLanguage (Lan:TLanguage) ;
begin
if Lan = Farsi then
Begin
If HIBYTE(LOWORD(GetVersion)) = 0 Then
LoadKeyBoardLayout ( '00000429', KLF_ACTIVATE)
Else LoadKeyBoardLayout ( '00000429', KLF_ACTIVATE)
End
else LoadKeyBoardLayout ( '00000409', KLF_ACTIVATE);
end;





تذکر :
شما این خط دستور را در قسمت تایپ Unit بنویسید

Type
TLanguage=(Farsi, English);


==========================================

khorsandreza
سه شنبه 20 مرداد 1388, 14:57 عصر
با این فانکش میتوانبد فضای خالی (ُSpace) ابتدا و انتهای رشته را حذف کنید زمانی به درد میخورد که طول واقعی یک رشته را بدست بیاوری




Function Alltrim(S : String ):String;
Var
I : Integer;
Begin
IF (S='')or(S=Null) Then
Begin
Result:='*';
Exit;
End;
For I:= 1 To Length(S) Do
while S[I]=chr(32) do delete ( S , I , 1 );
Result := S; { CREATE FUNCTION OUTPUT ... }
End;

K.Mohammadreza
پنج شنبه 22 مرداد 1388, 16:40 عصر
در مورد تابع جداکننده ارقام بصورت سه رقم سه رقم بايد عرض کنم که کار اضافي زيادي انجام داديد و نيازي به اينم همه کد نيست تابع زير بسيار بهتر و راحتتر است



function GetNumber(Str: String): String;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(Str) do
if (Str[I] in ['0'..'9'])then
Result := Result + Str[I];
end;

function Set3Digit(StrSource: String): String;
var
i, j: Integer;
begin
Result := '';
StrSource := GetNumber(StrSource);
j := 0;
for i := Length(StrSource) downto 1 do
begin
Result := StrSource[i] + Result;
Inc(j);
if((j mod 3) = 0)and(i <> 1)then
Result := ',' + Result;
end;
end;



و اگر خواستيد در زمان تايپ اعداد در يک کنترل Edit اعداد همزمان سه رقم سه رقم جداد شوند در رويدادOnchange مربوط به Edit کدهاي زير را بنويسيد



procedure TfrmPersonalInfo.edit1PropertiesChange(Sender: TObject);
begin
edit1.Text := Set3Digit(edit1.Text);
edit1.SelStart := Length(edit1.Text);
end;


بقيه توابع هم کاربرد چنداني ندارند

behnam_dr
پنج شنبه 22 مرداد 1388, 23:21 عصر
با این فانکش میتوانبد فضای خالی (ُSpace) ابتدا و انتهای رشته را حذف کنید زمانی به درد میخورد که طول واقعی یک رشته را بدست بیاوری



این کدی که شما فرمودید کجا به کار میاد؟
خوب تابع Trim این کار رو انجام میده دوست عزیزم .

Hsimple11
جمعه 23 مرداد 1388, 00:37 صبح
تابع Trim این کار رو انجام میده دوست عزیزم . این کد کجا به کار میاد؟
زمانی که میخواین اشتباهات کاربر و خوردن یک Space توی نتیجه رشته تاثیر نذاره. بخصوص هنگام گرفتن Username و Password یا هنگام گرفتن کوئری و ...

behnam_dr
جمعه 23 مرداد 1388, 01:40 صبح
زمانی که میخواین اشتباهات کاربر و خوردن یک Space توی نتیجه رشته تاثیر نذاره. بخصوص هنگام گرفتن Username و Password یا هنگام گرفتن کوئری و ...

خوب باز هم تابع TRIM یا TRIMleft,right قادر به انجام این کاره!!!

Hsimple11
جمعه 23 مرداد 1388, 02:01 صبح
خوب باز هم تابع TRIM یا TRIMleft,right قادر به انجام این کاره!!!

درسته. من هم همین رو گفتم.

behnam_dr
جمعه 23 مرداد 1388, 11:03 صبح
تابع تغییر زبان
با استفاده از این تابع میتوانبد حین ورود به محیط Edit صفحه کلید را فارسی یا لاتین کنید
مثال :
SetLanguage(farsi)
or
SetLanguage(English);)




نقل قول:

procedure SetLanguage (Lan:TLanguage) ;
begin
if Lan = Farsi then
Begin
If HIBYTE(LOWORD(GetVersion)) = 0 Then
LoadKeyBoardLayout ( '00000429', KLF_ACTIVATE)
Else LoadKeyBoardLayout ( '00000429', KLF_ACTIVATE)
End
else LoadKeyBoardLayout ( '00000409', KLF_ACTIVATE);
end;



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

windows.ActivateKeyboardLayout(hkl_next,0);

khorsandreza
یک شنبه 25 مرداد 1388, 00:53 صبح
این همه خط برای یه کار ساده لازم نیست دوست عزیزم با یه خط میشه

windows.ActivateKeyboardLayout(hkl_next,0);

من این روتین را در یک Unit قرار دادم و صرفا با دستور





SetLanguage(farsi);



موقع ورود به Edit نسبت به نیاز فارسی یا لاتین میکنم
فکر میکنم کار ساده تر و خواناتر هست خوب اگه دوستان نظر دیگر یا روش کار دیگر دارند نمی تواند دیگر روشها اشتباه باشه

behnam_dr
یک شنبه 25 مرداد 1388, 13:00 عصر
من عرض نکردم کد شما اشتباست . تمام تلاش یه برنامه نویس بهینه نوشتن یه کد است.

matinebi
چهارشنبه 28 مرداد 1388, 23:02 عصر
در مورد تابع جداکننده ارقام بصورت سه رقم سه رقم بايد عرض کنم که کار اضافي زيادي انجام داديد و نيازي به اينم همه کد نيست تابع زير بسيار بهتر و راحتتر است



function GetNumber(Str: String): String;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(Str) do
if (Str[i] in ['0'..'9'])then
Result := Result + Str[i];
end;


function Set3Digit(StrSource: String): String;
var
i, j: Integer;
begin
Result := '';
StrSource := GetNumber(StrSource);
j := 0;
for i := Length(StrSource) downto 1 do
begin
Result := StrSource[i] + Result;
Inc(j);
if((j mod 3) = 0)and(i <> 1)then
Result := ',' + Result;
end;
end;



و اگر خواستيد در زمان تايپ اعداد در يک کنترل Edit اعداد همزمان سه رقم سه رقم جداد شوند در رويدادOnchange مربوط به Edit کدهاي زير را بنويسيد



procedure TfrmPersonalInfo.edit1PropertiesChange(Sender: TObject);
begin
edit1.Text := Set3Digit(edit1.Text);
edit1.SelStart := Length(edit1.Text);
end;


بقيه توابع هم کاربرد چنداني ندارند


با تشکر از شما دوست عزیز
خوب وقتی که میخوایم عدد موجود در ادیت رو به بانک ببریم باید کاما رو حذف کنیم میشه تابع حذف کاما رو هم قرار دهید
با تشکر

behnam_dr
پنج شنبه 29 مرداد 1388, 14:25 عصر
در این مواقع بهتره visable ادیت مد نظر رو false کنید و این تابع ایجاد کاما رو برای یه label نمایشی بکار ببرید تا در داده اصلی شما تغییری انجام نشود که مجددا بخواهید اونو پاک کنید یا اگه میخواهید همزمان با داده وارد کردن کاما هم داشته باشید معمولش اینه که یه لیبل بالای ادیتتون بزارید و در لیبل کاما وارد شود

hadisalahi2
پنج شنبه 29 مرداد 1388, 16:40 عصر
البته فکر کنم اگه برای فیلدتون نوع Currency یا money رو انتخاب کنید ، این کار توسط خود بانک اطلاعاتی انجام بگبره و دیگه نیازی به این کارها نباشه

tdkhakpur
پنج شنبه 29 مرداد 1388, 19:15 عصر
با تشکر از شما دوست عزیز
خوب وقتی که میخوایم عدد موجود در ادیت رو به بانک ببریم باید کاما رو حذف کنیم میشه تابع حذف کاما رو هم قرار دهید
با تشکر
سلام
ببینید شما فقط برای نمایش دادن- عدد را بصورت کاما به کار ببرید(یعنی جایی که میخواهید عدد بصورت کاما دار رو صفحه نمایش چاپ شود یا روی پرینتر برود ) و اصل عدد را تغییر ندهید اونوقت احتیاجی به تابع برگشت به اصل را نخواهید داشت..

khorsandreza
پنج شنبه 29 مرداد 1388, 23:10 عصر
این تابع بیشتر برای نمایش دادن است همانطور که دوستمان گفتند در label و محل های که قابل ادیت نیستد استفاده کنید اگر بخواهید که موقع ویرایش کاما حذف شود میتونید از EditFormat و DisplayFormat فیلد مربوطه استفاده کنید مطابق شکل پیوستی