PDA

View Full Version : جدا کننده رقمهای 1000



SReza1
سه شنبه 04 شهریور 1382, 22:38 عصر
سلام
من یک مشکلی دارم اینکه میخواهم اعداد را سه تا سه تا جدا کنم. (Formatstr) مثلا 138099688تبدیل بشه به 688'099'138
تعداد رقمها هم معلوم نیست.ممنون میشم کمکم کنید

چهارشنبه 05 شهریور 1382, 19:50 عصر
می تونین یک زیر برنامه در TextChange بنویسین که از سمت راست ( یا چپ ) سه رقم سه رقم ممیز بزنه، فقط باید محل Cursor رو هم در نظر داشته باشین.
اگه موفق نشدین، من این کار رو قبلا کردم، اگه خواستین می تونم براتون بفرستم.

SReza1
چهارشنبه 05 شهریور 1382, 20:32 عصر
سلام از راهنمائیتون ممنون. از این event نمیخوام استفاده کنم.اگه بتونی از توابع فرمت راهنمائیم کنی ممنون میشم.چون میخوام در بانک اطلاعاتی ازون استفاده کنم کا کمی گره میخوره و در ضمن کاربر میوتونه که ممیزها رو پاک کنه! فکر کنم اگه از TMaskEdit بتونم فرمت مورد نظر خودم را بسازم کار تموم میشه! ولی هنوز که نشده!

A.Nemati
چهارشنبه 05 شهریور 1382, 20:44 عصر
سلام
خودتو زیاد خسته نکن. مخصوصا اگه BIDIMode = bdRightToLeft استفاده کنی (برای معظل بزرگ فارسی نویسی :( )
من مجبور شدم در یک Unit بنویسیم که شامل دو تابع است. یکی برای تبدیل کردن عدد به رقمهای جدا شده که آن را در رویداد OnExit ادیتور و یا هنگام خواندن عدد از بانک و نوشتن در ادیتور خود فراخوانی میکنم. و یکی برای تبدیل از رقمهای جدا شده به عدد معمولی که آن را هنگام نوشتن در بانک فراخوانی میکنم. کار سختی هم نیست.
موفق باشی.

چهارشنبه 05 شهریور 1382, 21:07 عصر
تا اونجایی که یادمه MaskEdit یک کم مشکل داشت، برای همین من خودم یک Component توی دلفی درست کرده بودم.
برای بانک اطلاعاتی هم، می تونین یک Function بنویسین ( در SQL Server) البته اگه از SQL Server استفاده می کنین .. و در دستور Select از اون استفاده کنین.
ارقام هم معمولا از راست به چپ وارد می شن، برای همین فکر نمی کنم مشکل فارسی داشته باشن.

artemis-a..x
چهارشنبه 05 شهریور 1382, 21:33 عصر
میتونی از یک کامپوننت به نام AliFarsiPack استفاده کنی..

SReza1
شنبه 08 شهریور 1382, 20:23 عصر
سلام دوستان عزیز!!
این راه حلهایی رو که می گید همه جواب میدند!! ولی دائم برای Save و LOAD از DATABASE روی أنها پردازش کنیم‍‍‍‍ که یک کمی سخته‍‍‍! به نظرم اگه بشه از فرمتCurrency استفاده کرد یک کمی کمکم کنه!! و گرنه بهترین راه حل نوشتن همون کامپوننت می باشد!! از دوستان عزیز ممنونم که کمکم کردند :wink:

Kambiz
شنبه 08 شهریور 1382, 20:42 عصر
هر فیلد عددی دو تا خصوصیت به نامهای EditFormat و DisplayFormat داره که ممکنه با استفاده از اونها کار برات راحتتر بشه.

amirrf
شنبه 08 شهریور 1382, 22:17 عصر
سلام،

همانطور که DelphiArea گفته است تنها کافیست خاصیت DisplayFomrat را برابر #, قرار دهید. این قالب برای نمایش مقدارها بکار می رود و هنگامیکه کاربر شروع به ویرایش می کند مقدار عددی بدون قالب برای ویرایش ارایه می شود. در صورتیکه می خواهید این قالب در زمان ویرایش نیز فعال باشد نمی توانید از این روش استفاده کنید و لازم است کنترل سفارشی مخصوص این کار بسازید یا تهیه کنید؛ پیچیده نیست اما به نظر من ضروری هم نیست. کاربر نهایی می تواند پس از ویرایش، مقدار وارد شده را به صورت جداشده با کاما ببیند و اگر اشتباهی داشته آن را تشخیص دهد.


MyField.DisplayFormat := '#,';

SReza1
یک شنبه 09 شهریور 1382, 22:48 عصر
دوستان عزیز از راهنمائی سازندتون ممنون. از روش Display Format و Edit Format که گفته بودید حل شد. فقط قبل از ذخیره سازی باید کاما را حذف کنم تا ایراد نگیره.

شفیعی
چهارشنبه 09 اردیبهشت 1383, 04:49 صبح
سلام
در مورد مطلب بالا اگر اعداد اعشاری باشد و بخواهیم همه اعداد را با اعشار تقریبی 4 رقم نمایش دهد باید چکار کنیم

amirrf
چهارشنبه 09 اردیبهشت 1383, 10:55 صبح
در راهنمای دلفی Format Strings را ببینید.
اگر می خواهید حتما 4 رقم اعشار نشان دهد (صفر پر کند اگر نداشت):

DisplayFormat := '0.0000';
یا اگر می خواهید حداکثر تا 4 رقم اعشار نشان دهد:

DisplayFormat := '0.####';

شفیعی
شنبه 12 اردیبهشت 1383, 05:29 صبح
سلام
دوست عزیز با جواب بالا مشکل حل نشد در بانک اطلاعاتی یک فیلدداریم به نام AREA که مساحت بر حسب هکتار در آن ذخیره می شود می خواهیم اولا به جای . از / استفاده کنیم در ثانیه تمام اعداد با اعشار تقریبی 4 نمایش داده شود می خواهیم در داخل DBGRID و QREPORT این اعداد با فرمت نمایش داده شوند

amirrf
شنبه 12 اردیبهشت 1383, 10:05 صبح
سلام،

برای ممیز متغیر سراسری DecimalSpearator را مقدار دهی کنید.

فرمت موردنظر را در همین ویژگی DisplayFormat تعیین می کنید و هر جا که به این فیلد به صورت متن دستیابی شود این فرمت به کار خواهد رفت.
اگر کارهای پیچیده تری می خواهید انجام دهید، روی رخداد OnGetText کار کنید.