PDA

View Full Version : سه رقم جدا کردن اعداد در DBGrid در هنگام نوشتن عدد



دنیای دلفی
دوشنبه 09 مرداد 1385, 11:54 صبح
سلام دوستان
چگونه می توان یک فیلد از نوع Currency را درون یکی از ستونهای DBGrid در هنگام وارد کردن عدد (پول) آن را سه رقم سه رقم جدا کرد می بخشید دوباره تکرار می کنم در هنگام وارد کردن عدد در DBGrid اگر کسی تونسته این موردو حل کنه لطف کنه راهنمایی کنه

m-khorsandi
دوشنبه 09 مرداد 1385, 12:22 عصر
فیلدهاتون رو به Table یا ADOTable (با استفاده از FieldEditor) اضافه کنید و فیلد مورد نظر رو انتخاب کن ، DisplayFormat رو با ,# مقداردهی کن.



DisplayFormat = #,

Mohammad_Mnt
سه شنبه 10 مرداد 1385, 11:16 صبح
فکر کنم دنیای دلفی می خواد موقع Edit سه رقم سه رقم بگیره نه موقع نمایش. البته این مشکل با کامپوننت DBEditCurrency از DevExpress قابل حله ولی توی Grid رو نمی دونم .
ولی معمولا جدا کردن رقم موقع Edit خیلی واجب نیست. کاربر می تونه موقع Edit همون 12345 را وارد کنه و وقتی به Field بعدی رفت عدد رو به صورت 12,345 ببینه ( با همون روش آقای m-khorsandi )

دنیای دلفی
سه شنبه 10 مرداد 1385, 18:04 عصر
ممنون از پاسخ شما ولی منظور من در هنگام وارد کردن عدد در DBGrid است و بسیار هم مهم است چون در برنامه های حسابداری که سرعت عمل نیاز دارند دقت را بسیار بالا می برد من از Ehlib استفاده می کنم و در Edit Box هایی که دارد این مشکل را در هنگام ورود حل کرده است ولی نمی دانم با DBGrid چی کار کنم اگر کسی می دونه راهنمایی کنه

دنیای دلفی
شنبه 14 مرداد 1385, 16:04 عصر
یعنی هیچ راهی نیست

vcldeveloper
یک شنبه 15 مرداد 1385, 08:53 صبح
همون کاری که آقای خورسندی توضیح دادند را انجام بدید، با این تفاوت که بجای DisplayFormat از EditFormat استفاده کنید.


ولی منظور من در هنگام وارد کردن عدد در DBGrid است

تمام کنترلهای Data-Aware از DisplayFormat و EditFormat فیلدی که بهش متصل هستند استفاده می کنند، پس با انجام کاری که در بالا گفته شد، DBGrid شما هم از همون فرمت مشخص شده تبعیت خواهد کرد.

دنیای دلفی
سه شنبه 17 مرداد 1385, 12:06 عصر
با عرض پوزش آقای کشاورز با انجام این کار باز هم در هنگام وارد کردن عدد سه رقم سه رقم جدا نمی شود بلکه پس از ثبت اطلاعات با اینتر یا با کلیک ماوس در مکان دیگر این کار انجام می شود نمی دانم شاید یک کار خاصی باید من انجام بدهم تا این اتفاق در هنگام وارد کردن بیافتد

دنیای دلفی
چهارشنبه 25 مرداد 1385, 20:03 عصر
برادران مدیر کسی نمی تونه مشکل من رو حل کنه

mzjahromi
چهارشنبه 25 مرداد 1385, 21:29 عصر
با استفاده از خاصیت DBGrid1.Columns[2].Field.EditMask یه کارائی میتونی بکنی

Mohammad_Mnt
پنج شنبه 26 مرداد 1385, 12:42 عصر
editMask یکی از مزخرف ترین property های موجو در دلفی است !!! مخصوصا" برای کار با عددهای ارزی

SoftDevCo
پنج شنبه 26 مرداد 1385, 12:55 عصر
editMask یکی از مزخرف ترین property های موجو در دلفی است !!! مخصوصا" برای کار با عددهای ارزی
تایید میشه.

دنیای دلفی
جمعه 27 مرداد 1385, 22:32 عصر
حالا از این حرفها بگذریم
آقای کرامتی شما به داد ما برسید چه جوری میشه این کار را انجام داد

دنیای دلفی
دوشنبه 30 مرداد 1385, 18:02 عصر
من برای یک Edit حلش کردم ولی برای DBGrid نمی دونم



uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, StrUtils,math;

