PDA

View Full Version : به هم ریختن چیدمان متن حاوی کاراکتر فارسی و اعداد



Hadizadeh
جمعه 28 دی 1386, 16:50 عصر
سلام. تو یه Memo می خوام رشته ای مثل "451 ل 564" را اضافه کنم. ولی مشکل اینه که جای 451 و 564 باهم عوض میشه. چی جوری میشه این مشکل رو حل کرد؟

mrm0101
جمعه 28 دی 1386, 16:57 عصر
سلام . محیط برنامه را راست به کنید


procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.BiDiMode:=bdRightToLeft;
end;

dkhatibi
جمعه 28 دی 1386, 17:04 عصر
در صورتیکه هم فرم و ممو چپ به راست باشند مشکلی نیست.

Hadizadeh
جمعه 28 دی 1386, 21:46 عصر
سلام . محیط برنامه را راست به کنید


procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.BiDiMode:=bdRightToLeft;
end;



متاسفانه روش شما جواب نداد فقط عدد قبل از کاراکتر فارسی رو از انگلیسی به فارسی تغییر داد اما جای اون عوض نشد. حالا مشکل چیه؟ ممنون

mrm0101
شنبه 29 دی 1386, 02:12 صبح
من این رو تست کردم . اگر اول 451 بعدش ل و بعدش 564 رو بنویسی عین اون چیزی است که شما می خواهید . دقت کنید این یه رشته فارسی محسوب می شه نه عدد که از چپ به راست بشه نوشت

Hadizadeh
شنبه 29 دی 1386, 12:03 عصر
حرف شما کاملا درسته. ولی اینو ببینید:


var s:string;

s[1]:=5;
s[2]:=6;
s[3]:=4;
s[4]:='ل';
s[5]:=4;
s[6]:=5;
s[7]:=1;

حالا می خوام s رو توی ممو نشون بدم. ترتیب کاراکترها هم مهمه. ولی توی ممو با اون راه حلی که شما گفتید جای 564 و 451 عوض میشه. حالا راه حل چیه؟ ممنون

mrm0101
شنبه 29 دی 1386, 17:48 عصر
سلام .
طبق ارایه ای که شما نوشته اید اول 564 بعد ل و بعد 451 وارد شده است . وقتی رشته را فرا خوان می کنید کاراکتر ها به ترتیب ورود به ارایه فراخوان می شوند
برای حل این مشکل شما برنامه را طوری تغییر دهید که رشته ها به ترتیب
4 ، 5، 1 ، ل ، 5، 6،4
وارد شوند .
اگر از بانک اطلاعاتی و رکوردهای زیاد می خوانید و انکان تصحیح دستی نیست می توانید با نوشتن یک تابع رشته را اصلاح کنید .
موفق باشید

Hadizadeh
شنبه 29 دی 1386, 19:01 عصر
بله این روش که یقینا کار میکنه ولی شما فرض کنید که کاربر متن رو از داخل ممو کپی کنه. اونوقت با رشته اشتباه به ظاهر درست نمایش داده شده مواجه میشه. مشکل من هم اینه. بازم ممنون

mrm0101
شنبه 29 دی 1386, 20:04 عصر
سلام . خودتون می فرمایید



اونوقت با رشته اشتباه به ظاهر درست نمایش داده شده مواجه میشه


پس مطمئن باشید رشته عینا درست می باشد و شاید بخاطر راست به چپ بودن ممو به ظاهر جور دیگه نمایش داده شود ولی از نظر درست بودن رشته و منطق و ... هیچی مشکلی ندارید .
موفق باشید

Hadizadeh
یک شنبه 30 دی 1386, 14:53 عصر
ولی از نظر من این مشکل هنوز حل نشده. دوستان راه حلی برای این منظور دارند؟ ممنون

JAFO_IRAN
یک شنبه 30 دی 1386, 16:15 عصر
سلام

با فرض اینکه داده‌ها به همان ترتیبی که شما گفتید وارد شده باشند،

1. اگر خود memo راست به چپ باشد، شما قاعدتا باید از راست، یک 564 و یک 451 و یک J ملاحظه کنید. بسته به تنظیم windows، ممکن است 564 ابتدایی فارسی باشد.
2. اگر memo چپ به راست باشد قاعدتا نباید مشکلی وجود داشته باشد. (برعکس آنچه دوستان گفتند، خود memo - نه Form را LeftToRight کنید).
3. اگر اصرار دارید که memo راست به چپ باشد، میتوانید در زمان درج عبارت به صورت مصنوعی یک left to right mark به ابتدای عبارت اضافه نمایید. #253

ارادت

Hadizadeh
یک شنبه 30 دی 1386, 16:29 عصر
سلام

با فرض اینکه داده‌ها به همان ترتیبی که شما گفتید وارد شده باشند،

1. اگر خود memo راست به چپ باشد، شما قاعدتا باید از راست، یک 564 و یک 451 و یک J ملاحظه کنید. بسته به تنظیم windows، ممکن است 564 ابتدایی فارسی باشد.
2. اگر memo چپ به راست باشد قاعدتا نباید مشکلی وجود داشته باشد. (برعکس آنچه دوستان گفتند، خود memo - نه Form را LeftToRight کنید).
3. اگر اصرار دارید که memo راست به چپ باشد، میتوانید در زمان درج عبارت به صورت مصنوعی یک left to right mark به ابتدای عبارت اضافه نمایید. #253

ارادت

ما که نفهمیدیم چی شد. یه بار دیگه: این کدمه:


var s:array[1..5] of char;
begin

s[1]:='4';
s[2]:='5';
s[3]:='ل';
s[4]:='5';
s[5]:='6';

memo1.Lines.Add(s);

من می خوام در ممو 45 سمت چپ ل و 56 سمت راست اون باشه. ممنون

JAFO_IRAN
یک شنبه 30 دی 1386, 18:15 عصر
memo1.Lines.Add(#253 + s);
باز هم ممنون - امیدوارم بتونم محبت شما رو جبران کنم

ارادت

Hadizadeh
یک شنبه 30 دی 1386, 21:22 عصر
متاسفانه روش شما هیچ کمکی نکرد!

Hadizadeh
دوشنبه 01 بهمن 1386, 13:01 عصر
اینم برنامه من. واسه من که 45 سمت راست ل نشون داده میشه. ممنونم.

JAFO_IRAN
دوشنبه 01 بهمن 1386, 14:22 عصر
سلام

من تا حالا فکر میکردم حرف J مطرح هستش، برای حرف لام فارسی، تنها راه اینه که دو طرف لام #253 بذارید. اون BiDiMode رو هم از memo بردارید. مثلا:



Memo1.Lines.Add('45' + #253 + 'J' + #253 + '56');


من مجبور شدم به جای لام، J بزنم ولی منظورم همون لام هست...

شاید کمک کنه

ارادت

Hadizadeh
دوشنبه 01 بهمن 1386, 14:26 عصر
بله حالا شد. یه دنیا ممنون.