امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
سه رقم سه رقم جدا كردن اعداد در edit
نویسنده پیام
tooraj آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 1
تاریخ عضویت: مرداد ۱۳۹۱

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #1
سه رقم سه رقم جدا كردن اعداد در edit
سلام خدمت تمام دوستان و اساتيد گرامي
همينطوري تو سايتهاي دلفي مي گشتم ديدم اينجا يه مدير نسبتا قوي در دلفي داره كه به سوالات زيادي جواب داده گفتم شايد جواب يه سوال قديمي منم داشته باشه يا اگه دوستاي ديگه ميدونن ممنون ميشم جواب بدن
سوال اينه : جدا كردن سه رقم سه رقم اعداد يه فانكشن خيلي سادس كه بر حسب تعداد ارقام عدد مورد نظر در محل هاي لازم ويرگول ميزاره كه اگه در انتهاي نوشتن يه عدد در يه اديت و هنگام خارج شدن فوكوس از اديت اونو بزاري خيلي راحت اعداد رو جدا ميكنه اما اگه همين كار رو در طي نوشتن عدد در اديت انجام بدي يعني همچنان كه طرف عدد رو در اديت تايپ ميكنه سه رقم سه رقم جدا بشه به يه مشكل بر مي خوره و اونم اينكه وقتي ما به رقم چهارم مي رسيم يعني اولين ويرگول رو قرار ميديم و مقدار جديد رو در اديت كپي مي كنيم مكان نما به حرف اول مي پره و اگه مثلا بنويسي 1234 و برنامه اونو به 123.4 تبديل كنه حالا اگه طرف بنويسه 5 بجاي اينكه اين 5 بعد از 4 نوشته بشه قبل از يك نوشته ميشه چون مكان نما به اولين حرف پريده حالا خواستم ببينم كسي ميدونه چطور ميشه محل مكان نما رو در يه اديت فهميد كه بعد از نوشتن مقدار جديد مكان نما رو به همون موقعيت بر گردوند و البته با چه دستور يا خاصيتي ميشه محل مكان نما رو تغيير داد كه بشه عمل بالا رو انجام داد؟
ممنون ميشم اگه مدير محترم (فكر كنم اقا مبين ) يا ديگر دوستان جواب بدن
۰۸-مرداد-۱۳۹۱, ۱۶:۵۱:۰۴
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #2
RE: سه رقم سه رقم جدا كردن اعداد در edit
http://www.programmersheaven.com/mb/Adva...the-tedit/

http://www.tek-tips.com/viewthread.cfm?qid=1189107

http://stackoverflow.com/questions/38874...ext-delphi

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