function Bet(S: string; Thousands: Boolean;Sender: TObject): string;
var
I, MaxSym, MinSym, Group: Integer;
IsSign: Boolean;
begin
for I :=1 to Trunc(Length(S)/3) do
Delete(S,Pos(ThousandSeparator,S),1);
Result := '';
MaxSym := Length(S);
IsSign := (MaxSym > 0) and (AnsiChar(S[1]) in ['-', '+']);
if IsSign then MinSym := 2
else MinSym := 1;
I := Pos(DecimalSeparator, S);
if I > 0 then MaxSym := I - 1;
I := Pos('E', UpperCase(S));
if I > 0 then MaxSym := Min(I - 1, MaxSym);
Result := Copy(S, MaxSym + 1, MaxInt);
Group := 0;
for I := MaxSym downto MinSym do
begin
Result := S[i] + Result;
Inc(Group);
if (Group = 3) and Thousands and (I > MinSym) then
begin
Group := 0;
Result := ThousandSeparator + Result;
end;
end;
if IsSign then Result := S[1] + Result;
if (Sender is TEdit) then
TEdit(sender).Perform(WM_KeyDown,VK_End,0)

end;


procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.Text:=bet(Edit1.Text,true,Sender);
end;




بیاید با هم کاملش کنیم

ali_abbasi22145
چهارشنبه 01 شهریور 1385, 15:51 عصر
فکر کنم دنیای دلفی می خواد موقع Edit سه رقم سه رقم بگیره نه موقع نمایش. البته این مشکل با کامپوننت DBEditCurrency از DevExpress قابل حله ولی توی Grid رو نمی دونم .
ولی معمولا جدا کردن رقم موقع Edit خیلی واجب نیست. کاربر می تونه موقع Edit همون 12345 را وارد کنه و وقتی به Field بعدی رفت عدد رو به صورت 12,345 ببینه ( با همون روش آقای m-khorsandi )

سلام به دوست قدیمی خودمان

اگر DevExpress کامپوننت DBEditCurrency و DevExpress DBgrid را پس احتمال زیاد مشکلت را در DBGrid حل می کند پس به آنها ایمیل بزن.

jafari1
پنج شنبه 02 شهریور 1385, 17:50 عصر
دوست گرامی
عددی که هنوز تعداد ارقامش مشخص نیست چگونه میخواهی 3 رقم 3 رقم جدا کنی طبیعی است که عدد پس از درج کامل قابل جداکردن است و قبل از ورود کامل عدد جدا کردن آن دردی را دوا نمیکند که بتوان درستی عدد وارد شده را با آن چک کرد

دنیای دلفی
پنج شنبه 02 شهریور 1385, 18:41 عصر
ممنون از راهنمایی های همه ولی من از Grid مربوط به Ehlib استفاده می کنم و بسیار مهم است که هنگام وارد کردن عدد سه تا سه تا جدا کند البته با کدی که در بالا گذاشته ام به راحتی این کار انجام می شود ولی مشکل این است که در DBGrid رویدادی نیست که در هنگام تایپ یک عدد در یک ستون گرید مرتبا اجرا شود و فقط حالتی وجود دارد که ابتدای وارد کردن عدد و انتهای وارد کردن آن چک می شود یعنی یک چیزی مثل OnChange مربوط به Edit یا DbEdit و غیره الان مسئله پیدا کردن الگوریتم این کار نیست بلکه پیدا کردن این رویداد است.

Mahdi_S_T
جمعه 03 شهریور 1385, 08:30 صبح
اگه بخواهید از Edit استفاده کنید بهترین و زیباترین FloatEdit موجود در کامپوننت Falad است

فرزاد دلفی باز
شنبه 04 شهریور 1385, 07:59 صبح
اصلا ربطی به این نداره که عدد شما چند رقمیه فقط باید نوع فیلد از نوع عددی باشده . با استفاده از FieldEditor در Table یا ADOTable , DisplayFormat رو با ###,### مقداردهی کنید این حالت برای 16 رقم جواب میده(البته ارقام بیشتر رو هم نشان می ده ولی16 رقم را بطور واضح در گرید نشان می ده) خود این حالت بطور اتوماتیک سه رقم سه رقم را جدا میکنه .......

babak869
شنبه 04 شهریور 1385, 10:24 صبح
اینم یه نمونه برنامه .البته ایده اون مربوط به جناب آقای خورسندیه!!!
موفق باشید

http://www.barnamenevis.org/forum/showthread.php?p=259219#post259219

mzjahromi
شنبه 04 شهریور 1385, 10:41 صبح
بهتر نیست جواب سوال رو همین جا بدید؟

babak869
شنبه 04 شهریور 1385, 11:07 صبح
بهتر نیست جواب سوال رو همین جا بدید؟
چون نمونه برنامه جواب ایشون بود اونو در تاپیکی که مربوط به نمونه برنامه های دلفی است گذاشتم تا ایشون و بقیه هم استفاده کنند