کد php:
Edit1.SelStart := Length(Edit1.Text); 
۰۸-مرداد-۱۳۹۱, ۱۷:۵۱:۰۰
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : lord_viper, The.Ghost
tooraj آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 1
تاریخ عضویت: مرداد ۱۳۹۱

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #3
RE: سه رقم سه رقم جدا كردن اعداد در edit
سلام و تشكر بابت وقتي كه گذاشتي و جواب دادي دوست گرامي
در هر 3 مورد سايتي كه معرفي كردي دقيقا همين يك خط كد شما رو نوشته كه در تموم اونها براي انتقال كرزر به انتها يا يك مكان از قبل مشخص شده از اين دستور استفاده شده اما بايد توجه داشت كه اين در مورد عدد به درد نميخوره چون طرف ممكنه با كليدهاي كرزر در طول عدد حركت كنه و يكي از اعداد وسطي رو پاك كنه كه در اين صورت با كد بالا اينبار به جاي اول خط به اخر خط مي پره و شايد بهتر بود سوالم رو اينطور عنوان مي كردم كه كرزر هر جايي هست همونجا بمونه و نه به اول و نه اخر خط نپره كه البته با توجه به نوع استفاده اي كه من ميخوام بكنم كاملا مشخصه و صد البته در 100ها عنوان برنامه مختلف اينو ديدم كه در هنگام تايپ عدد به راحتي سه رقم سه رقم جدا ميشه پس اين كار مثلما امكان پذير هم هست در هر صورت من رفتم و در يكي از فروم هايي كه داخل يكي از سايتهاي سه گانه شما به عنوان فروم مشكلات دلفي جواب داده شده توسط بورلند معرفي شده بود به انگليسي مشكلمو بيان كردم و اگه اونجا بهم جوابي دادن حتما براي اگاهي دوستان اونو اينجا هم بيان مي كنم كه براي همين مورد باز هم ممنون دوست خوبم جناب بيبي
در صورتي كه دوستان بخوان دقيقا با اين مشكل سر و كله بزنن كافيه قطعه كد زير رو در ان چينج يه اديت وارد كنن تا دقيقا متوجه شن مشكل از كجاس:
edit1.text:=joda(edit1.text);l
و فانكشن جدا رو هم به اين صورت بنويسيد:
function joda(s:string):string
var i:integer
s1:string
begin
for i:=1 to length(s) do if copy(s1,i,1)<>',' then s:=s1+copy(s1,i,1);l
{اين خط ويرگولهاي از قبل موجود در رشته رو حذف مي كنه}
if length(s1)<4 then joda:=s
if length(s1)=4 then joda:=copy(s1,1,1)+','+copy(s1,2,3);l
if length(s1)=5 then joda:=copy(s1,1,2)+','+copy(s1,3,3);l
if length(s1)=6 then joda:=copy(s1,1,3)+','+copy(s1,4,3);l
{اين خطوط هم كه تا هرچند رقم دلتون بخواد مي تونيد ادامش بديد سه رقم سه رقم عدد رو جدا مي كنه و نتيجه رو بر مي گردونه}
حالا اگه برنامه رو با همين چند خط كد اجرا كنيد و عدد در اديت وارد كنيد متوجه مشكل خواهيد شد كه البته با دستور سلتكست كه دوستم گفتن كمي اوضاع بهتر ميشه و در اخر خط براي ادامه دادن عدد مشكل حل ميشه اما همچنان مشكل حذف يه عدد از وسط اعداد باقي مي مانه مگه اينكه بشه در لحظه فراخواني رويداد ان چينج محل دقيق كرزر رو هم فهميد كه اگه بشه به راحتي با همين دستور سلتكست كه دوستم گفتن ميشه كرزر رو به اونجا منتقل كرد
۰۸-مرداد-۱۳۹۱, ۲۲:۰۲:۲۵
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #4
RE: سه رقم سه رقم جدا كردن اعداد در edit
خب به جای اون همه if و اینها میتونین از یه تابع خیلی کوچکتر استفاده کنید
(کد در دلفی xe2 نوشته شده)
کد:
uses
System.SysUtils;

function Int(value:string):string;
var
st:string;
begin
st:=StringReplace(value, ',', '', [rfReplaceAll]);
Result:=FormatFloat('#,#',StrToFloat(st));
end;
خروجی این تابع مقدار عددی هست که 3 رقم 3 رقم جدا شده

خب برای اینکه از وسط هم بتونی عدد کم و زیاد کنی قبل از هرگونه تغییر باید مکان جاری کرسر رو بدست بیاری و در انتها با استفاده از SelStart به همون نقطه بری
(راهنمایی: برای بدست اوردن مکان کرسر فاصله مکان کرسر تا انتهای اعداد رو حساب کن)

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۰۹-مرداد-۱۳۹۱, ۰۸:۲۶:۳۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : The.Ghost
Di Di آفلاین
مدير بخش هك و كرك
*****

ارسال‌ها: 2,358
موضوع‌ها: 116
تاریخ عضویت: اسفند ۱۳۸۵

تشکرها : 1816
( 4046 تشکر در 1321 ارسال )
ارسال: #5
RE: سه رقم سه رقم جدا كردن اعداد در edit
با اجازه اساتید گرامی به خصوص داداش مبین گل که این روزها کمتر سر میزنن ;)

والا ما افتخار دلفی کار کردن نداشتیم اما به نظرم این مشکل شما دوتا راه حل دیگه هم داشته باشه ها!

اول اینکه بابا دلفی که کمتر از وی بی نیست که؟! پس احتمالا یک چیزی تو مایه های EditMask باید داشته

باشید که خاصیتی به اسم Format هم داشته باشه ، اونوقت کافیه فرمتش رو تنظیم کنید روی "###,###"

حالا اگر از این چیزها نداشتید ( که قطعا دارید !) باز با همون روش کد نویسی براش هم می شه یه کارایی کرد!

اول از همه به جای اون همه IF و کد و غیره یک لیبی چیزی بزارید رو فرم و مخفیش کنید و در OnChange اون

تکست باکس یا ادیت باکس این 3 خط کد رو بنویسید :

کد:
Label5 = Format$(Text6, "#,#")
Text6 = Label5
SendKeys "{End}"

این 3 خط تا اینجا، کار همون تابع رو انجام می ده فقط معادلش به دلفی رو باید بنویسید.

حالا برای بهتر شدنش و اینکه طرف اگر وسط کد یک جایی رو ادیت کرد هم باز می شه یه کلک رشتی زد!!

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

بشین از چپ به راست دونه دونه کاراکترها رو با هم مقایسه کن، به اولین تغییر که رسیدی کرسر رو بنداز همونجا!

۰۹-مرداد-۱۳۹۱, ۱۰:۱۰:۴۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : The.Ghost, lord_viper
tooraj آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 1
تاریخ عضویت: مرداد ۱۳۹۱

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #6
RE: سه رقم سه رقم جدا كردن اعداد در edit
سلام
ممنون از پاسخ شما
در ابتدا بايد بگم كه من خودم از يه الگوريتم پيچيده تر كه تا ان رقم رو به راحتي 3رقم 3رقم جدا مي كنه استفاده مي كنم نه از اين كد بالا فقط اينكه با دادن اين كد خواستم دوستان وقتشون صرف فهميدن نحوه عمل اون كد نكنن و به اصل موضوع يعني محل كرزر بپردازن براي همين از اين كد ساده استفاده كردم
مورد دوم هم اينكه من هيچ ايده اي در مورد اينكه چطور فاصله كرزر از اخر يا اول خط رو بفهمم ندارم اگر ايده خاصي در اين مورد داريد ممنون ميشم كد مربوطه رو اينجا عنوان كنيد
از شما هم بابت وقتتون ممنون

سلام دوباره به دوست خوبم دي دي
در طي نوشتن جواب بالا ديدم كه شما اين جواب رو دادي و براي همين مجبور شدم دومين پست رو هم براي شما بنويسم
در مورد ماسك اديت بله دلفي هم داره و يه نسبتا قويشو هم داره اما دوتا مشكل عمده داره يكي اينكه تعداد كاراكتر محدود به يه عدد خاص ميشه مثلا 5 رقمي يا 10 رقمي يا هرچي كه اصلا قابل قبول نيست دوم اينكه همون اشكال رو اديت مي نويسه و اونم حالا اگه نگيم غير قابل قبول حداقل زيبا نيست اما دوست خوبم اولين ايده در اين مورد به نام شما ثبت شد چون كلك رشتي شما بهترين جوابي بود كه تا حالا در اين مورد شنيدم و دقيقا حق ي با شماست و هرچند بسيار كدنويسي زيادي مي خواد و احتمالا بايد راحت تر از اين حرفها هم جواب داشته باشه اما به هر صورت نظر شما جواب ميده و كار مي كنه و با توجه به اينكه تا حالا هيچ ايده اي كه واقعا كار كنه معرفي نشده راه حل شما فعلا تنها جواب موجوده حالا من برم هم اون سايت خارجي رو چك كنم ببينم اونجا جوابي دادن يا نه هم اينكه ايده شما رو كد نويسي كنم ببينم به كجا مي رسم اگه به چيز قابل قبولي برسم حتما اعلام مي كنم
از شما هم بابت جوابتون ممنون
(آخرین ویرایش در این ارسال: ۰۹-مرداد-۱۳۹۱, ۱۰:۱۸:۱۳، توسط tooraj.)
۰۹-مرداد-۱۳۹۱, ۱۰:۱۱:۵۰
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #7
RE: سه رقم سه رقم جدا كردن اعداد در edit
(۰۹-مرداد-۱۳۹۱, ۱۰:۱۱:۵۰)tooraj نوشته است: مورد دوم هم اينكه من هيچ ايده اي در مورد اينكه چطور فاصله كرزر از اخر يا اول خط رو بفهمم ندارم اگر ايده خاصي در اين مورد داريد ممنون ميشم كد مربوطه رو اينجا عنوان كنيد
از شما هم بابت وقتتون ممنون
کدش راحته فقط کمی خلاقیت میخواست