jafari1
شنبه 04 شهریور 1385, 11:30 صبح
در نمونه برنامه بالا بایستی عدد را وارونه ( یعنی آز آخر) وارد کرد که به نظر عاقلانه نیست

فرزاد دلفی باز
شنبه 04 شهریور 1385, 12:20 عصر
این مثال کامله ......

دنیای دلفی
شنبه 04 شهریور 1385, 19:42 عصر
دوستان توجه کنید گفتیم در هنگام تایپ کردن می خواهیم سه تا سه تا جابجا بشه دوستان این نکته خیلی مهمه برای DBGrid

فرزاد دلفی باز
یک شنبه 05 شهریور 1385, 08:12 صبح
اگر شما می خواهید از طریق گرید اطلاعات را وارد کنید یک بحث جدایی است ولی اگه می خواهید از طریق یک edit اطلاعات رو وارد کنید قبلا بحث شده .....
این مثال برای نمایش بصورت سه تایی در گرید است

mzjahromi
یک شنبه 05 شهریور 1385, 08:24 صبح
اصلا بحث از ابتدا ورود اطلاعات با استفاده از DBGrid بوده.

قانون شماره 13
لطفاً در صورتی که جواب یک سوالی را نمی دانید از ارسال مطالبی که باعث شلوغ کردن آن ارسال ( یا سوال ) شود خودداری فرمایید. در صورتی که بحث خاصی دارید می توانید برای خودتان یک بحث عمومی باز کنید.

فرزاد دلفی باز
یک شنبه 05 شهریور 1385, 08:25 صبح
با عرض پوزش ......

end_of_110
پنج شنبه 27 آبان 1389, 14:26 عصر
رخسد از بزرگان دلفی
این مشکل که ارقام سه رقم سه رقم جدا شوند ، مشابه هنگامی است که کاربر در گرید تایپ کند و شما بخواهید بر اساس آنچه تایپ می شود select خود را در کوئری دیگر تغییر دهید،برای این کار در رویدادkeypress گریدی که کاربردر آن تایپ می کند ،باید رشته ورودی را تک کارکتر تک کارکتر گرفته در نهایت یک رشته عددی دارید ، هر بار چک کنید که در کدام ستون گرید هستید رشته تغییر داده شده خود را که با ویرگول می باشد در همان ستونی که کاربر درج انجام می دهد قرار دهید .
در گرید تا زمانی روی فیلدی هستید که در حال ویرایش آن هستید مقدار جدید آن قابل خواندن نیست ، برای آنکه مقدار را بدست آورید کنترل را به فیلد دیگر برده حالا مقدار فیلد قبلی در سترس است ، و کافیست با ایجاد دو تابع که یکی ویرگولها را از رشته حذف میکند و دیگری ویرگولها را اضافه می کند(سه رقم ، سه رقم)، به نتیجه مورد دلخواه برسید:چشمک:

aisuda
یک شنبه 05 تیر 1390, 20:29 عصر
می دونم که تاپیک مال چند سال پیشه ولی چون در موقع جستجو در گوگل در سطر نتایجه گفتم اینو بگم شاید برای بعضی ها مفید واقع بشه.
حالت اول رو برای مثال با StoreProcedure می گم:
ADOStoreProcedure1.FieldByName('MyField').EditMask := '###,###,###,###;0; '
و این هم یه راه دیگه برای Table
procedure TForm1.Seprate(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
Text := FormatFloat('#,##0', Sender.AsFloat );
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
(Table1.FieldByName('MyField') as TField).OnGetText := Seprate;
end;

hassan p.b
پنج شنبه 04 شهریور 1395, 01:20 صبح
سلام
این قسمت برای من تو دلفی 2010 خطا می گیره لطفا راهنمایی کنید

procedure TForm1.Seprate(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
Text := FormatFloat('#,##0', Sender.AsFloat );
end;

hassan p.b
پنج شنبه 04 شهریور 1395, 02:32 صبح
برنامه الان بدون خطا بالا امد ولی نمایش تو بعد از پست شدن سه رقم نمایش می ده نه تو هینت
و زنده تو تایپ
مرسی

ابوالفضل عباسی
شنبه 06 شهریور 1395, 10:47 صبح
باسلام.
بنده برای اینکار یک تابع نوشته ام که در dbedit سه رقم را جدا میکند(بیش از میلیارد)و هنگام خروج از dbedit سه رقم،را پاک میکند.
یعنی هنگام تایپ و نمایش سه رقم را جدا میکند،هنگام ذخیره سازی به صورت ساده ذخیره(currency) میشود و تا الان مشکلی ندارد و درست کار میکند، حتی میتوان در hint هم نمایش داد.
دوستانی که با روش هایی که گفته شد به مشکل برخوردند میتوانند یک پیام خصوصی به بنده بدهند تا تابع را برایشان ارسال کنم.