کد:
implementation
uses
System.SysUtils;
{$R *.dfm}
function Int(value:string):string;
var
st:string;
begin
st:=StringReplace(value, ',', '', [rfReplaceAll]);
Result:=FormatFloat('#,#',StrToFloat(st));
end;

procedure TForm1.Edit1Change(Sender: TObject);
var
i:Integer;
begin
i:=Length(Edit1.Text)-Edit1.SelStart;
Edit1.Text:=Int(Edit1.Text);
Edit1.SelStart:=Length(Edit1.Text)-i;
end;
من راهنمایی کرده بودم چیز سختی نبود

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
(آخرین ویرایش در این ارسال: ۰۹-مرداد-۱۳۹۱, ۱۹:۲۰:۲۶، توسط lord_viper.)
۰۹-مرداد-۱۳۹۱, ۱۹:۱۶:۵۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : The.Ghost
poriyakh آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: اسفند ۱۳۹۲

تشکرها : 0
( 1 تشکر در 1 ارسال )
ارسال: #8
RE: سه رقم سه رقم جدا كردن اعداد در edit
سلام دوستان. برای 3 رقم به 3 رقم جدا کردن اعداد در دلفی از دستور زیر استفاده کنید:
کد php:
label1.Caption:=Format('$ %n', [sum]); 

sum= متغیر.
به جای کاراکتر $ هم می تونید هر جیزی دیگه ای هم بذارید و یا اصلا هیچی نذارید.
(آخرین ویرایش در این ارسال: ۱۷-اسفند-۱۳۹۲, ۲۱:۲۲:۱۴، توسط babyy.)
۱۷-اسفند-۱۳۹۲, ۱۸:۵۱:۲۵
ارسال‌ها
پاسخ
تشکر شده توسط : babyy
p_s آفلاین
تازه وارد

ارسال‌ها: 2
موضوع‌ها: 0
تاریخ عضویت: فروردین ۱۳۹۳

تشکرها : 1
( 6 تشکر در 2 ارسال )
ارسال: #9
RE: سه رقم سه رقم جدا كردن اعداد در edit
من اینکار را کردم
اگر از دیتا بیس استفاده میکنی و از دیتا اکسس استفاده میکنی باید روی کامپوننت Table یا query دوبار کلیک کنی بعد یک منو کوچک باز میشه راست کلیک کنی و تمام فیلده ها را اضافه کنی و بعد روی فیلد دلخواهت بری و بعد در Properti فیلد مورد نظرت در قسمت DisplayFormat شکل مورد نظرت را بصورت مثلا 000,000,000 تایپ کنی
اگر دیتا بیس نداری و از Edit معمولی استفاده میکنی باید در Event , OnKeyPress حالات مختلف را د نظر بگیری و کارکتر جدا کننده بزاری
نکته اینکه مشکلی که بهش بر مخوری مربوط به راست چین و چپ چین بودن فرم و Edit و همچنین نوع تعریف زبان در کنترل پانل ویندوزت میشه که راه استانداردی برای برنامه نویسی نیست چون در هر سیستم با تنظیمات مختلف جواب نمیده
از MaskEdit هم استفاده نکن چون برای تبدیل به عدد و یک سری پیزا به مشکل بر میخوری
بهترین راه عددت در قالب یک دیتا بیس حتی مجازی باشه و به اینصورت تعریف بشه
حتی برای تاریخ فارسی اگر به صورت LongInteger باشه و DisplayFormat , 00/00/00 باشه خیلی بهتره
۱۴-فروردین-۱۳۹۳, ۲۱:۰۵:۴۶
ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, babyy
The.Ghost غایب
مدیر بازنشسته
*****

ارسال‌ها: 461
موضوع‌ها: 201
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 674
( 354 تشکر در 158 ارسال )
ارسال: #10
RE: سه رقم سه رقم جدا كردن اعداد در edit
(۰۸-مرداد-۱۳۹۱, ۱۶:۵۱:۰۴)tooraj نوشته است: سلام خدمت تمام دوستان و اساتيد گرامي
همينطوري تو سايتهاي دلفي مي گشتم ديدم اينجا يه مدير نسبتا قوي در دلفي داره كه به سوالات زيادي جواب داده گفتم شايد جواب يه سوال قديمي منم داشته باشه يا اگه دوستاي ديگه ميدونن ممنون ميشم جواب بدن
سوال اينه : جدا كردن سه رقم سه رقم اعداد يه فانكشن خيلي سادس كه بر حسب تعداد ارقام عدد مورد نظر در محل هاي لازم ويرگول ميزاره كه اگه در انتهاي نوشتن يه عدد در يه اديت و هنگام خارج شدن فوكوس از اديت اونو بزاري خيلي راحت اعداد رو جدا ميكنه اما اگه همين كار رو در طي نوشتن عدد در اديت انجام بدي يعني همچنان كه طرف عدد رو در اديت تايپ ميكنه سه رقم سه رقم جدا بشه به يه مشكل بر مي خوره و اونم اينكه وقتي ما به رقم چهارم مي رسيم يعني اولين ويرگول رو قرار ميديم و مقدار جديد رو در اديت كپي مي كنيم مكان نما به حرف اول مي پره و اگه مثلا بنويسي 1234 و برنامه اونو به 123.4 تبديل كنه حالا اگه طرف بنويسه 5 بجاي اينكه اين 5 بعد از 4 نوشته بشه قبل از يك نوشته ميشه چون مكان نما به اولين حرف پريده حالا خواستم ببينم كسي ميدونه چطور ميشه محل مكان نما رو در يه اديت فهميد كه بعد از نوشتن مقدار جديد مكان نما رو به همون موقعيت بر گردوند و البته با چه دستور يا خاصيتي ميشه محل مكان نما رو تغيير داد كه بشه عمل بالا رو انجام داد؟
ممنون ميشم اگه مدير محترم (فكر كنم اقا مبين ) يا ديگر دوستان جواب بدن

کد:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:='9876543210';
if Edit1.Text <> '' then
   Edit1.Text := FormatCurr('ريال ###,###',StrToCurr(Edit1.Text));
end;

Assembly Language 039

۱۵-فروردین-۱۳۹۳, ۰۹:۴۵:۴۶
ارسال‌ها
پاسخ
تشکر شده توسط : lord_viper, babyy
Mehrpour آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: بهمن ۱۳۸۹

تشکرها : 0
( 2 تشکر در 1 ارسال )
ارسال: #11
RE: سه رقم سه رقم جدا كردن اعداد در edit
سلام خدمت تمام دوستان
با یه روش خیلی ساده شما میتوانید عدد ها رو از هم جدا کنید هر تعدادی که می خواهید .
به این روش :
شما در یک فیلد تیبل در تب Data Type ، آن را Currency انتخاب کنید و در قسمت decimal Places عدد صفر را قرار ده[/font]ید بعد در قسمت Input Mask تعداد عددی را که میخواهید از هم جدا شوند را به این شکل وارد کنید .
(###,###,###) علامت مربع تعداد عدد از هم جدا شده است ، تعداد آنها را به مورد خود تغییر دهید .
مثال :
123,456,789 به این شکل میباشد ( ###,###,### )
1,234,567,890 به این شکل میباشد ( ###,###,###,#)

در فرم های هم به اینصورت هست که در تکست باکس مورد نظر به شکل هراحل بالا اقدام کنید .






یه پیوست هم براتون میزارم
(آخرین ویرایش در این ارسال: ۱۸-خرداد-۱۳۹۳, ۱۸:۱۶:۵۳، توسط Mehrpour.)
۱۸-خرداد-۱۳۹۳, ۱۸:۱۳:۴۷
ارسال‌ها
پاسخ
تشکر شده توسط : babyy, lord_viper


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Exclamation جمع اعداد فرد یا زوج یک تا صد Admiral 2 9,308 ۲۶-اردیبهشت-۱۳۸۹, ۱۵:۰۸:۰۷
آخرین ارسال: HoseinVig
myBB جدا كردن عداد بصورت 3 رقم 3 رقم در كامپوننت Edit P.Bayat 2 11,637 ۰۸-شهریور-۱۳۸۸, ۱۹:۰۵:۲۴
آخرین ارسال: lord_viper
  اجرای برنامه با راه اندازی ویندوز و مخفي كردن برنامه از Task Manager Majid_Ebru 9 11,092 ۰۶-تير-۱۳۸۸, ۱۵:۵۰:۰۸
آخرین ارسال: lord_viper
  كرك كردن اگزه دلفي ahvig 8 8,027 ۰۳-خرداد-۱۳۸۸, ۱۳:۳۳:۵۰
آخرین ارسال: lolohacko

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS