PDA

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



ابوالفضل عباسی
یک شنبه 09 شهریور 1393, 14:09 عصر
:تشویق:مشکل زبان فارسی در اندروید دلفی حل شد:تشویق:
سلام بر شما عزیزان مشکل برعکس شدن حروف فارسی در اندروید حل شد.
این روش با هیچ برنامه ای درست نشده است.و من با یک ترفند بسیار جالب اون رو حل کردم.
فقط مشکلی که در این روش هست،اینکه اگر شما از این روش استفاده کنید فایل apk شما کمی پرحجم خواهد شد.
زیادنه..کمی مثلا اگر حجم فایل apk شما 5MB باشد با این روش می شود 5.450MB که خیلی هم باصرفه هست.
حالا هرکی که این روش رو می خواهد بدونه در اینجا نظر بدهد تا برای شما توضیح دهم اون هم با عکس تصویری.
:تشویق::لبخندساده::چشمک:
باتشکر.

hp1361
یک شنبه 09 شهریور 1393, 14:43 عصر
سلام

مسلماً بیشتر دوستان برنامه نویس دوست دارند این مشکل رو پشت سر بگذارند.

راه حل رو به اشتراک بگذارید همه علاقه مندان ممنون شما خواهند شد

موفق باشیم

ابوالفضل عباسی
یک شنبه 09 شهریور 1393, 15:11 عصر
hp1361 عزیز چشم این مطلب رو می گذارم.
من سعی می کنم با زبانی ساده این مطلب رو توضیح بدهم. درکنار اون اگر جایی رو متوجه نشدید عکس هم میگذارم.(من xe6 دارم روی اون توضیح می دهم)
به نام خدا.
اول: در دلفی(xe5,xe4,xe6) در منوی ابزار سمت راست یک Timage رو انتخاب و در form می گذارید.مانند عکس(برای دیدن عکس روی لینک کلیک کنید.)
http://upload7.ir/imgs/2014-08/01265708350091554285.jpg

دوم: در paint یا برنامه های طراحی مختلف متنی که به فارسی می خواهید در lable در دلفی بگذارید را در paint به فارسی بنویسید.
http://upload7.ir/imgs/2014-08/74018542906336941149.jpg

سوم:اون را با پسوند .bmp ذخیره کنید.

چهارم: حالا این فایل paint رو در Timage بازیابی کنید.
http://upload7.ir/imgs/2014-08/04213526229150644406.jpg

پنجم: جای lable که قرار بود فارسی در ان باشد این Timage را جایگزین ان کنید.
http://upload7.ir/imgs/2014-08/26249097798596052006.jpg

ششم:بقیه جاهایی که می خواهید فارسی کنید از این روش استفاده کنید.

اگر می خواهید نوشته button تان هم فارسی باشد که شکل button در paint طراحی کنید و در Timage بازیابی کنید.و تمام فرمان هایی که در button نوشته بودید در قسمت on click این Timage پیاده سازی کنید.
http://upload7.ir/imgs/2014-08/71614224290133030511.jpg

مشکلی که در اینجا هست این است که نمی توان showmessage هارو فارسی کرد که من در تلاش هستم که فارسی سازی ان ها رو هم کامل کنم.

یک تشکر خشک و خالی هم بکنید برای ما هم کافی است:تشویق:
با تشکر

یوسف زالی
یک شنبه 09 شهریور 1393, 15:33 عصر
دوستان لطفا تصویری از برعکس نویسی در آندروید بگذارید (من نمونه خرابش رو ندارم)
قدیما واسه فتوشاپ و فلش ام ایکس یه برنامه نوشته بودم، ببینم شاید به درد حل این مشکل هم خورد.

nice boy
یک شنبه 09 شهریور 1393, 21:54 عصر
:متعجب:

میشه بپرسم وقتی می خواهید اطلاعات رو از دیتابیس بخونید و نمایش بدید چیکار می کنید؟ یا وقتی کاربر می خواد یه متنی رو وارد کنه باید چیکار کنه؟ حتما باید به کاربر بگیم عکسش رو درست کنه و تویه برنامه قرار بده!:اشتباه:

gbg
دوشنبه 10 شهریور 1393, 00:20 صبح
آقا منم مشکل showmessage رو برات حل کردم!!!!
چون این یکی رو درست نشون میده

یوسف زالی
دوشنبه 10 شهریور 1393, 08:46 صبح
دوستان یک تصویر بگذارید ببینم منظورتون از به هم ریختن دقیقا چیه، شاید برنامه ای که داشتم کمک کنه.
آیا نوشته ای مثل سلام می شه م ل ا س ؟؟
این قدر هم سربه سر هم نذارید :متفکر:
بنده خدا ذوق کرده کارش رو ارائه داده، انصاف نیست همه رو با توان خودتون بسنجید.
متشکرم.

ابوالفضل عباسی
دوشنبه 10 شهریور 1393, 09:59 صبح
gbg عزیز حل مشکل showmessage رو می تونی برای ما بازگوکنی؟

ابوالفضل عباسی
دوشنبه 10 شهریور 1393, 10:07 صبح
اگر از طریق موبایل باشه که کیبورد فارسی داشته باشه این اطلاعات رو می تونه فارسی تایپ کنه در dbf هم می توانید جدول رو مشخصات فارسی بدهید با مشکلی روبه رو نمی شید اگر هم روبه رو شدید دیتابیش هایی هستند که عکس قبول می کنند اگر در اون قسمت عکس نوشته فارسی رو بزنید قبول می کنه:تشویق:

BORHAN TEC
دوشنبه 10 شهریور 1393, 11:53 صبح
دوستان یک تصویر بگذارید ببینم منظورتون از به هم ریختن دقیقا چیه، شاید برنامه ای که داشتم کمک کنه.
آیا نوشته ای مثل سلام می شه م ل ا س ؟؟

اگه این مشکل حل بشه واقعاً عالیه، چرا که در حال حاضر برنامه های مبتنی با دلفی روی اکثر گوشی ها به درستی اجرا میشه و توی هر نسخه به لیست گوشی های پشتیبانی شده داره اضافه میشه.
این عکس مربوط به یک گوشی HTC Sensation Z710e هست. همانطور که میبینی ShowMessage درست نشون داده میشه ولی متن کنترلها به هم ریخته هست.

یوسف زالی
دوشنبه 10 شهریور 1393, 12:47 عصر
با این برنامه کانورت کنید ببینید اوکی می شه؟
اگر بشه برات کانورتور می نویسم

BORHAN TEC
دوشنبه 10 شهریور 1393, 13:39 عصر
با این برنامه کانورت کنید ببینید اوکی می شه؟
اگر بشه برات کانورتور می نویسم
نشد. ولی یه نکته ای هست حروف فارسی رو درست نشون نمیده ولی جایگاه کلمات درسته، یعنی اگه وسط متن فارسی کلمه انگلیسی به کار بره جای کلمات عوض نمیشه. :متفکر: بی زحمت کد این برنامه رو هم بزار تا ببینیم.
این هم از نتیجه کار:

یوسف زالی
دوشنبه 10 شهریور 1393, 13:52 عصر
آره یادمه این مورد رو توش اصلاح کرده بودم.
در مورد کاراکترها، می تونی ساپورت کاراکتر ها رو برام بذاری؟ به نظر می رسه برنامه شما یونیکد نیست.
ببین مثلا رنج
$#FEXX رو ساپورت می کنه، اگر ساپورت نمی کنه ولی یونیکده، شاید فونت پیش فرض رو باید عوض کنید، اگر باز هیچ کدوم نشد، بازه ای رو که برای فارسی نشون می ده بذار.
این رو هم تست کن ببین مثلا خودت بزنی مالس چی می شه، به هم می چسبونه یا شعورش نمی رسه

BORHAN TEC
دوشنبه 10 شهریور 1393, 14:20 عصر
به همگی تبریک میگم. مشکل نمایش کلمات با کانورتور حاج یوسف حل شد. :لبخند:
فقط مونده bidiMode مربوط به کامپوننتها! :متفکر:
یوسف واقعاً ایول داری! این تا به امروز بهترین و بی عیب و نقص ترین کانورتور برای Delphi-Android هست. خوبیش اینه که وسط کلمات فارسی میشه از کلمات انگلیسی هم استفاده کرد و تا به حال چنین چیزی رو کسی عرضه نکرده(لا اقل من یکی که ندیدم).
این هم نتیجه اجرای برنامه در یک گوشی اندروید:

یوسف زالی
دوشنبه 10 شهریور 1393, 14:38 عصر
قربانت :بامزه:
این در اصل کانورتور فلش ام ایکس بود که قدیما دوره دانشجویی نوشتمش.
حالا مورد چی بود؟ فونت مورد داشت؟
اعداد رو هم چک کردی؟
اگر اوکیه، یا من یا خودت یه تابع درست کنیم واسه این کار، خیال همه رو راحت کنیم.

BORHAN TEC
دوشنبه 10 شهریور 1393, 14:45 عصر
قربانت http://barnamenevis.org/images/smilies/yahoo/115.gif
جیگرتو :لبخند:
فونت مشکل نداشت، توی ویندوز همه تنظیمات زبان رو روی فارسی ست کردم(چون این برنامه رو با نسخه های یونیکدی دلفی کامپایل نکردی:عصبانی:). اعداد رو هم چک کردم و هیچ دوشواری نداره :بامزه:
فقط یک مشکلی کشف کردم و اون هم اینه که اگه وسط کلمات Enter بزنیم کاراکتر مربوط به Enter رو حذف می کنه.

یوسف زالی
دوشنبه 10 شهریور 1393, 15:24 عصر
سورس رو بازنگری می کنم.
ورژن مال موقعیه که یونیکد اختراع نشده بود.
با ورژن جدید کامپایل می کنم

Delphi 2010
دوشنبه 10 شهریور 1393, 15:55 عصر
دوستان کسی Delphi XE7 رو دانلود کرده ببینه مشکل فارسی حل شده یا نه
از آقا یوسف ممنون بابت زحمت هایی که می کشن

a.r.khoshghalb
دوشنبه 10 شهریور 1393, 16:42 عصر
مگه XE7 اومد؟!
چه خوب! توش امکان نوشتن برنامه برای AndroidWear هم اضافه شده؟

firststep
دوشنبه 10 شهریور 1393, 23:06 عصر
سلام عزیز منتظریما برای حالا تابع یا کمپوننت......

دیدین چه جالب این بحث و این راه حل از به زبان اوردن یک راه حل ساده و غیر کار امد که هممون هم می دونستیم شروع شد.....

firststep
دوشنبه 10 شهریور 1393, 23:08 عصر
ایا برای استفاده از این تابع بهتر نیست برای همه گیر شدنش توی کامپوننت های دیگه به دون ویرایش اونها از CLASS HELPER استفاده کنیم

ابوالفضل عباسی
سه شنبه 11 شهریور 1393, 10:02 صبح
دوستان کسی Delphi XE7 رو دانلود کرده ببینه مشکل فارسی حل شده یا نه
از آقا یوسف ممنون بابت زحمت هایی که می کشن

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

حالا دوست من دلفی xe7 هم اومده اپلیکیشن های جورواجور و بهتری هم در اون قرار داده اما هنوز که هنوز هست با زبان هایی که از راست به چپ هستند مثل فارسی مشکل داره.:عصبانی++:

gbg
چهارشنبه 12 شهریور 1393, 00:57 صبح
مشکل عدم نمایش رو قبلا اصلاح کردن
مشکل راست به چپ مونده
بعدش هم برنامه های فارسی بیشتر هنگ میکنه

یوسف زالی
چهارشنبه 12 شهریور 1393, 10:33 صبح
مشکل عدم نمایش رو قبلا اصلاح کردن

مشکل اختلاط فارسی و انگلیسی در یک متن هم در اون روش حل شده؟
چه کسی / شرکتی؟

gbg
پنج شنبه 13 شهریور 1393, 19:55 عصر
خود embarcadero چند تا یونیت داره که میزاری تو مسیر پروژه بعدش اون مشکل حل میشه

hp1361
پنج شنبه 13 شهریور 1393, 21:21 عصر
خود embarcadero چند تا یونیت داره که میزاری تو مسیر پروژه بعدش اون مشکل حل میشه

سلام

خوشحال میشیم کامل تر توضیح بدید چطور این کار رو انجام بدیم. یا لینکی چیزی بزارید

ممنون

nice boy
جمعه 14 شهریور 1393, 09:26 صبح
خود embarcadero چند تا یونیت داره که میزاری تو مسیر پروژه بعدش اون مشکل حل میشه
جالبه من خیلی سرچ کردم ولی این یونیتها روپیدا نکردم میشه لطفا لینک بدبد

zoghal
سه شنبه 18 شهریور 1393, 03:52 صبح
اگه این مشکل حل بشه واقعاً عالیه، چرا که در حال حاضر برنامه های مبتنی با دلفی روی اکثر گوشی ها به درستی اجرا میشه و توی هر نسخه به لیست گوشی های پشتیبانی شده داره اضافه میشه.
این عکس مربوط به یک گوشی HTC Sensation Z710e هست. همانطور که میبینی ShowMessage درست نشون داده میشه ولی متن کنترلها به هم ریخته هست.

دوست عزیز آیا امکانش هست این پروژه تست رو اتچ کنید و تا من هم چندتا تست بزنم.
متاسفانه اغلب برنامه نویسان ایرانی به فونت نگاهی بسیار سطحی دارند. حتی خود طراحان فونت هم اطلاعاتی فنی کاملی نسبت به جزئیات فنی فونت ندارند. من دوساله دارم روی فونت ها کار میکنم و مشکل فونت وب رو من حل کردم و خیلی از مشکلات دیگر.
آنچه در تصویر دیده میشه میتونه مربوط به فونت هم باشه. باید بگم آنقدر در پشت صحنه فونت ها داستان وجود دارد که یک تحقیق ۲-۳ ماه شد ۲ سال. برای مثال هنوز هم که هنوز تو برنامه نویسی با winform فکر میکنم نمی تونید از فونت ها در سایز های کمتر از ۱۴ به درستی استفاده کنید.
اما این مشکل رو هم حل کردم. چون از فونت بود. این هم نمونه تستها:

http://soozanchi.ir/screens/soft-font/
چندتا از دوستان هم برای برای اپ های native اندروید و ای او اس همین مشکل رو داشتند که یک نسخه آزمایشی جواب مثبت بوده.
اگر یک نمونه تست اپ در اختیارم بزارید این مورد رو هم تست میکنم شاید مشکل از فونت باشه.

دلفی بلد
چهارشنبه 19 شهریور 1393, 10:41 صبح
تا همین جا هم که راهی پیدا شده که فارسی در دلفی اندروید داشته باشی خیلیه.
ممنون delphi-xe7

ali_barani
سه شنبه 25 شهریور 1393, 10:46 صبح
جناب You-See ممنون اگر خودتون وقتشو ندارید لطفا سورس برنامه تون را بگذارید تا سایرین تابعش کنند

ابوالفضل عباسی
سه شنبه 25 شهریور 1393, 12:17 عصر
ail_barani عزیز من هم برای حاج یوسف نوشتم که اون کانورتور رو به ما بدهد تا تابعش رو در اینجا قرار بدهیم . ولی فعلا سرشون شلوغ هست و وقت ندارند ان کانورتور رو در اختیار ما قرار بدهند.:متفکر:

یوسف زالی
سه شنبه 25 شهریور 1393, 12:34 عصر
نه عزیزم برای سورس داستانی پیش اومده فعلا معذورم. اگر مشکل رفع بشه ایشالا می گذارم. بخیل که نیستم :لبخند:

ابوالفضل عباسی
سه شنبه 25 شهریور 1393, 14:22 عصر
اختیار داری من که منظورم این نبود

mkarimpour
سه شنبه 15 مهر 1393, 12:28 عصر
با سلام خدمت دوستان عزیز،
من یک کلاس پیدا کردم که کار تبدیل کاراکترها رو انجام میده تا نمایش فارسی (عربی) درست بشه. فرقی هم نداره اندروید یا iOS. این کلاس به زبان جاوا است که من اون رو به Object Pascal ترجمه کردم و یک سری ایرادات اون رو حل کردم و نتیجه بدست آمده، معادل کانورتور آقای یوسف هست، با این تفاوت که سورسش در اختیارماست. در حال حاضر تغییرات در مراحل پایانی است. انشاالله تا آخر هفته به اتمام میرسه و در اوایل هفته بعد در همین تاپیک سورس رو قرار میدم تا دوستان استفاده کنند و با کمک دسته جمعی بتونیم روتین رو بهتر کنیم و ارتقا بدیم. بعد از این که کانورتور تمام شد، می خوام رو ترجمه همزمان کار کنیم که در این مرحله از تمامی دوستان کمک می طلبم. ترجمه همزمان هم بدین صورت است که وقتی کاربر در حال تایپ در Edit یا هر کنترل دیگری است بتوان کانورتور رو صدا زد و متن را به صورت درست نمایش داد. راستی سورس رو برای جناب Marco Cantu که مدیر محصول دلفی در شرکت امبارکادرو هستند نیز خواهم فرستاد تا شاید کمکی باشه برای پیشرفت ساپورت BiDi در بستر فایرمانکی.
در پایان، برای دوستانی که علاقه به تحقیق دارند می توانند با کلمات کلیدی Android Arabic Disconnected Letter یا ArabicUtilities یا Arabic Reshaper در گوگل جستجو کنند.

124317

با تشکر فراوان
مهدی کریم پور
mkarimpour@gmail.com

zoghal
سه شنبه 15 مهر 1393, 15:53 عصر
این مشکل در وب هم وجود داشت و سالار کابلی پروژه ای رو با اسم persianParser در گیت هاب دارد که همین کار رو انجام می دهد.

https://github.com/sallar/persianParser

hp1361
سه شنبه 15 مهر 1393, 19:12 عصر
سلام

آقای مهندس عشایری کاری در این خصوص انجام ندادند؟

mkarimpour
جمعه 18 مهر 1393, 19:04 عصر
با سلام. من سورس این کلاس را در این پست قرار می دهم. این روال اشکالاتی دارد که باید رفع شود. دوستان یاری کنند بویژه آقا یوسف عزیز.






unit FarsiReshaper;

interface

uses System.Classes, System.Math;

type
TStruc = class sealed (TObject)
public
Character,
EndGlyph,
IniGlyph,
MidGlyph,
IsoGlyph: Char;
constructor Create(ACharacter, AEndGlyph, AIniGlyph, AMidGlyph, AIsoGlyph: Char);
end;

TFarsi = class sealed (TObject)
strict private
const N_DISTINCT_CHARACTERS = 43;
class var SzLamAndAlef: String;
class var SzLamStickAndAlef: String;
class var SzLa: String;
class var SzLaStick: String;
class var SzLamAndAlefWoosim: String;
class var SzLamStickAndAlefWoosim: String;
class var SzLaWoosim: String;
class var SzLaStickWoosim: String;
class var ArrStruc: array of TStruc;
class var ArrStrucWoosim: array of TStruc;
class var IsFarsiConversionNeeded : Boolean;

class function IsFarsiChar(Ch: Char): Boolean;
class function FarsiReverse(S: String): String;
class function IsFromTheSet1(Ch: Char): Boolean;
class function IsFromTheSet2(Ch: Char): Boolean;
class function CharIsLTR(Ch: Char): Boolean;
class function CharIsRTL(Ch: Char): Boolean;
class function ReorderWords(S: String): String;
class function ConvertWord(S: String): String;
public
class function Convert(S: String): String;
class function ConvertBackToRealFarsi(S: String): String;
class constructor Create;
end;

implementation

uses
System.StrUtils, System.SysUtils, System.Character;

{ TStruc }

constructor TStruc.Create(ACharacter, AEndGlyph, AIniGlyph, AMidGlyph, AIsoGlyph: Char);
begin
Character:= ACharacter;
EndGlyph:= AEndGlyph;
IniGlyph:= AIniGlyph;
MidGlyph:= AMidGlyph;
IsoGlyph:= AIsoGlyph;
end;

{ TFarsi }

class function TFarsi.FarsiReverse(S: String): String;
var
LRev: String;
I: Integer;
begin
Result:= EmptyStr;
LRev:= EmptyStr;

S:= ReverseString(S);

I:= 0;
while (I < S.Length) do
begin
if S.Chars[I].IsDigit then
begin
LRev:= EmptyStr;
while (I < S.Length) and (S.Chars[I].IsDigit or (S.Chars[I] = '/') or (S.Chars[I] = '.')) do
begin
LRev:= LRev + S.Chars[I];
Inc(I);
end;

LRev:= ReverseString(LRev);
Result:= Result + LRev;
end
else
begin
Result:= Result + S.Chars[I];
Inc(I);
end;
end;
end;

class function TFarsi.CharIsLTR(Ch: Char): Boolean;
begin
Result:= ((Ch >= Char(65)) and (Ch <= Char(122))) or Ch.IsDigit;
end;

class function TFarsi.CharIsRTL(Ch: Char): Boolean;
begin
Result:= (Ch >= Char($0621))
or
(Ch = Char($060C)) // ،
or
(Ch = Char($061B)) // ؛
or
(Ch = Char($061F)) // ؟
or
((Ch >= Char($0021)) and (Ch <= Char($002F)))
or
((Ch >= Char($003A)) and (Ch <= Char($003F)))
or
(Ch = Char($005B))
or
(Ch = Char($005D))
or
(Ch = Char($007B))
or
(Ch = Char($007D));
end;

class function TFarsi.ReorderWords(S: String): String;
const
ST_RTL = 0;
ST_LTR = 1;
var
LPrevWord: String;
LState, LPreState, I: Integer;
begin
Result:= EmptyStr;
LPrevWord:= EmptyStr;
LState:= ST_RTL;
LPreState:= ST_RTL;

I:= 0;
while (I < S.Length) do
begin
if CharIsLTR(S.Chars[I]) and (LState <> ST_LTR) then
begin
// State changed to LTR
LPreState:= ST_RTL;
LState:= ST_LTR;
Result:= Result + LPrevWord;
LPrevWord:= S.Chars[I];
end
else
if CharIsRTL(S.Chars[I]) and (LState <> ST_RTL) then
begin
// State changed to RTL
LPreState:= ST_LTR;
LState:= ST_RTL;
Result:= LPrevWord + Result;
LPrevWord:= S.Chars[I];
end
else
// State is not changed
begin
case LState of
ST_RTL: LPrevWord:= S.Chars[I] + LPrevWord;
ST_LTR: LPrevWord:= LPrevWord + S.Chars[I];
end;
//LPrevWord:= LPrevWord + S.Chars[I];
end;

Inc(I);
end;

// Result:= LPrevWord + Result;


case LPreState of
ST_RTL: Result:= LPrevWord + Result;
ST_LTR: Result:= Result + LPrevWord;
end;

end;

class function TFarsi.ConvertWord(S: String): String;
var
LLinkBefore, LLinkAfter: Boolean;
LIdx, I: Integer;
LChr: Char;

begin
Result:= DupeString(' ', S.Length);
LLinkBefore:= False;
LLinkAfter:= False;
I:= 0;
LIdx:= 0;

if (not TFarsi.IsFarsiConversionNeeded) or (S.IsEmpty) then
Exit(S);

while (I < S.Length) do
begin
if IsFarsiChar(S.Chars[I]) then
begin
LIdx:= 0;
LChr:= #0;

while (LIdx < N_DISTINCT_CHARACTERS) do
begin
if ArrStruc[LIdx].Character = S.Chars[I] then
Break;

Inc(LIdx);
end;

if (I = S.Length - 1) then
LLinkAfter:= False
else
LLinkAfter:= IsFromTheSet1(S.Chars[I + 1]) or IsFromTheSet2(S.Chars[I + 1]);

if I = 0 then
LLinkBefore:= False
else
LLinkBefore:= IsFromTheSet1(S.Chars[I - 1]);

if (LIdx < N_DISTINCT_CHARACTERS) then
begin
if LLinkBefore and LLinkAfter then
LChr:= ArrStruc[LIdx].MidGlyph
else
if LLinkBefore and not LLinkAfter then
LChr:= ArrStruc[LIdx].EndGlyph
else
if not LLinkBefore and LLinkAfter then
LChr:= ArrStruc[LIdx].IniGlyph
else
if not LLinkBefore and not LLinkAfter then
LChr:= ArrStruc[LIdx].IsoGlyph;
end
else
LChr:= S.Chars[I];

Result[I]:= LChr;
end
else
Result[I]:= S.Chars[I];

Inc(I);
end;

Result:= Result.Replace(Char($200c), ' '); // Change NO SPACE to SPACE
Result:= Result.Replace(szLamAndAlef, szLa); // Join 'Lam' and 'Alef' and make 'La'
Result:= Result.Replace(szLamStickAndAlef, szLaStick); // Join 'Lam Stick' and 'Alef' and make 'La Stick'
Result:= ReorderWords(Result);
end;

class function TFarsi.Convert(S: String): String;
var
LArrWords: TArray<String>;
I: Integer;
begin
// Result:= ConvertWord(S);

Result:= EmptyStr;
LArrWords:= S.Split([' ']);
for I := Low(LArrWords) to High(LArrWords) do
begin
LArrWords[I]:= ConvertWord(LArrWords[I]);
Result:= LArrWords[I] + ' ' + Result;
end;

end;

class function TFarsi.ConvertBackToRealFarsi(S: String): String;
var
LSB: TStringBuilder;
I, J: Integer;
LFound: Boolean;
begin
Result:= EmptyStr;
I:= 0;
J:= 0;

if not IsFarsiConversionNeeded then
Exit(S);

LSB:= TStringBuilder.Create(EmptyStr);
try
while (I < S.Length) do
begin
LFound:= False;
for J := Low(ArrStruc) to High(ArrStruc) do
begin
if (S.Chars[I] = ArrStruc[J].MidGlyph)
or
(S.Chars[I] = ArrStruc[J].IniGlyph)
or
(S.Chars[I] = ArrStruc[J].EndGlyph)
or
(S.Chars[I] = ArrStruc[J].IsoGlyph) then
begin
LSB.Append(ArrStruc[J].Character);
LFound:= True;
Break;
end;
end;

if not LFound then
LSB.Append(S.Chars[I]);

Inc(I);
end;

Result:= LSB.ToString;
Result:= Result.Replace(TFarsi.SzLa, 'لا');
Result:= Result.Replace(TFarsi.SzLaStick, 'لا');
//Result:= TFarsi.ReorderWords(Result);
finally
FreeAndNil(LSB);
end;
end;

class constructor TFarsi.Create;
begin
TFarsi.IsFarsiConversionNeeded:= True;
TFarsi.SzLamAndAlef := Char($FEDF) + Char($FE8E); // Lam + Alef
TFarsi.SzLamStickAndAlef := Char($FEE0) + Char($FE8E); // Lam (Sticky !!!)+
TFarsi.SzLa := Char($FEFB); // La
TFarsi.SzLaStick := Char($FEFC); // La (Sticky!!!)
TFarsi.SzLamAndAlefWoosim := Char($E1) + Char($BB); // Lam + Alef
TFarsi.SzLamStickAndAlefWoosim := Char($90) + Char($BB); // Lam (Sticky !!!)+ Alef
TFarsi.SzLaWoosim := Char($D9); // La
TFarsi.SzLaStickWoosim := Char($D9); // La

{Array}
TFarsi.ArrStruc:=
[
TStruc.Create(Char($630), Char($FEAC), Char($FEAB), Char($FEAC), Char($FEAB)),
TStruc.Create(Char($62F), Char($FEAA), Char($FEA9), Char($FEAA), Char($FEA9)),
TStruc.Create(Char($62C), Char($FE9E), Char($FE9F), Char($FEA0), Char($FE9D)),
TStruc.Create(Char($62D), Char($FEA2), Char($FEA3), Char($FEA4), Char($FEA1)),
TStruc.Create(Char($62E), Char($FEA6), Char($FEA7), Char($FEA8), Char($FEA5)),
TStruc.Create(Char($647), Char($FEEA), Char($FEEB), Char($FEEC), Char($FEE9)),
TStruc.Create(Char($639), Char($FECA), Char($FECB), Char($FECC), Char($FEC9)),
TStruc.Create(Char($63A), Char($FECE), Char($FECF), Char($FED0), Char($FECD)),
TStruc.Create(Char($641), Char($FED2), Char($FED3), Char($FED4), Char($FED1)),
TStruc.Create(Char($642), Char($FED6), Char($FED7), Char($FED8), Char($FED5)),
TStruc.Create(Char($62B), Char($FE9A), Char($FE9B), Char($FE9C), Char($FE99)),
TStruc.Create(Char($635), Char($FEBA), Char($FEBB), Char($FEBC), Char($FEB9)),
TStruc.Create(Char($636), Char($FEBE), Char($FEBF), Char($FEC0), Char($FEBD)),
TStruc.Create(Char($637), Char($FEC2), Char($FEC3), Char($FEC4), Char($FEC1)),
TStruc.Create(Char($643), Char($FEDA), Char($FEDB), Char($FEDC), Char($FED9)),
TStruc.Create(Char($645), Char($FEE2), Char($FEE3), Char($FEE4), Char($FEE1)),
TStruc.Create(Char($646), Char($FEE6), Char($FEE7), Char($FEE8), Char($FEE5)),
TStruc.Create(Char($62A), Char($FE96), Char($FE97), Char($FE98), Char($FE95)),
TStruc.Create(Char($627), Char($FE8E), Char($FE8D), Char($FE8E), Char($FE8D)),
TStruc.Create(Char($644), Char($FEDE), Char($FEDF), Char($FEE0), Char($FEDD)),
TStruc.Create(Char($628), Char($FE90), Char($FE91), Char($FE92), Char($FE8F)),
TStruc.Create(Char($64A), Char($FEF2), Char($FEF3), Char($FEF4), Char($FEF1)),
TStruc.Create(Char($633), Char($FEB2), Char($FEB3), Char($FEB4), Char($FEB1)),
TStruc.Create(Char($634), Char($FEB6), Char($FEB7), Char($FEB8), Char($FEB5)),
TStruc.Create(Char($638), Char($FEC6), Char($FEC7), Char($FEC8), Char($FEC5)),
TStruc.Create(Char($632), Char($FEB0), Char($FEAF), Char($FEB0), Char($FEAF)),
TStruc.Create(Char($648), Char($FEEE), Char($FEED), Char($FEEE), Char($FEED)),
TStruc.Create(Char($629), Char($FE94), Char($FE93), Char($FE93), Char($FE93)),
TStruc.Create(Char($649), Char($FEF0), Char($FEEF), Char($FEF0), Char($FEEF)),
TStruc.Create(Char($631), Char($FEAE), Char($FEAD), Char($FEAE), Char($FEAD)),
TStruc.Create(Char($624), Char($FE86), Char($FE85), Char($FE86), Char($FE85)),
TStruc.Create(Char($621), Char($FE80), Char($FE80), Char($FE80), Char($FE80)),
TStruc.Create(Char($626), Char($FE8A), Char($FE8B), Char($FE8C), Char($FE89)),
TStruc.Create(Char($623), Char($FE84), Char($FE83), Char($FE84), Char($FE83)),
TStruc.Create(Char($622), Char($FE82), Char($FE81), Char($FE82), Char($FE81)),
TStruc.Create(Char($625), Char($FE88), Char($FE87), Char($FE88), Char($FE87)),
TStruc.Create(Char($67E), Char($FB57), Char($FB58), Char($FB59), Char($FB56)),
TStruc.Create(Char($686), Char($FB7B), Char($FB7C), Char($FB7D), Char($FB7A)),
TStruc.Create(Char($698), Char($FB8B), Char($FB8A), Char($FB8B), Char($FB8A)),
TStruc.Create(Char($6A9), Char($FB8F), Char($FB90), Char($FB91), Char($FB8E)),
TStruc.Create(Char($6AF), Char($FB93), Char($FB94), Char($FB95), Char($FB92)),
TStruc.Create(Char($6CC), Char($FBFD), Char($FEF3), Char($FEF4), Char($FBFC)),
TStruc.Create(Char($6C0), Char($FBA5), Char($FBA4), Char($FBA5), Char($FBA4))
];

TFarsi.ArrStrucWoosim:=
[
TStruc.Create(Char($630), Char($B5), Char($82), Char($B5), Char($82)),
TStruc.Create(Char($62F), Char($B4), Char($81), Char($B4), Char($81)),
TStruc.Create(Char($62C), Char($9B), Char($B1), Char($F9), Char($BF)),
TStruc.Create(Char($62D), Char($9C), Char($B2), Char($FA), Char($C0)),
TStruc.Create(Char($62E), Char($9D), Char($B3), Char($FE), Char($C1)),
TStruc.Create(Char($647), Char($AC), Char($E4), Char($93), Char($D5)),
TStruc.Create(Char($639), Char($C9), Char($D3), Char($8B), Char($A4)),
TStruc.Create(Char($63A), Char($CA), Char($DD), Char($8C), Char($A5)),
TStruc.Create(Char($641), Char($A6), Char($DE), Char($8D), Char($CC)),
TStruc.Create(Char($642), Char($A7), Char($DF), Char($8E), Char($CE)),
TStruc.Create(Char($62B), Char($BD), Char($AF), Char($EA), Char($99)),
TStruc.Create(Char($635), Char($C4), Char($C8), Char($87), Char($A0)),
TStruc.Create(Char($636), Char($C5), Char($CB), Char($88), Char($A1)),
TStruc.Create(Char($637), Char($C6), Char($CD), Char($CD), Char($A2)),
TStruc.Create(Char($643), Char($CF), Char($E0), Char($8F), Char($A8)),
TStruc.Create(Char($645), Char($D2), Char($E2), Char($91), Char($AA)),
TStruc.Create(Char($646), Char($D4), Char($E3), Char($92), Char($AB)),
TStruc.Create(Char($62A), Char($BD), Char($AF), Char($EA), Char($99)),
TStruc.Create(Char($627), Char($BB), Char($80), Char($BB), Char($80)),
TStruc.Create(Char($644), Char($D1), Char($E1), Char($90), Char($A9)),
TStruc.Create(Char($628), Char($BC), Char($AE), Char($E9), Char($98)),
TStruc.Create(Char($64A), Char($DC), Char($E6), Char($95), Char($DC)),
TStruc.Create(Char($633), Char($C2), Char($B8), Char($B8), Char($9E)),
TStruc.Create(Char($634), Char($C3), Char($B9), Char($B9), Char($9F)),
TStruc.Create(Char($638), Char($C7), Char($CD), Char($CD), Char($C7)),
TStruc.Create(Char($632), Char($B7), Char($B7), Char($B7), Char($B7)),
TStruc.Create(Char($648), Char($94), Char($94), Char($94), Char($94)),
TStruc.Create(Char($629), Char($DA), Char($DA), Char($DA), Char($DA)),
TStruc.Create(Char($649), Char($DC), Char($E6), Char($95), Char($DC)),
TStruc.Create(Char($631), Char($B6), Char($B6), Char($B6), Char($B6)),
TStruc.Create(Char($624), Char($E7), Char($E7), Char($E7), Char($E7)),
TStruc.Create(Char($621), Char($BA), Char($BA), Char($BA), Char($BA)),
TStruc.Create(Char($626), Char($D7), Char($E8), Char($97), Char($D7)),
TStruc.Create(Char($623), Char($80), Char($80), Char($80), Char($80)),
TStruc.Create(Char($622), Char($80), Char($80), Char($80), Char($80)),
TStruc.Create(Char($625), Char($80), Char($80), Char($80), Char($80)),
TStruc.Create(Char($67E), Char($BC), Char($AE), Char($E9), Char($98)),
TStruc.Create(Char($686), Char($9B), Char($B1), Char($F9), Char($BF)),
TStruc.Create(Char($698), Char($B7), Char($B7), Char($B7), Char($B7)),
TStruc.Create(Char($6A9), Char($CF), Char($E0), Char($8F), Char($A8)),
TStruc.Create(Char($6AF), Char($CF), Char($E0), Char($8F), Char($A8)),
TStruc.Create(Char($6CC), Char($DC), Char($E6), Char($95), Char($DC)),
TStruc.Create(Char($6C0), Char($AC), Char($E4), Char($93), Char($D5))
];
end;

class function TFarsi.IsFarsiChar(Ch: Char): Boolean;
begin
Result:= ((Ch >= Char($0621)) and (Ch <= Char($064a)))
or
(Ch = Char($067e))
or
(Ch = Char($0686))
or
(Ch = Char($0698))
or
(Ch = Char($06a9))
or
(Ch = Char($06af))
or
(Ch = Char($06cc))
or
(Ch = Char($06c0));
end;

class function TFarsi.IsFromTheSet1(Ch: Char): Boolean;
var
LTheSet1: array of Char;
I: Integer;
begin
Result:= False;
I:= 0;
LTheSet1:= [
Char($62C), Char($62D), Char($62E), Char($647), Char($639), Char($63A),
Char($641), Char($642), Char($62B), Char($635), Char($636), Char($637),
Char($643), Char($645), Char($646), Char($62A), Char($644), Char($628),
Char($64A), Char($633), Char($634), Char($638), Char($67E), Char($686),
Char($6A9), Char($6AF), Char($6CC), Char($626)
];

while (I < 28) do
begin
if Ch = LTheSet1[I] then
Exit(True);

Inc(I);
end;
end;

class function TFarsi.IsFromTheSet2(Ch: Char): Boolean;
var
LTheSet2: array of Char;
I: Integer;
begin
Result:= False;
I:= 0;
LTheSet2:= [
Char($627), Char($623), Char($625), Char($622), Char($62F), Char($630),
Char($631), Char($632), Char($648), Char($624), Char($629), Char($649),
Char($698), Char($6C0)
];

while (I < 14) do
begin
if Ch = LTheSet2[I] then
Exit(True);

Inc(I);
end;
end;

end.




- موارد مشابه برای ترجمه وجود دارند که در زیر آمده است:
- https://github.com/agawish/Better-Arabic-Reshaper
- http://www.java2s.com/Code/Android/Security/ReshapingArabicSentencesandTextUtilitiestodealwith Arabic.htm
- بهترین مورد پیاده شده تا کنون FriBiDi است. friBiDi.org

با تشکر از همه دوستان که در ارتقا و بهبود این روال تلاش خواهند کرد.
مهدی کریم پور

Delphi 2010
چهارشنبه 23 مهر 1393, 12:01 عصر
حالا چطوری باید استفاده کنیم عزیزان

mxmaa64
سه شنبه 27 آبان 1393, 07:54 صبح
سلام با تشکر از دوست خیلی خوبم Mkarimpour که زحمت این تابع فوق العاده رو کشیده من یه کاری کردم البته شاید به ذهن بقیه هم رسیده باشه اما گفتم سهم کوچیکی داشته باشم. با این تابع میتونید در حال تایپ کردن فارسی رو درست نمایش بدبد. البته دارم سعی می کنم کامپوننت کنمش اما Edit یه سری محدودیت داره تو کلاس هاش که دارم سعی می کنم درستش کنم.

unit DPAEdit;

interface

uses
System.SysUtils, System.Classes, FMX.Types, FMX.Controls,
FMX.Controls.Presentation, FMX.Edit, StrUtils;

type
TDPAEdit = class(TEdit)
private
FBeforChars: String;
FSpaceKeyPressed: Boolean;
protected
procedure SetOnTyping;
procedure SetOnValidate;
published
Property SpaceKeyPressed : Boolean Read FSpaceKeyPressed Write FSpaceKeyPressed;
end;

procedure Register;

implementation

uses FarsiReshaper;

procedure Register;
begin
RegisterComponents('Standard', [TDPAEdit]);
end;

{ TDPAEdit }

{constructor TDPAEdit.Create;
begin
inherited;
FSpaceKeyPressed := False;
end; }

procedure TDPAEdit.SetOnTyping;
var
RealBefore,
LastChar: String;
begin
inherited;
LastChar := Copy(Text.Trim, Text.Trim.Length, 1);
RealBefore := ReverseString(TFarsi.ConvertBackToRealFarsi(FBefor Chars)).TrimLeft;

if Text.Trim.Length > RealBefore.Trim.Length Then
Begin
if FSpaceKeyPressed then
Begin
Text := TFarsi.Convert(RealBefore + ' ' + LastChar);
FSpaceKeyPressed := False;
End
Else
Text := TFarsi.Convert(RealBefore + LastChar);
End
Else if RealBefore.Trim.Length = Text.Trim.Length Then
FSpaceKeyPressed := True
Else if Text.Trim.Length < RealBefore.Trim.Length Then
Text := TFarsi.Convert(Copy(RealBefore, 1, RealBefore.Length - 1));
end;

procedure TDPAEdit.SetOnValidate;
begin
inherited;
FBeforChars := Text;
end;

end.

یوسف زالی
سه شنبه 27 آبان 1393, 14:03 عصر
سلام.
هیچ کدام از این کدها رو نتونستم به درستی تست کنم.
البته روی XE6 که جواب نمی ده، باید اصلاحاتی انجام می دادم، اما باز هم نشد.
اگر نمونه پروژه ای دارید اتچ کنید بررسی می کنم.

mxmaa64
چهارشنبه 28 آبان 1393, 13:43 عصر
اینم از کامپوننت : یه گزینه داره به نام PersianSupport تیک بزنید حال کنید :لبخند:

mxmaa64
جمعه 30 آبان 1393, 00:25 صبح
دارم یه پک کامل ازGrid, Label, Edit, Button, DataSet ها می سازم که به محض اتمام Upload می کنم

یوسف زالی
جمعه 30 آبان 1393, 00:39 صبح
یک عکس از ادیت در حال تایپ فارسی بگیرید بگذارید ببینم چطور کار می کنه، من نتونستم کار کنم.
بعد از تایپ، مهم ترین اشکال اینه که text رو اگر بخونیم، برعکس خونده می شه، این رو چکار کردید؟
من با اصلاح یونیت TControl مربوط به اندروید، و خوراندن اون به دلفی همه کنترل ها رو با هم یکجا اصلاح کردم، به این روش فکر کنید.

mxmaa64
جمعه 30 آبان 1393, 00:56 صبح
رو XE7 نصبش کن حتما ، من نخواستم به یونیتای دلفی دست بزنم واسه همین رفتم سراغ اینکه کامپوننت هارو از یونیت خودش inherit کنم. برای ذخیره کردن موقع ذخیره دارم رو DataSet می نویسم که هم موقع OnGetText و هم موقع Post واژه ها رو دوباره فارسی عادی کنه. واسه مقایسه هم میتونی از توابع کانورت چون var funcion هستن به راختی استفاده کنی فقط کافیه یکی از کامپوننت ها رو صفحه باشه یا یونت اون use شده باشه

یوسف زالی
جمعه 30 آبان 1393, 01:11 صبح
باید دنبال راه بهتری باشیم. مثلا OverRide کردن متد GetText شاید خوب باشه.
وقت کنم روش باز کار می کنم

mxmaa64
جمعه 30 آبان 1393, 01:16 صبح
یک عکس از ادیت در حال تایپ فارسی بگیرید بگذارید ببینم چطور کار می کنه، من نتونستم کار کنم.
این هم نمونه از برنامه و عکس هاش

mxmaa64
جمعه 30 آبان 1393, 01:18 صبح
واسه اونایی که میشه override کردم اما مثلا Tedit همه تایع هاش بسته هستن. بقیه رو همه رو override دارم می نویسم اما کامپوننت می کنم که واسه همه قابل استفاده باشه

gbg
سه شنبه 18 آذر 1393, 00:59 صبح
من اومدم راست به چی رو توی فایر مانکی اصلاح کردم (البته نسخه ویندوزش) ، حالا توی آندروید مکان مکانما رو درست نشون میده ولی مشکل برعکس نمایش دادن و نچسبیده بودن حروف هستش
اونایی که از کانورتور استفاده کردن موقع خوندن رشته برعکس نمیشه؟ اگه میشه برم سراغ اصلاح رندرش و وقت برای کانورتور نوشتن نزارم

zoghal
سه شنبه 18 آذر 1393, 03:54 صبح
مشکل جدا جدا شدن مربوط میشه به اینکه از BIDI DIRECTION پشتیبانی نمیشه. برای اصلاح این کار نیاز به یک reshaper هست.
تو گیت هاپ انواع عربیش رو پیدا میکنید. در زمینه ینی کد و استاندارد فارسی من می تونم کمکتون کنم.

اما هنوز متوجه نشدم مشکل رندر چیه؟ چه مشکلی در رندر هست؟

gbg
سه شنبه 18 آذر 1393, 19:35 عصر
منظورم از رندر اینکه خروف رو نمی چسبونه و برعکس نشون میده
من متاسفانه چیزی تو اینترنت پیدا نکردم
حالا گیت هاب رو هم نگاه میکنم

mkarimpour
چهارشنبه 19 آذر 1393, 09:57 صبح
با سلام،
من سورس برگردان شده به آبجکت پاسکال (بنام FarsiReshaper) رو در پست های قبلی گذاشتم. برای اصلاح جدا جدا بودن حروف می تونید از اون استفاده کنید که پایه کامپوننتی هست که دوستمون برای کنترل TEdit فایرمانکی ایجاد کرده است.

gbg
چهارشنبه 19 آذر 1393, 18:48 عصر
ممنون
ولی توی کانورتورها فکر میکنم رشته رو اول برعکس میکنن بعدش حروف رو به اول وسط آخر تبدیل می کنن
من نمی خوام کلمه رو برعکس کنم
بعدش هم یه کانورتور که دیدم خیلی حجم کدش زیاد بود ، یه همچین الگروتمی نباید اونقدر زولانی باشه

gbg
چهارشنبه 19 آذر 1393, 23:59 عصر
من تو گیت هاب چیزی ندیدم
میشه دقیقا بگی کجا دیدی

developing
پنج شنبه 20 آذر 1393, 09:02 صبح
با سلام

دوستان دیدم دارید تلاش می کنید فارسی نویسی در اندروید توسط دلفی رو انجام بدید، گفتم شاید موارد زیر به درد بخوره و کمکتون کنه:

1- از شرکت داده پردازان فراگیر یک سری کامپوننت بازمتن منتشر شده که مشکل رو رفع کردن و از اینجا (http://sourceforge.net/projects/dpfdelphiandroid/) می تونید به اون دسترسی داشته باشید.(البته با لطف جدید دوستان سورس فورج هم چیلتر شده پس باید با چیز پی ان یا چیلترشکن وارد بشوید.)

2-در لازاروس امکان فارسی نویسی به صورت درست وجود داره. و همون طور که می دونید دلفی هم از این کامپایلر برای آزمون توسعه بر روی بسترهای دیگه استفاده می کنه. اون رو هم یه نگاهی بندازید بد نیست.

البته این دومی یک کم دنگ و فنگ داره که باید طریقه ی تنظیم کردن لازاروس برای چند بستری (Cross-Build) رو بدونید ولی از اینجا (http://sourceforge.net/projects/laz4android/)می تونید یه چیزهایی در موردش به دست بیارید.

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

ما که وقتش رو نداریم. البته سوادش رو هم نداریم.:خجالت:

با تشکر

gbg
جمعه 21 آذر 1393, 00:14 صبح
بله دستشون درد نکنه اما نظر شخصی من اینکه از این مزخرف تر چیز دیگه ای نمی تونستن بنویسن
یعنی حالم از این کامپوننت DPF بهم می خوره ، الکی هم اینترنت رو پر کردن ، همه هم همش دایورت می کنن روش ، به نظر من فقط یک کلام به درد نمی خورههههههههههههههههههه :عصبانی++:

a.r.khoshghalb
یک شنبه 23 آذر 1393, 00:03 صبح
بله دستشون درد نکنه اما نظر شخصی من اینکه از این مزخرف تر چیز دیگه ای نمی تونستن بنویسن
یعنی حالم از این کامپوننت DPF بهم می خوره ، الکی هم اینترنت رو پر کردن ، همه هم همش دایورت می کنن روش ، به نظر من فقط یک کلام به درد نمی خورههههههههههههههههههه :عصبانی++:

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

gbg
یک شنبه 23 آذر 1393, 11:08 صبح
من که نتونستم باهاش کار کنم
اگه کسی کار کرده و مشکل نداشته بیاد بگه

مشکل و دنگ و فنگ نصبش هم که به جای خود

nice boy
پنج شنبه 27 آذر 1393, 18:27 عصر
میشه یکم دقیق تر بگید؟ چه مشکلاتی داره؟ اگر کسی باهاش کار کنه کارش راه نمیوفته؟ (من کار نکردم تا حالا و سوالم صرفا برای بالا بردن اطلاعاتم برای استفاده است)
البته کسی که این کامپوننت رو نوشته خیلی زحمت کشیده و ادم با سوادی هم بوده، ولی در کل اشکالاتی داره که استفاده ازش رو سخت می کنه
1-اولین و بزرگترین عیبش اینکه وقتی ازش استفاده می کنی دیگه نمی تونی همزمان از بقیه کامپوننت های دلفی استفاده کنی!! که اصلا خوب نیست.
2-بعضی وقتها هنگ می کنه
3-کامپوننتهاش خیلی محدوده
مثلا شما گرید دلفی رو اینجا ندارید چون این کامپوننت ها از کامپوننت ها استاندارد دلفی مشتق نشدن
دو تا از شعارهای اصلی FMX اینه که از همون کامپوننت های موجود در ویندوز در آندروید هم استفاده کنید و دوم اینکه یک کد بنویسید و روی پلتفرمهای مختلف کامپایل کنید ولی وقتی شما از این کامپوننت استفاده می کنی فقط برای آندروید کامپایل میشه
من خودم یه پروژه رو با این کامپوننتها پیاده کردم ولی وسط کار به مشکل خوردم و بیخیال شدم
در کل برای یه پروژه کوچیک خوبه

jst
پنج شنبه 27 آذر 1393, 20:47 عصر
متاسفانه باید فرمایشات دوستان رو تایید کنم . این کامپوننت خیلی کاربردی نیست و تقریبا نمیشه روش حساب کرد .
من الان گیر کردم براساس تبلیغات رو نت فکر می کردم با این کامپوننت مشکل حل میشه ولی الان نمیدونم چکار کنم کسی کانورتر و یا امثال اون رو نداره که کارم راه بیفته ؟

jst
پنج شنبه 27 آذر 1393, 20:54 عصر
اگر ممکنه کمی راجع به توابع موجود در farsireshaper و روش کارتون توضیح بدید تا کمکتون کنیم و زودتر بتونیم مشکل رو حل کنیم .

zoghal
جمعه 28 آذر 1393, 18:27 عصر
ممنون
ولی توی کانورتورها فکر میکنم رشته رو اول برعکس میکنن بعدش حروف رو به اول وسط آخر تبدیل می کنن
من نمی خوام کلمه رو برعکس کنم
بعدش هم یه کانورتور که دیدم خیلی حجم کدش زیاد بود ، یه همچین الگروتمی نباید اونقدر زولانی باشه

نه نه نیاز به reverse کردن نیست. اجازه بدید یک توضیح کوتاه پیرامون اینکه Unicode Bidirectional Algorithm و نحوه عمکردش بدم شاید خودتون از اول یکی طراحی کردید.

۱- در ینیکود برای هر حرف یک شناسه اختصاصی وجود دارد و قالبا چهار الی دو شناسه دیگر که حالت های مختلف اون حرف هستند. . فرضا ج دارای ۴ فرم هست. ج‍ ‍ج‍ ‍ج ج که اصطلاحا به ترتیب فرم isol,fina,medi,init نامیده می شوند. یا د فقط دو فرم دارد یکی ‍د و د


062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;

۲- هر زمان کلیدی روی کیبورد وارد می شود کدی که ایجاد می شود کد شناسه حرف صادر میشه مثلا در ج کد 062C صادر میشه
۲- این کد به text shaping engine میرسد تا اون حروف رو رندر کنه.
۳- text shaping engine در صورتی که از تمامی جداول اوپن تایپ پشتیبانی کند. میاد فونت رو لود میکنه کد 062C رو به فونت میده و فونت با توجه به موقعیت شناسه ورودی تشخیص میده که که چه فرمی از اون حروف رو برگردونه به موتور بده.

داستان این جدانویسی فونت های فارسی از اینجا شرو میشه و دو حالت دارد :
۱- یا مشکل در فونت هست که جداول gpos,gsub را ندارد یا به درستی تعریف نشده است. مثل این تصویر
126713
۲- text shaping engine از جداول اوپن تایپ پشتیبانی کامل نمی کند.

کار reshaper این هست که یک رشته رو به صورت ورودی دریافت میکنه یکی حروف رو بررسی میکند. به عنوان مثال هرگاه به حرف ج میرسد با توجه به موقعیت حرف در رشته تشخیص میده که کدام فرم باید نمایش داده شود. پس کد حرف رو با کد فرم جایگزین می کند. اینطوری حروف متصل و صحیح نمایش داده می شود.



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



https://github.com/zoghal/persianParser

gbg
جمعه 28 آذر 1393, 23:32 عصر
ممنون به خاطر توضیحت
مشکلم فعلا برعکس بودنشه با جدا بودن موشکل ندارم
البته فعلا گوشی اندرویدی ندارم و 20 روزی میشه که دیگه کار نمی کنم ولی دنبالش هستم
تو هاب شما هم چیزی ندیدم ، البته تو سایتش زیاد وارد هم نیستم

zoghal
شنبه 29 آذر 1393, 01:58 صبح
من دقت نکردم به برعکس بودنش. پس نیاز هم هست معکوس کنید.

تو مخزن گه لینک دادم. یک نمونه RESHAPER هست برای جاوا اسکریپت. برای دلفی نیست.

gbg
شنبه 29 آذر 1393, 13:12 عصر
آره برای جاوار رو دیدم
حالا باز سر فرست کار می کنم باهاش

nice boy
چهارشنبه 17 دی 1393, 07:44 صبح
من با اصلاح یونیت TControl مربوط به اندروید، و خوراندن اون به دلفی همه کنترل ها رو با هم یکجا اصلاح کردم، به این روش فکر کنید.
اگه میشه بفرمایید کدوم متد رو تغییر دادید تا ما هم همون کار رو بکنیم.
آیا با این کار تایپ فارسی درست میشه؟

یوسف زالی
جمعه 26 دی 1393, 01:04 صبح
اگه میشه بفرمایید کدوم متد رو تغییر دادید تا ما هم همون کار رو بکنیم.
آیا با این کار تایپ فارسی درست میشه؟

نه تایپ فارسی رو متد دیگه ای کنترل می کنه.
متاسفانه دلفی XE رو ریمو کردم و ندارم، اما با کمک دوست عزیزم حمزه، و ریموت به ایشون، تا جایی که یادم مونده بود مطالب رو بیرون کشیدم.

در یونیت fmx.controls کلاس tstyledcontrol هنگام ست کردن متن شی، متدی رو کال می کنه به نام translate، که در یونیت fmx.types قرار داره، از طرفی در این متد هم متدی کال می شه که اسمش هست CustomTranslateProc، و شما می تونید درونش رو کدنویسی کرده و روال رو تغییر بدید.
می تونید Translate یا CustomTranslateProc رو بازنویسی کرده و در یونیت بطور مجدد اعمال کنید تا تمام اشیا بصورت اتومات برای نمایش متن از روال شما استفاده کنند.
این کار رو کرده بودم و تست هم گرفته بودم، دقت کنید فقط برای نمایش و نه ورود، برای ورود فکر می کنم روشی که دوستان بیان کردند هم مناسب باشه.

اگر این روال ها رو درست کنید و از اصلاح کننده بنده استفاده کنید، (یا هر ترجمه گر دیگه) اون وقت در هنگام ست کردن متن در شی تون می تونید شکل و کاراکتر ست و کاراکتر مپ رو دستکاری کنید.
دقت کنید که استپ بعدی می تونه دستکاری GetText باشه برای بازنشانی به اصل متن فارسی در هنگام کار کردن با اون مثلا در مقام مقایسه با یک رشته.

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

nice boy
جمعه 26 دی 1393, 11:25 صبح
نه تایپ فارسی رو متد دیگه ای کنترل می کنه.
مرسی از راهنماییتون.
ولی من با تغییر متد TTextLayout.EndUpdate و استفاده از Converter مشکل تایپ فارسی رو حل کردم. حتی تایپ ترکیبی فارسی و انگلیسی هم مشکل نداره.
برای نمایش هم متد TText.SetText رو تغییر دادم که درست شد.
البته هنوز دارم تست می کنم.
البته Converter هم که دوستان قرار داده بودند یه اشکالاتی داره مثلا حروف فارسی رو برعکس می کنه یا موقع نوشتن کلمات انگلیسی و فارسی مشکل پیش میاد که دارم اون رو هم تغییر می دم.

jst
دوشنبه 29 دی 1393, 23:59 عصر
دوستان لطفا مشارکت کنید تا یه راه حلی پیدا کنیم

adel_javad
پنج شنبه 02 بهمن 1393, 22:40 عصر
حالا چطوری باید استفاده کنیم عزیزان

سلام دوستان
خیلی ممنون
کل اینترنت رو گشتم و جوابمو اینجا پیدا کردم
ممنون
یه تابع ساده نوشتم که امیدوارم به درد همه بخوره
این تابع تمام کامپوننت هایی رو که متن text داره رو راست چین میکنه
این تابع از کلاس بالا استفاده میکنه
اونو توی پروژتون اد کنید و از این تابع استفاده کنید
Farsi:=TFarsi.Create;
for I := 0 to ComponentCount-1 do
begin
if (Components[i] is TTextControl) Then
(Components[i] as TTextControl).Text:=Farsi.Convert((Components[i] as TTextControl).Text);


end;

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

jst
جمعه 03 بهمن 1393, 19:06 عصر
ضمن تشکر میشه بفرمایید برای listview , grid چکار باید کرد ؟

nice boy
یک شنبه 05 بهمن 1393, 19:57 عصر
ضمن تشکر میشه بفرمایید برای listview , grid چکار باید کرد ؟
اگر کارهایی که من در پست قبلیم گفتم انجام بدی گرید هم بدرستی کار میکنه

jst
یک شنبه 05 بهمن 1393, 23:33 عصر
من تو oncreate فرم از کد بالا استفاده کردم . ولی گرید درست نشد.

jst
پنج شنبه 09 بهمن 1393, 22:52 عصر
به لطف راهنمایی های دوستان و استفاده از کلاس tfarsi قدمهای خوبی برداشتم , اما هنگام استفاده از convert متون فارسی - لاتین و یا لاتین نوشته شده در edit کلا حذف می شوند . دوستان راهنمایی بفرمایید

hojat_y
جمعه 10 بهمن 1393, 12:06 عصر
سلام دوستان
خیلی ممنون
کل اینترنت رو گشتم و جوابمو اینجا پیدا کردم
ممنون
یه تابع ساده نوشتم که امیدوارم به درد همه بخوره
این تابع تمام کامپوننت هایی رو که متن text داره رو راست چین میکنه
این تابع از کلاس بالا استفاده میکنه
اونو توی پروژتون اد کنید و از این تابع استفاده کنید
Farsi:=TFarsi.Create;
for I := 0 to ComponentCount-1 do
begin
if (Components[i] is TTextControl) Then
(Components[i] as TTextControl).Text:=Farsi.Convert((Components[i] as TTextControl).Text);


end;

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

کدوم کلاس؟

sasaee04
پنج شنبه 23 بهمن 1393, 08:44 صبح
با عرض سلام و تشكر به همه دوستاني كه در زمينه فارسي سازي دلفي براي برنامه نويسي موبايل تلاش ميكنند.
من همه كامنتها رو خوندم ولي بلاخره متوجه نشدم كه بايد از كدوم كلاس و به چه نحوي استفاده بكنم تا بشه قارسي نوشت.اگر امكانش هست يه توضيح كاملتر بفرماييد يا يك نمونه كد برنامه و مثال بگداريد تا مشكل برايم حل بشه.
البته من با كامپوننت DPF يه برنامه در خصوص كد هاي مخابراتي نوشتم ولي بقول دوستان اولا خيلي دست آدم باز نيست براي استفذاده از همه كامپوننت ها در ثاني خيلي از ابزارهايي كه بايد براي برنامه ميگذاشتم رو ازش چشم پوشي كردم بخاطر محدوديتهاي استفاده از اين كامپوننت.
خوشحال و مننون ميشم كمكم كنيد تا مشكل فارسي نوشتن حل بشه.

adel_javad
جمعه 24 بهمن 1393, 02:04 صبح
سلام
توی کامنت های قبلی سورس تابع پاسکال گذاشته شده
farsi reshaper
این تابع مشکل نمایش کلمات فارسی رو حل میکنه ضمن اینکه ایرادهای مختصری داره مثلا اگه فارسی ابگلیسی باشه به هم میریزه و یا اگه متن بزرگ باشه
جا داره دوستان با کمک هم این تابع رو کامل کنند
:متفکر:

adel_javad
جمعه 24 بهمن 1393, 02:19 صبح
با عرض سلام و تشكر به همه دوستاني كه در زمينه فارسي سازي دلفي براي برنامه نويسي موبايل تلاش ميكنند.
من همه كامنتها رو خوندم ولي بلاخره متوجه نشدم كه بايد از كدوم كلاس و به چه نحوي استفاده بكنم تا بشه قارسي نوشت.اگر امكانش هست يه توضيح كاملتر بفرماييد يا يك نمونه كد برنامه و مثال بگداريد تا مشكل برايم حل بشه.
البته من با كامپوننت DPF يه برنامه در خصوص كد هاي مخابراتي نوشتم ولي بقول دوستان اولا خيلي دست آدم باز نيست براي استفذاده از همه كامپوننت ها در ثاني خيلي از ابزارهايي كه بايد براي برنامه ميگذاشتم رو ازش چشم پوشي كردم بخاطر محدوديتهاي استفاده از اين كامپوننت.
خوشحال و مننون ميشم كمكم كنيد تا مشكل فارسي نوشتن حل بشه.

سلام
برای نمایش فارسی متنهای پروژه در اندروید مراحل زیر را انجام دهید

1-در صفحات قبلی یک کلاس پاسکال گذاشته شده است آن را کپی کنید و در یک یونیت با نام FarsiReshaper.pas ذخیره کنید
2- آن را به پروژه اضافه کنید
3- برای نمایش درست فارسی متن یک text دستورات زیر را بنویسید

var
Farsi:Tfarsi;
Begin
Farsi:=TFarsi.Create;
Button1.text :=Farsi.Convert( Arg1) ;
End

حالا تمام بحث دوستان در نحوه اجرای این کد است
بعضی میگویند در ّFmx.Types یک تابع نام TCustomTranslate وجود دارد و این کانورت را داخل آن فراخوانی کنیم تا همه Text ها اتومات درست شود
بعضی از دوستان میگویند با تغییر
TTextLayout.EndUpdate

ولی نکتهمهم اینه که این روش کلا و از اساس با روش استفاده شده آقای یعقوبی (فکر کنم) نویسنده کامپوننت های DPF متفاوت است چون ایشون از یک مسیر متفاوتی این کار را انجام داده است . این کامپوننت ها از این فرضیه که اندروید خود به خود در نسخه های اخیر مشکلی با فارسی نویسی ندارد پس ایشان با ایجاد کامپوننتها از روی کدهای جاوا این مشکل را حل کرده اند . یعنی کامپوننت لیست ویو ایشان از زمین تا آسمان با لیست ویو دلفی متفاوت است و شاید ما دلفی کارها عادت به استفاده از این کامپوننت ها را نداریم و باید یکسری تنظیمات و پیش نیازها را رعایت کنیم
در پناه حق

sasaee04
دوشنبه 27 بهمن 1393, 12:52 عصر
سلام
برای نمایش فارسی متنهای پروژه در اندروید مراحل زیر را انجام دهید

1-در صفحات قبلی یک کلاس پاسکال گذاشته شده است آن را کپی کنید و در یک یونیت با نام FarsiReshaper.pas ذخیره کنید
2- آن را به پروژه اضافه کنید
3- برای نمایش درست فارسی متن یک text دستورات زیر را بنویسید

var
Farsi:Tfarsi;
Begin
Farsi:=TFarsi.Create;
Button1.text :=Farsi.Convert( Arg1) ;
End

حالا تمام بحث دوستان در نحوه اجرای این کد است
بعضی میگویند در ّFmx.Types یک تابع نام TCustomTranslate وجود دارد و این کانورت را داخل آن فراخوانی کنیم تا همه Text ها اتومات درست شود
بعضی از دوستان میگویند با تغییر TTextLayout.EndUpdate

با سلام و تشكر از توضيحاتتون ..ولي باز هر كاري كه من ميكنم نميشه البته از كم سوادي بنده هستش...لطف ميكنيد يهبرنامه خيلي خيلي ساده مثلا نوشتن در داخل lable يا داخل edit رو برايم بفرستيد تا كامل متوجه بشم.
مثل همين تصوير كه مشاهده ميكنيد مثلا با زدن دكمه داخل EDIT بنويسه " سلام"...ممنون ميشم راهنمايي كنيد

128529

jst
دوشنبه 27 بهمن 1393, 21:22 عصر
دوستان نسخه xe8 دلفی امروز منتشر شد. کسی نصب کرده ؟ آیا مشکل فارسی حل شده ؟

gbg
شنبه 02 اسفند 1393, 22:32 عصر
هنوز منتشر نشده و پروسه تست هستش ، همونطور هم که یک ماه پیش گفتم هنوز حل نشده

Sir.V65j
یک شنبه 23 فروردین 1394, 00:01 صبح
دوستان نسخه xe8 دلفی امروز منتشر شد. کسی نصب کرده ؟ آیا مشکل فارسی حل شده ؟
سلام بنده نصب کردم هنوز مشکل پابرجاس

a.r.khoshghalb
یک شنبه 23 فروردین 1394, 00:26 صبح
سلام بنده نصب کردم هنوز مشکل پابرجاس

بقیه مشکلات چی؟
در کل XE7 یه سری مشکلات عظیمی داشت که XE6 نداشت. من آپدیت که کردم بلافاصله پاک کردم و XE6 رو نصب کردم!
الان چطور شده؟ بهتر از XE7 هست؟ نصب کنیم؟

sasaee04
سه شنبه 25 فروردین 1394, 13:40 عصر
نقل قول: تلاش برای حل مشکل به هم ریختن فارسی نویسی در آندروید سلام
برای نمایش فارسی متنهای پروژه در اندروید مراحل زیر را انجام دهید

1-در صفحات قبلی یک کلاس پاسکال گذاشته شده است آن را کپی کنید و در یک یونیت با نام FarsiReshaper.pas ذخیره کنید
2- آن را به پروژه اضافه کنید
3- برای نمایش درست فارسی متن یک text دستورات زیر را بنویسید

var
Farsi:Tfarsi;
Begin
Farsi:=TFarsi.Create;
Button1.text :=Farsi.Convert( Arg1) ;
End

حالا تمام بحث دوستان در نحوه اجرای این کد است
بعضی میگویند در ّFmx.Types یک تابع نام TCustomTranslate وجود دارد و این کانورت را داخل آن فراخوانی کنیم تا همه Text ها اتومات درست شود
بعضی از دوستان میگویند با تغییر TTextLayout.EndUpdate


با سلام و تشكر از توضيحاتتون ..ولي باز هر كاري كه من ميكنم نميشه البته از كم سوادي بنده هستش...لطف ميكنيد يهبرنامه خيلي خيلي ساده مثلا نوشتن در داخل lable يا داخل edit رو برايم بفرستيد تا كامل متوجه بشم.
مثل همين تصوير كه مشاهده ميكنيد مثلا با زدن دكمه داخل EDIT بنويسه " سلام"...ممنون ميشم راهنمايي كنيد

http://barnamenevis.org/attachment.php?attachmentid=128529&d=1424080340

hadisalahi2
پنج شنبه 27 فروردین 1394, 12:34 عصر
اینم از کامپوننت : یه گزینه داره به نام PersianSupport تیک بزنید حال کنید :لبخند:


والا من که نتوسنتم باهاش حال کنم :گریه:
شما چطوری با این کامپوننت که درست کار نمیکنه حال می کنید
:متفکر:

اصلا حروف رو درست سر هم نمیکنه

Sir.V65j
پنج شنبه 27 فروردین 1394, 22:57 عصر
رو اونت کلیک دکمه این کد رو بنویس


var
Farsi:Tfarsi;
Begin
Farsi:=TFarsi.Create;
Button1.text :=Farsi.Convert( Arg1) ;
End;

بجای arg1 میتونی تکست هم بنویسی یا بصورت دیفالت متن فارسیتون رو روی خاصیت تکست دکمه بنویسین و بعد

Button1.text :=Farsi.Convert( Button1.text) ;
رو تو کد بالا بنویسین


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



var
farsi:TFarsi;

begin
Farsi:=TFarsi.Create;
for I := 0 to ComponentCount - 1 do
begin
if (Components[i] is TLabel) Then
(Components[i] as Tlabel).Text:=Farsi.Convert((Components[i] as Tlabel).Text)
else if (Components[i] Is TEdit ) then
(Components[i] as TEdit ).Text:=Farsi.Convert((Components[i] as TEdit).Text)
else if (Components[i] Is TButton ) then
(Components[i] as TButton ).Text:=Farsi.Convert((Components[i] as TButton).Text);
end;

showmessage('سلام و صد سلام');
\\add a text to end of label text
label3.Text:=farsi.Convert( ' سلام ' ) + ' ' + label3.Text;


end;

sasaee04
جمعه 28 فروردین 1394, 11:59 صبح
سلام Sir.V65j (http://barnamenevis.org/member.php?25368-Sir-V65j) و ممنون از جوابتون
من اون كاري كه شما فرموديد انجام دادم ولي باز هم خطا از همون كلاسي ميده كه به برنامه اضفه كردم تصويرش رو ميذارم بي زحمت بفرماييد مشكل كجاست... مننون ميشم


130391

Sir.V65j
دوشنبه 31 فروردین 1394, 22:51 عصر
سلام من رو xe7 و XE8 استفاده کردم کامل جواب داده و ایرادی نداشت
شمام اینا رو پشت سر هم بکن ببین درست میشه یا نه یعنی همه رو یه خط بکن

nice boy
سه شنبه 01 اردیبهشت 1394, 08:15 صبح
سلام
من اون كاري كه شما فرموديد انجام دادم ولي باز هم خطا از همون كلاسي ميده كه به برنامه اضفه كردم تصويرش رو ميذارم بي زحمت بفرماييد مشكل كجاست... مننون ميشم


شما داری توی XE6 استفاده می کنی. این کدی که نوشته شده روی XE7 به بالا کار می کنه. چون دستوراتی که اینجا برای کار با آرایه ها استفاده شده تازه به دلفی اضافه شده.

sasaee04
جمعه 18 اردیبهشت 1394, 07:17 صبح
سلام
ممنون از همگي مخصوصا از nice-boy و Sir.V65j (http://barnamenevis.org/member.php?25368-Sir-V65j) ..مشكلم حل شد با XE8 كامپايل كردم درست شد.
فقط يه راهنمايي ديگه مي خواستم .
ميخواستم ازتون بپرسم چطوري ميتونم اين كار رو روي list view انجام بدم.ممنون ميشم راهنمايي بكنيد.

jst
جمعه 25 اردیبهشت 1394, 18:06 عصر
یک مشکل اساسی توی فانکشم convert وجود داره که وقتی یک عبارت و تبدیل می کنه حروف انگلیسی رو حذف می کنه و در صورتیکه یکبار تبدیل شده باشه رشته خای بر می گردونه . آیا کسی این مشکل رو حل کرده

meysam_212
جمعه 25 اردیبهشت 1394, 23:57 عصر
دسته همگی درد نکنه
من هنوز تست نکردم ولی زحمتاتون جای تشکر داره
ولی برای اینکه اتوماتیک این تبدیل انجام بشه. موقع وارد کردن متن و خوندن متن و... باید تو کدوم متد ازش استفاده کنیم؟ یا اینکه روی یه متن دوبار کانورت انجام نشه

meysam_212
چهارشنبه 13 خرداد 1394, 00:46 صبح
واسه اونایی که میشه override کردم اما مثلا Tedit همه تایع هاش بسته هستن. بقیه رو همه رو override دارم می نویسم اما کامپوننت می کنم که واسه همه قابل استفاده باشه

برای override کردنشون میتونی از این روش استفاده کنی
In this place, you can override default action by invoking message handlers
procedure WMGetText(var Message: TWMGetText); message WM_GETTEXT;
procedure WMGetTextLength(var Message: TWMGetTextLength); message WM_GETTEXTLENGTH;
procedure WMSetText(var Message: TWMSetText); message WM_SETTEXT;

Or, override
procedure DefaultHandler(var Message); override;

naderanhari
سه شنبه 30 تیر 1394, 18:23 عصر
hp1361 عزیز چشم این مطلب رو می گذارم.
من سعی می کنم با زبانی ساده این مطلب رو توضیح بدهم. درکنار اون اگر جایی رو متوجه نشدید عکس هم میگذارم.(من xe6 دارم روی اون توضیح می دهم)
به نام خدا.
اول: در دلفی(xe5,xe4,xe6) در منوی ابزار سمت راست یک Timage رو انتخاب و در form می گذارید.مانند عکس(برای دیدن عکس روی لینک کلیک کنید.)
http://upload7.ir/imgs/2014-08/01265708350091554285.jpg

دوم: در paint یا برنامه های طراحی مختلف متنی که به فارسی می خواهید در lable در دلفی بگذارید را در paint به فارسی بنویسید.
http://upload7.ir/imgs/2014-08/74018542906336941149.jpg

سوم:اون را با پسوند .bmp ذخیره کنید.

چهارم: حالا این فایل paint رو در Timage بازیابی کنید.
http://upload7.ir/imgs/2014-08/04213526229150644406.jpg

پنجم: جای lable که قرار بود فارسی در ان باشد این Timage را جایگزین ان کنید.
http://upload7.ir/imgs/2014-08/26249097798596052006.jpg

ششم:بقیه جاهایی که می خواهید فارسی کنید از این روش استفاده کنید.

اگر می خواهید نوشته button تان هم فارسی باشد که شکل button در paint طراحی کنید و در Timage بازیابی کنید.و تمام فرمان هایی که در button نوشته بودید در قسمت on click این Timage پیاده سازی کنید.
http://upload7.ir/imgs/2014-08/71614224290133030511.jpg

مشکلی که در اینجا هست این است که نمی توان showmessage هارو فارسی کرد که من در تلاش هستم که فارسی سازی ان ها رو هم کامل کنم.

یک تشکر خشک و خالی هم بکنید برای ما هم کافی است:تشویق:
با تشکر


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

jst
پنج شنبه 01 مرداد 1394, 20:15 عصر
خسته نباشید واقعا ...... تنهایی فکر کردید این روش رو یا اینکه از برنامه نویس های شرکت دلفی هم کمک گرفتید؟
پسر خوب برای کار متون تایپی و بانک اطلاعاتی و سایر اطلاعاتی که تغییر میکنن چیکار میخواید بکنید ... روشی باید بگید به حداقل 90 درصد موارد رو پشتیبانی کنه .....

تو رو خدا بجای انتقاد بیایید همفکری کنیم یه راه حل اساسی پیدا کنیم که بدرد همه بخوره

gbg
سه شنبه 06 مرداد 1394, 21:40 عصر
تو رو خدا بجای انتقاد بیایید همفکری کنیم یه راه حل اساسی پیدا کنیم که بدرد همه بخوره
بازنویسی فایر مانکی

nice boy
یک شنبه 18 مرداد 1394, 21:09 عصر
سلام به دوستان
من تغییراتی در سورس فایرمانکی دادم و مشکل فارسی نویسی رو تا حد زیادی حل کردم
کد نمونه رو اینجا می زارم تا بقیه هم استفاده کنن.
فقط باید فایل ها رو در کنار پروژه تون اضافه کنید.
یکی از فایلها یونیتی هست که قبلا آقای کریم پور نوشته بودند و من برخی تغییرات روی اون دادم.
روی ذلفی XE6 و XE7 تست کردم درست کار می کنه
هنوز روی آندروید 5 تست نکردم
امیدوارم به دردتون بخوره.
اگر کسی اشکالی دید بگه تا اصلاح کنم
134099

Mask
یک شنبه 18 مرداد 1394, 21:15 عصر
هنوز تست نکردم ، اما همینکه به اشتراک میزارید ارزشمنده.
موفق باشید.

jst
دوشنبه 19 مرداد 1394, 00:02 صبح
آقا این خیلی عالیه
خدا خیرت بده
فقط نمی دونم چرا گاهی از برنامه می پرید بیرون ؟ مشکل از گوشی منه یا از کد ؟ هنوزنفهمیدم!

jst
دوشنبه 19 مرداد 1394, 00:40 صبح
text کمبو باکس و LISTBOX هنوز مشکل دارد. ضمنا من در محیط اندروید 5 تست کردم

Mask
دوشنبه 19 مرداد 1394, 01:22 صبح
مشکل از خود نسخه xe5 هست.
برای برنامه های اندریود فعلا xe8 مناسبتر از نسخه های قدیمی تره.

Mary_nikjo
دوشنبه 19 مرداد 1394, 13:44 عصر
سلام واقعا عالی بود خدا خیرتون بده.
فقط اگر امکانش هست تحت xe8 رو هم بزارید خیلی عالی میشه.

Mask
دوشنبه 19 مرداد 1394, 14:24 عصر
تو xe8 مشکل داره. میشه برای xe8 هم تغییرات بدید؟

nice boy
دوشنبه 19 مرداد 1394, 19:07 عصر
فقط نمی دونم چرا گاهی از برنامه می پرید بیرون ؟ مشکل از گوشی منه یا از کد ؟ هنوزنفهمیدم!
این مشکل ارتباطی به این پکیج نداره چون من از این فایلها در یک پروژه استفاده کردم و ساعت ها بدرستی کار کرده

nice boy
دوشنبه 19 مرداد 1394, 19:08 عصر
text کمبو باکس و LISTBOX هنوز مشکل دارد. ضمنا من در محیط اندروید 5 تست کردم
در مورد ComboBox و ListBox هم روش کار می کنم تا درست بشه اگر مورد دیگری هم دیدید بگید تا اصلاح کنم

در آندروید 5 هم تست کردم درست بود

nice boy
دوشنبه 19 مرداد 1394, 19:10 عصر
تو xe8 مشکل داره. میشه برای xe8 هم تغییرات بدید؟
من XE8 رو هنوز نصب نکردم در نتیجه قایلهای اون رو ندارم.
لطفا فایل های زیر رو از مسیر نصب XE8 برای من بفرستید تا براتون اصلاح کنم
FMX.TextLayout.pas
FMX.Objects.pas

jst
دوشنبه 19 مرداد 1394, 20:02 عصر
بعضی وقتها موقع تایپ بدون هیچ خطایی از برنامه خارج میشه !
ظاهرا روی اندروید 5 مشکل داره چون با اندروید پایین تر تست کردم درست بود . احتمالا اگه با xe8 کامپایل بشه مشکل حل بشه

Mary_nikjo
سه شنبه 20 مرداد 1394, 23:46 عصر
رو xe7 آندروید 5 و پایینتر برای من جواب داد فقط xe8 رو اگر لطف کنید. اینم یونیت های xe8 که خواستید.

nice boy
چهارشنبه 21 مرداد 1394, 14:40 عصر
رو xe7 آندروید 5 و پایینتر برای من جواب داد فقط xe8 رو اگر لطف کنید. اینم یونیت های xe8 که خواستید.
تصحیح کردم فقط چون من XE8 ندارم زحمت تست کردنش با خودتون

Mary_nikjo
پنج شنبه 22 مرداد 1394, 12:46 عصر
سلام،
ممنون از زحماتتون. جواب داد رو xe8 مشکلی نداره.
خیلی ممنون.

jst
پنج شنبه 22 مرداد 1394, 22:22 عصر
یک بار دیگه از زحمات شما دوست عزیز صمیمانه متشکرم . خدا خیرت بده . کار من یکی که خیلی راه افتاد .

jst
جمعه 23 مرداد 1394, 09:05 صبح
شما که تو این مورد زحمت کشیدید برای مساله BiDi هم میشه کاری کرد؟

nice boy
جمعه 23 مرداد 1394, 16:05 عصر
شما که تو این مورد زحمت کشیدید برای مساله BiDi هم میشه کاری کرد؟
توی پروژه هایی که من نوشتم درست نمایش دادن فارسی اهمیت داشت و راست چین بودن خیلی مهم نبود در نتیجه دنبالش نرفتم.
ضمن اینکه این مشکل فقط به آندروید مربوط نمیشه و توی ویندوز هم مشکل داره.
مطمئن نیستم ولی فکر می کنم اگر مثلا TEdit مربوط به FMX رو با TEdit درون VCL مقایسه کنیم شاید مشکل راست به چپ رو بشه حل کرد

Mask
جمعه 23 مرداد 1394, 17:56 عصر
ممنون از زحمتتون. من در xe8 تست کردم. انگلیسی ها به هم میریزه. اما فیلدهایی که فارسی هست صحیحه.
ایندفعه بر عکس شد. انگلیسی به هم میریزه.

jst
جمعه 23 مرداد 1394, 18:42 عصر
ممنون از زحمتتون. من در xe8 تست کردم. انگلیسی ها به هم میریزه. اما فیلدهایی که فارسی هست صحیحه.
ایندفعه بر عکس شد. انگلیسی به هم میریزه.

فکر می کنم بشه با مقدار دهی tag ابراهایی که نباید ترجمه بشن , بشه حلش کرد. اگه مکانیزم تغییرات رو توضیح بدید ممنون میشم.

nice boy
شنبه 24 مرداد 1394, 19:10 عصر
ممنون از زحمتتون. من در xe8 تست کردم. انگلیسی ها به هم میریزه. اما فیلدهایی که فارسی هست صحیحه.
ایندفعه بر عکس شد. انگلیسی به هم میریزه.
باید روی XE8 برنامه رو Trace کنم تا مشکل رو پیدا کنم.
هفته آینده می خوام XE8 رو دانلود کنم . به امید خدا اونوقت تست می کنم.

Valadi
شنبه 24 مرداد 1394, 22:38 عصر
در مورد ComboBox و ListBox هم روش کار می کنم تا درست بشه



با تشكر از زحماتتون
اين موارد هم اصلاح كرديد؟

jst
شنبه 14 شهریور 1394, 12:44 عصر
سلام ممکنه فایل مربوط به نسخه seattle رو هم تصحیح بفرمایید !

a.r.khoshghalb
شنبه 14 شهریور 1394, 17:29 عصر
سلام به دوستان
من تغییراتی در سورس فایرمانکی دادم و مشکل فارسی نویسی رو تا حد زیادی حل کردم
کد نمونه رو اینجا می زارم تا بقیه هم استفاده کنن.
فقط باید فایل ها رو در کنار پروژه تون اضافه کنید.
یکی از فایلها یونیتی هست که قبلا آقای کریم پور نوشته بودند و من برخی تغییرات روی اون دادم.
روی ذلفی XE6 و XE7 تست کردم درست کار می کنه
هنوز روی آندروید 5 تست نکردم
امیدوارم به دردتون بخوره.
اگر کسی اشکالی دید بگه تا اصلاح کنم
134099

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

jst
شنبه 14 شهریور 1394, 20:06 عصر
فرمایشتون درسته . ولی محیط دلفی خیلی خوش کارتره ! قبول دارید ؟

nice boy
شنبه 14 شهریور 1394, 21:08 عصر
سلام ممکنه فایل مربوط به نسخه seattle رو هم تصحیح بفرمایید !
اجازه بدید دانلود کنم چشم.
البته نمی دونم نسخه ای که الان برای دانلود گذاشتن شامل فایل های سورس هم میشه یا خیر. چون اگه سورس فایل های
FMX.TextLayout.pas و
FMX.Objects.pas نباشه نمیشه درستش کرد.


من چند ماه پیش که دیگه از حل این مشکل ناامید شده بودم رفتم و جاوا یاد گرفتم و به همه شما هم توصیه میکنم این کار رو انجام بدید. مزایاش برای اندروید نسبت به دلفی خیلییی زیاده در حالی که دلفی هیچ برتری ای نداره.
من خودم هم با جاوا برای آندروید برنامه نوشتم. مسلما امکانات بیشتری روی آندروید داره، همچنین سورس و منابع بیشتری براش هست. ولی به هیچ عنوان از نظر IDE و کامپوننت قابل مقایسه با دلفی نیست.
دلفی خیلی قویتره

ابوالفضل عباسی
چهارشنبه 18 شهریور 1394, 13:25 عصر
با سلام خدمت nice boy و تشکر میکنم از زحمات شما
دو سوال:
1-شما اخرین ورژن دلفی (XE8) رو نصب کردید و تست هارو انجام دادید؟
2-وقتی در دلفی از tabcontrol استفاده میکنی دفعه اول همه چیز فارسی هست اما در دفعه های بعد بعضی از تب ها فارسی میریزه به هم ؟شما به این مشکل بر خورده اید؟
ممنون

J870813986
پنج شنبه 02 مهر 1394, 16:02 عصر
سلام به همه
دوستان یکی با خود شرکت سازنده دلفی ارتباط برقرار کنه ببینه تا کی این مشکل برعکس نوشتن فارسی و راست چین تو اندروید حل میشه.
یعنی شرکت به این غولی نمیتونه این مشکل رو حل کنه؟
اگه نمیتونه دوستان ی راه کار جامع ارائه بدن
حیفه تو دلفی برا اندروید برنامه ننویسیم
لطفا اساتید دست بکار بشن کامپوننت بسازند تجاری هم باشه می ارزه

ابوالفضل عباسی
شنبه 04 مهر 1394, 18:01 عصر
به احتمال زیاد شرکت embarcadero مشکلش رو حل میکنه چون فقط ایران از دلفی استفاده نمیکنه عرب ها هم استفاده میکنن.
به زودی این مشکل رو شرکت دلفی حل میکنه .
اما ماهم نباید بیکار بنشینیم و ماهم باید تلاش کنیم.

raa126
شنبه 11 مهر 1394, 23:40 عصر
دیگه کی میخواد درستش کنه ... جونمون به لب رسیده ... :گریه:من که زدم توی کار جاوا eclipse بخدا خیلی ستم بعد یه عمری دلفی کار کنی بپری یه شاخه دیگه ... خیلی اذیت شدم تا تونستم یه دونه برنامه اونم بعد یه سال بنویسم . ذقیقا پارسال بود بعد کلی تحقیق تصمیم گرفتم eclipse شروع کنم بعد یک سال امشب دوباره زد به سرم گفتم یه سرچی بزنم شاید یار قدیمی ام ( دلفی جان ) دوباره راه بیافته ولی ... :گریه:حیف که بعد جور ما رو نا امید کرده . ظاهرا حالا حالا باید با eclipse بسازم ....

ابوالفضل عباسی
یک شنبه 12 مهر 1394, 14:13 عصر
راست میگی اما من چراغ دلم روشنه.
مگر میشه شرکت دلفی بخاطر این همه کاربری که در ایران و کشور های عربی داره این مشکل رو حل نکنه؟:متفکر:
بچه ها توی سایت شرکت دلفی کامنت گذاشته اند و خودم هم بهشون ایمیل زدم.اوایل بهم جواب ندادند اما جدیدا گفتن مشکلش رو در اسرع وقت حل میکنند.

saba_mehdi
سه شنبه 28 مهر 1394, 11:24 صبح
سلام عزیز
من روی xe8 امتحان کردم listview رو مشکل داره میشه راهنمایی کنید؟

ابوالفضل عباسی
چهارشنبه 29 مهر 1394, 12:11 عصر
بله مشکل داره من و دوستان داریم تلاش میکنیم که این مشکلاتش که مثلا:
در listview و نوشتن انگلیسی و فارسی باهم و گذاشتن علامت های(. و / و \)
حل کنیم اگر درست شد یونیت درست شده رو اینجا قرار میدیم

saba_mehdi
چهارشنبه 29 مهر 1394, 17:37 عصر
بله مشکل داره من و دوستان داریم تلاش میکنیم که این مشکلاتش که مثلا:
در listview و نوشتن انگلیسی و فارسی باهم و گذاشتن علامت های(. و / و \)
حل کنیم اگر درست شد یونیت درست شده رو اینجا قرار میدیم

آیا عباسی جان من با کامپوننت tms FireMonkey تست کردم سری اول مشکلی نداشت ولی دوباره هر کاری کردم نشد امکانش هست شما هم تست کنید اگه جواب گرفتین لطفا اطلاع بدین

ابوالفضل عباسی
چهارشنبه 29 مهر 1394, 18:03 عصر
دوست عزیز من 3 سال هست که روی مشکل فارسی اندروید تلاش میکنم همه ی این راه حل هارو هم امتحان کردم نشده
مگر جز یونیت اقای niceboy

kont_200
دوشنبه 18 آبان 1394, 01:33 صبح
با سلام خدمت nice boy و تشکر میکنم از زحمات شما
بسیار کار شما عالی بود
آیا بر روی bidi mode هم کار کردید

ابوالفضل عباسی
سه شنبه 19 آبان 1394, 17:26 عصر
باید ببینیم که niceboy چکار کرده
زودترین این مشکل رو حل بکنید بچه ها و niceboy
من از یونیت niceboy چیزی سردر نیاوردم وگرنه خودم درستش میکردم

Valadi
پنج شنبه 28 آبان 1394, 19:01 عصر
آپديت اول دلفي سياتل ارائه شده اما خبري از rtl نيست
http://edn.embarcadero.com/article/44619

nice boy
دوشنبه 09 آذر 1394, 20:26 عصر
سلام دوستان
فایل های مربوط به نسخه seattle‌ رو آماده کردم که اینجا میذارم.
مشکل ComboBox‌و ListBox‌هم حل شد
مشکل جابجایی کلمات انگلیسی هم حل شد

kont_200
سه شنبه 10 آذر 1394, 00:54 صبح
با تشکر از دوست عزیز بابت تمامی زحماتشان
آیا برای listview که از بانک فراخوانی می کنیم هم درست است

ابوالفضل عباسی
سه شنبه 10 آذر 1394, 14:26 عصر
تا اینجا که تست کردم توی listview درست عمل کرده.
دستت درد نکنه

Valadi
جمعه 13 آذر 1394, 17:35 عصر
سلام دوستان
فایل های مربوط به نسخه seattle‌ رو آماده کردم که اینجا میذارم.
مشکل ComboBox‌و ListBox‌هم حل شد
مشکل جابجایی کلمات انگلیسی هم حل شد

با تشكر از زحمتتان
براي دلفي XE7 فايل ها رو كي آماده و بارگزاري مي كنيد؟

hadisalahi2
شنبه 14 آذر 1394, 12:33 عصر
منم برای XE7 لازم دارم اگه زحمتی نیست

ابوالفضل عباسی
سه شنبه 17 آذر 1394, 12:18 عصر
بی زحمت نسخه xe7 برای دوستان و هم xe8 برای خودم رو هم قرار بدهید.
ممنون

nice boy
شنبه 21 آذر 1394, 22:03 عصر
بی زحمت نسخه xe7 برای دوستان و هم xe8 برای خودم رو هم قرار بدهید.
ممنون
نسخه مربوط به XE7 و XE8 رو قبلا اینجا گذاشتم از اونها استفاده کنید
بعضی تغییرات هم در فایل PersianTool هست که می تونید فایل جدید که برای S10 گذاشتم رو جایگزین قبلی کنید
برخی موارد هم (مثل ComboBox)مربوط میشه به تغییرات ساختاری که خود Embarcadero در کلاس هاش داده و تغییر دادنشون SideEffect زیادی داره.
پیشنهاد می کنم دوستان از S10 استفاده کنند من خودم از این نسخه استفاده می کنم و خیلی هم خوب کار می کنه

morteza147
یک شنبه 22 آذر 1394, 00:11 صبح
سلام دوستان
فایل های مربوط به نسخه seattle‌ رو آماده کردم که اینجا میذارم.
مشکل ComboBox‌و ListBox‌هم حل شد
مشکل جابجایی کلمات انگلیسی هم حل شد


سلام
اول سپاس از زحمات شما دوست عزیز

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

ابوالفضل عباسی
سه شنبه 24 آذر 1394, 15:38 عصر
دوست عزیز تا وقتی مشکل از پایه (خود شرکت دلفی)حل نشه،ممکنه این یونیت در بعضی از ترد ها درست کارنکند.ولی تا موقعی که این مشکل پابرجاست این یونیت از هیچی بهتره.و میشه کار رو راه انداخت

Valadi
یک شنبه 29 آذر 1394, 21:07 عصر
نسخه مربوط به XE7 و XE8 رو قبلا اینجا گذاشتم از اونها استفاده کنید
بعضی تغییرات هم در فایل PersianTool هست که می تونید فایل جدید که برای S10 گذاشتم رو جایگزین قبلی کنید
برخی موارد هم (مثل ComboBox)مربوط میشه به تغییرات ساختاری که خود Embarcadero در کلاس هاش داده و تغییر دادنشون SideEffect زیادی داره.
پیشنهاد می کنم دوستان از S10 استفاده کنند من خودم از این نسخه استفاده می کنم و خیلی هم خوب کار می کنه

در نمايش ComboBox باز شده كمبو باكس مشكل نداره اما ايندكس پيش فرض مشكل داره
در ListBox هم مشكل پابرجاست و در نمايش مشكل داره

ابوالفضل عباسی
سه شنبه 01 دی 1394, 12:02 عصر
برای من اول نمایش list box درست نشون میده اما وقتی مثلا روی یک button کلیک میکنم و تا یک فرمان دلفی اجرا بشه ،یهو list box میریزه بهم.:گریه:
ما تا اینجاش خوب پیش رفتیم . واقعا کارت عالیه بود niceboy .
بی زحمت روش تغییرات رو بما بگو که خودمون دست بکار بشیم و همه کار ها به دوش شما نباشه و زودتر یه یونیت عالی بدهیم بیرون.

ابوالفضل عباسی
سه شنبه 01 دی 1394, 12:04 عصر
برای من اول نمایش list box درست نشون میده اما وقتی مثلا روی یک button کلیک میکنم و تا یک فرمان دلفی اجرا بشه ،یهو list box میریزه بهم.
ما تا اینجاش خوب پیش رفتیم . واقعا کارت عالیه بود niceboy .
بی زحمت روش تغییرات رو بما بگو که خودمون دست بکار بشیم و همه کار ها به دوش شما نباشه و زودتر یه یونیت عالی بدهیم بیرون.

nice boy
سه شنبه 01 دی 1394, 19:20 عصر
بی زحمت روش تغییرات رو بما بگو که خودمون دست بکار بشیم و همه کار ها به دوش شما نباشه و زودتر یه یونیت عالی بدهیم بیرون.
ؤوش خاصی نداره.
در فایل FMX.TextLayout در متد TTextLayout.EndUpdate; خط زیر رو اضافه کردم
FText := TFarsi.Convert(FText);

ابوالفضل عباسی
چهارشنبه 02 دی 1394, 09:13 صبح
خب اینکه بله میدونم.
میخواستم بدونم چطور باید مشکل ممیز و نقطه و علامت سوال و نوشتن کلمات انگلیسی رو حل کنیم؟
شما دستوراتی برای این نوشتید یا اینکه ننوشتید و باید راه حلش رو پیداکنیم؟

nice boy
پنج شنبه 03 دی 1394, 09:21 صبح
این کارها در یونیت PersianTool انجام میشه. یک متد به نام IsFarsiChar وجود داره که تشخیص میده یک کاراکتر فارسی هست یا نه و بعد اون رو جایگزین می کنه.
پس در نتیجه اگر شما کاراکتری دارید که اشتباه تبدیل میشه مثلا ؟ باید در این متد معرفیش کنید.
در مورد جابجایی کلمات انگلیسی در متد TFarsi.Convert جای کلمات رو باهم عوض می کنه. من یک شرطی گذاشتم که اگر اولین حرف کلمه انگلیسی بود اون رو جابحا نکنه به هر حال خودتون می تونید این شرط رو به هر نحوی تغییر بدید.
امیدوارم توضیحات کامل بوده باشه.
البته این روش که ما استفاده می کنیم یک روش اصولی نیست و فقط برای رفع موقتی مشکل هست. روش بهتر این هست که در لایه های پایین تر حایی که Object ها ترسیم میشن این مشکل برطرف بشه که البته کار زمان بری هست.

drama22
یک شنبه 07 آذر 1395, 19:19 عصر
nice boy this is working very good but there is minor issues . on label it wont work also letters with "-" shows back warded
as example D-rama showing as rama-D in none farsi language

ابوالفضل عباسی
دوشنبه 08 آذر 1395, 13:09 عصر
با سلام حدمت دوستان عزیز
احیرا موقعی که یک فرمان در button اجرا میشود،تمامی فارسی های label به هم میریزد.
برای راه حل این مشکل کافیه از edit استفاده کرده و آن را روی readonly قرار بدهید.
الان فقط memo،edit،button،Grid،Stringgrid درست و بی نقص فارسی میشوند.
راه حلی هم برای bidi وجود ندارد،اما اگر در پروپرتیس edit یا button بخش textsetting بروید.در قسمت horzAlign را به Trailing تغییر دهید.
تقریبا همان کار righttoleft در bidi را انجام میدهد.
از هیچی که بهتره.

molla2005b
چهارشنبه 08 دی 1395, 17:56 عصر
سلام وقت بخیر
تشکر زیاد بابت تلاش های زیادی که دوستان برای حل این مشکل انجام داده اند

این یک Patch برای رفع مشکل زیان های راست به چپ در فایرمانکی از یک برنامه نویس هندی بدست آوردم
ولی متعلق به XE5 میشه
با اعمال پتچ چند تابع در یونیت های زیر را ویرایش می کند و این یونیت ها در دلفی برلین زیاد تغییر پیدا نکردن
پس از پتچ کردن با یونیت های دلفی برلین مقایسه کنید و اون تغییرات را اعمال کنید
FMX.TextLayout.GPU.pas
FMX.FontGlyphs.pas
FMX.FontGlyphs.Android.pas

این سه فایل پتچ شده در فولدر پروژه قرار بدهید و به فایل های پروژه هم اد کنید

لینک دانلود (https://mega.nz/#!IQEkQZwL!VncMqyXfTK9Hy8haBuadR02UjegaeyB74TjXAcC 6nOc)

از دوستانی که از دلفی XE5 استفاده می کنند سه یونیت فوق نیاز داریم تار پتچ کنیم و بعدش یونیت های اصلی با یونیت های پتچ شده مقایسه کنیم(Sourse Compare)
بعد از آن اون تغییرات در توابع یونیت های دلفی برلین بطور دستی انجام بدهیم

parsidev
چهارشنبه 22 دی 1395, 11:49 صبح
سلام دوستان، کسی آخرین نسخه دلفی (xe10.1 berlin) رو برای این موضوع چک کرده ببینه بالاخره مشکل rtl و فارسی از پایه حل شده یا نه؟

saeidd
چهارشنبه 22 دی 1395, 19:38 عصر
سلام دوستان، کسی آخرین نسخه دلفی (xe10.1 berlin) رو برای این موضوع چک کرده ببینه بالاخره مشکل rtl و فارسی از پایه حل شده یا نه؟
سلام. آپدیت 2 رو چک کردم، هنوز حل نشده.

ابوالفضل عباسی
پنج شنبه 07 بهمن 1395, 11:02 صبح
سلام.
نه بابا دلفی این کار رو حالا حالا ها نمی کنه.
من روی یونیت niceboy تغییرات کوچیکی دادم،بهتر شده(البته روی edit و button و grid ) من الان به جای label از یک edit که readonly هست و canfocus غیرفعال هست،استفاده می کنم.

nice boy
پنج شنبه 19 اسفند 1395, 21:17 عصر
سلام.
نه بابا دلفی این کار رو حالا حالا ها نمی کنه.
من روی یونیت niceboy تغییرات کوچیکی دادم،بهتر شده(البته روی edit و button و grid ) من الان به جای label از یک edit که readonly هست و canfocus غیرفعال هست،استفاده می کنم.
من دارم یکسری تغییرات توی یونیت فارسی ساز میدم. میشه لطفا اشکالاتی رو که دیدید بگید تا رفع کنم

ابوالفضل عباسی
چهارشنبه 25 اسفند 1395, 09:09 صبح
سلام دوست عزیز،عیدت مبارک (پیشاپیش)
فکر کنم تنها کسی که با این یونیت خیلی کار کرده من باشم،خودم تغییراتی دادم خواستی بهت یونیت تغییر داده رو میگم.
اشکالات
1- lable در بعضی مواقع بهم میریزد،(تنها کامپوننت هایی که درست کار میکنند: button,edit,stringgrod,grid,checkbox,radiobutton,m emo,combobox)
2- مواقعی که مثلا از خاصیت style book برای تغییر Style برنامه استفاده میکنی،فارسی ساز بهم میریزد.
3-مشکل Bidi .مکان نما موقع تایپ در جای درستی نیست.اصلا نمیشه بافرمان select all کل متن رو select کرد.
4-هنگامی که در یک متن از "."(نقطه) یا ","استفاده کنیم.کل متن جابه جا میشود (مثلا می نویسیم "Ver 2.1" در اندروید می شود "2.1Ver")

ازت خیلی متشکرم.

sajiCG
دوشنبه 30 اسفند 1395, 00:42 صبح
سلام
من نمی دونم راجع به چی صحبت می کنید. مشکل به هم ریختگی فارسی در دلفی مدتیِ حل شده، و من ازش استفاده کردم. با وجودی که مبتدی هستم، کار کردن باهاش خیلی راحت بود. فقط ی component هست که می ذاری رو فرمت.
به طور اتفاقی تو ی سایت پیداش کردم. آدرس سایت رو براتون می ذارم.
www.fmxrtl.ir
فقط ی نکته هست، اونم این که ویدیوی آموزشی سایت وقتی من رفتم سراغش قابل دانلود نبود.

nice boy
سه شنبه 01 فروردین 1396, 08:59 صبح
سلام
من نمی دونم راجع به چی صحبت می کنید. مشکل به هم ریختگی فارسی در دلفی مدتیِ حل شده، و من ازش استفاده کردم. با وجودی که مبتدی هستم، کار کردن باهاش خیلی راحت بود. فقط ی component هست که می ذاری رو فرمت.
به طور اتفاقی تو ی سایت پیداش کردم. آدرس سایت رو براتون می ذارم.
www.fmxrtl.ir (http://www.fmxrtl.ir)
فقط ی نکته هست، اونم این که ویدیوی آموزشی سایت وقتی من رفتم سراغش قابل دانلود نبود.
ما داریم راجع به حل مشکل زبان فارسی در آندروید صحبت می کنیم
و تجربیاتمون رو به رایگان در اختیار یکدیگر قرار میدیم
سایتی که شما معرفی کردید اولا پولیه.
دوم اینکه هیچ امکانی برای تست نداره که ببینیم درست کار میکنه یا نه؟
سوم اینکه نوشته روی XE7 کار می کنه. در حالیکه الان نسخه های جدیدتر با قابلیتهای جدید اومده و توجیهی نداره از اون نسخه قدیمی استفاده کنیم.
چهارم اینکه سورس ارائه نمی کنه یعنی اگه یه جایی گیر کنی و کامپوننت مشکل داشته باشه هیچ کاری نمی تونی بکنی
به هر حال از راهنماییتون ممنونم

ابوالفضل عباسی
سه شنبه 01 فروردین 1396, 17:56 عصر
در پی صحبت های دوستمون.ما میخواهیم همگی از این امکان استفاده کنند.
درضمن حتی فیلم آموزشی درست کار نمی کنه که ادم اطمینان پیدا کنه.درضمن احتمال اینکه خطا از این کامپوننت بدهد زیاد است.
همین یونیت دوستمون nice boy عزیز در بعضی مواقع،جلوی کامپایل رو میگیرد که باید 5 دقیقه صبر کرد تا بتوان دوباره کامپایل کرد(مشکل مهمی نیست)

sajiCG
پنج شنبه 03 فروردین 1396, 01:31 صبح
اول اینکه مشکلی که حل شده، حل شده. مشکل فارسی در اندروید حل شده. حالا شما برای مشکل حل شده، دنبال راه حل می گردید؟!
دوم اینکه آیا شما وقتی از delphi, windows, SQL server و خیلی برنامه های دیگه استفاده میکنید، سورس آن ها را دارید؟ یا اینکه همین که بدونید این برنامه ها پشتیبانی میشن براتون کافیه؟
معمولا برنامه ای که پولیه و درآمد زاست بسیار بهتر پشتیبانی میشن. به هر حال من مشکلم با این کامپوننت حل شد، حالا شما می تونید همینطور به گفتگو درباره چگونگیه حل این مشکل ادامه بدید.
سوم اینکه می تونستید به جای ایراد گرفتن به من، با مسئول سایت تماس بگیرید و ازش در مورد برنامه اش توضیح بخواین.
چهارم اینکه من انقدر ظرفیت داشتم که این ریسک رو بکنم و این مبلغ ناچیز رو برای حل مشکلم بپردازم و حتی نتیجه ی آن را برای بقیه هم بازگو کنم.
پنجم اینکه داشتن کمی انسانیت و انصاف باعث میشه، حق بدیم به کسی که وقت گذاشته و این مشکل رو حل کرده، اونم مشکلی که ظاهرا خیلی ها درگیرشن و حتی بخشی ازین سایت رو به صحبت دراین باره اختصاص دادن، که مبلغی رو به عنوان هزینه ی کارش دریافت کنه.
ششم اینکه من رو کامپیوترم دلفی برلین دارم، که این کامپوننتو رو این اجرا کردم.
و دست آخر اینکه من برعکس شما با مسئول سایت تماس گرفتم و این کامنت شما رو بهش اطلاع دادم و متوجه شدم که قبل از من هم کس دیگری تماس مشابهی داشته و به همین دلیل مسئول سایت این برنامه رو رایگان گذاشته و قول داده تا 4،5 روز آینده ویدیو آموزشی رو هم قرار بده.
و من از مسئول سایت به خاطر این بزرگواریش ممنونم. و کمتر آدمی پیدا میشه که حتی به اندازه ی زمان یک روز کاریشون رو به رایگان در اختیار دیگران قرار بده چه برسه به این که مشکل قابل توجهی رو حل کنه. و خدا این انسانها رو سالم نگه داره.

افشين لي
پنج شنبه 03 فروردین 1396, 18:19 عصر
سلام به همگي دوستان
من طبق فرمايش دوستمون و راهنمايي سايت fmxrtl.ir كامپوننت tmercifarsi راروي فرم گذاشتم ولي هنگام اجرا روي اندرويد آرم پروژه هم بالا ميايد
ولي اين اشكال در محيط دلفي ظاهر ميشه و اجرا روي اندرويد متوقف ميشه
First chance exception at $A425300B. Exception class EAssertionFailed with message 'Assertion failure (F:\Projects\Rad Studio\RTL-Packages\Source\VirtualClass.pas, line 353)'. Process Project1.apk (20312)
لطفا از دوستان اگه كسي ميتونه راهنمايي كنه

nice boy
پنج شنبه 03 فروردین 1396, 21:06 عصر
ینکه داشتن کمی انسانیت و انصاف
من فقط نظرم رو گفتم ولی نمی دونم چرا شما توهین می کنی؟!! اینکه من گفتم این کامپوننت پولیه یعنی من انسانیت ندارم!!!


وقتی از delphi, windows, SQL server و خیلی برنامه های دیگه استفاده میکنید، سورس آن ها را دارید؟
قیاس خیلی جالبیه یعنی شما مایکروسافت رو با این سایت مقایسه می کنید!!!


کمتر آدمی پیدا میشه که حتی به اندازه ی زمان یک روز کاریشون رو به رایگان در اختیار دیگران قرار بده
فکر کنم شما اصلا این تاپیک رو نخوندی. تمام دوستانی که اینجا کمک کردن تا مشکل فارسی حل بشه همین کارو کردن و دستاوردهاشون رو به رایگان برای دیگران گذاشتن.


یا اینکه همین که بدونید این برنامه ها پشتیبانی میشن براتون کافیه؟
فکر کنم شما مطالب اون سایت رو هم نخوندین! تویه همون سایت صاحبش نوشته سورس کامپوننت رو نداره و از روی سیستمش پاک شده، حالا چطور می خواد برای نسخه های جدید دلفی ورژن بده و یا اشکالات پیش اومده رو تصحیح کنه و به قول شما پشتیبانی کامل انجام بده؟؟؟!!!


مشکلی که حل شده، حل شده. مشکل فارسی در اندروید حل شده. حالا شما برای مشکل حل شده، دنبال راه حل می گردید؟!
به هر حال من دنبال حاشیه نیستم و می خوام مشکل حل بشه، من این کامپوننت رو تست کردم در کل خوب بود ولی شما یک Label روی فرم بزار بعد متن داخلش بنویس (سامانه نمایشگر اطلاعات) یا 'سامانه نمایشگر اطلاعات' منظورم کاراکترهای ( و ' هست بعد برنامه رو اجرا کن برنامه موقع اجرا خطا میده و اصلا اجرا نمیشه حالا فرض کن من یه پروژه نوشتم و به این مشکل می خورم باید چیکار کنم؟ برای همینه که میگم سورس مهمه

ابوالفضل عباسی
شنبه 05 فروردین 1396, 08:44 صبح
دوست عزیز nice boy کاملا حق باشماست.
1- کاربر افشین لی از این سایت این کامپوننت رو دریافت کرد،الان کی جواب گو هست؟
2- من با امسال می شود 4 سال است که با این مشکل دست و پنجه نرم می کنم،اما تاحالا با خطایی درمورد یونیت فارسی دوست عزیزم برام پیش نیومده.
3-الان با این یونیت برنامه نوشته ام و فروخته ام،مشتریانم کمی با Select کردن و RTL مشکل دارند،اما ابراز نمی کنند.(الان قلقش دستشون اومده):چشمک:
4-چندتا مشکل بعضی از کامپوننت ها داره که فارسی نمیشه.اما من به دلفی رکب زده ام و مشکل تا حد زیادی برطرف شده.
5-این مهم تره.
من متن دوست sajiCG رو خوندم و این کامپوننت رو خریدم،مشکلاتم تقریبا 2 برابر شد.یه پروژه سالم هم (حتی یک lable داره) هم کامپایل نشد.(با دلفی 10 seattle من Xe7 نداشتم با توجه به صحبت sajiCG )


ما در این تاپیک قصد داریم یک مشکل رو خودمون برطرف کنیم،آموزش های لازم رو درموردش بدیم تا تمامی کاربران سایت ازش استفاده کنند.
شاید(میگم شاید) شخصی که این کامپوننت رو ساخته از یونیت niceboy هم استفاده کرده باشه!


اگر موافق هستید،این تاپیک 5 صفحه شده،یک تاپیک جدید بزنیم تا دسترسی و دیدن آن راحت تر باشد.اگرنه که همین تاپیک رو ادامه میدهیم.

sajiCG
یک شنبه 06 فروردین 1396, 12:19 عصر
دوستان عزیز من یک پیشنهاد دادم، اونم اینکه با مسئول سایت در ارتباط باشید. شاید برای بعضی مشکلات راه حل داشته باشه، شاید راهنمایی خوبی داشته باشه که مشکل رفع شه. و اگر خطایی هم هست متوجه بشه و رفعش کنه. فکر کنم اینطوری هم به خودمون کمک میشه هم به پیشرفت کسی که کار رو انجام داده.
بگذریم. به هر حال من این کارو بازم انجام دادم و خطا رو گفتم. طبق صحبتی که شد تا الان باید آپدیت برنامه رو گذاشته باشن. من سر نزدم.
و در ضمن این قضیه ی کم با چیزی که بعضی از دوستان در رابطه با سورس برنامه مطرح میکنن منافات داره فکر کنم.:متفکر:
من دلفی برلین دارم و ازین برنامه جواب گرفتم. شاید شما دوست عزیزی که سیاتل دارید هم مشکلتون با برلین حل شه.

ابوالفضل عباسی
یک شنبه 06 فروردین 1396, 13:36 عصر
حرف شما درست و منطقی هست.
ولی من تفاوتی بین دلفی برلین و سیاتل نمی بینم که بخوام 7 گیگ دانلود کنم و دوباره نصب کنم.
درضمن وقتی برای xe7 طراحی شده و برلین داره درست کار میکنه،باید هم روی سیاتل کار بکنه.

گفتم بنده خریدم،اما انقدر سرشون شلوغه که جواب بنده رو نمی دهند.من بی خیال شدم.تصمیم گرفتم که با دوست عزیزم nice boy به همین روش خودمون ادامه بدهیم.
بعد تبدیل به کامپوننت کنیم.

hp1361
سه شنبه 08 فروردین 1396, 08:32 صبح
احتمالا باز بهار شده و حساسیت من عود کرده! نمیدونم چرا همش فکر میکنم بوی تبلیغات و بازاریابی به مشامم میاد!

nice boy
سه شنبه 08 فروردین 1396, 09:22 صبح
من نسخه توکیو رو نصب کردم ولی فایلهای FMX.Objects.pas و FMX.TextLayout.pas رو نداره. اگر کسی از دوستان نسخه رو نصب کرده که این دو فایل توش هست لطفا برای من بفرسته که تغییرات رو انجام بدم
ممنون

ابوالفضل عباسی
سه شنبه 08 فروردین 1396, 18:55 عصر
بوی زیادی توی این تاپیک پیچیده.
راستی نسخه توکیو اومد و فارسی درست نشد!!!؟؟؟:گریه::کف:

nice boy عزیز اگر تغییرات رو انجام دادید، حتما در تاپیک "فارسی در دلفی فایرمانکی (http://barnamenevis.org/showthread.php?536396-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%AF%D8%B1-%D8%AF%D9%84%D9%81%DB%8C-%D9%81%D8%A7%DB%8C%D8%B1%D9%85%D8%A7%D9%86%DA%A9%D B%8C&p=2361647&posted=1)"لینک هارو قرار دهید.

باتشکر

nice boy
پنج شنبه 07 اردیبهشت 1396, 07:24 صبح
آخرین تغییرات برای نسخه توکیو در لینک زیر هست
http://barnamenevis.org/showthread.php?536396-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%AF%D8%B1-%D8%AF%D9%84%D9%81%DB%8C-%D9%81%D8%A7%DB%8C%D8%B1%D9%85%D8%A7%D9%86%DA%A9%D B%8C&p=2364402&viewfull=1#post2364402

nice boy
جمعه 15 اردیبهشت 1396, 10:04 صبح
من فایلهایی که آمده کردم رو توی github گذاشتم که دسترسی بهش آسون تر باشه.
https://github.com/DelphiBoy2010/FMXPersianPatch

gbg
جمعه 06 مرداد 1396, 17:07 عصر
امروز داشتم اینجا رو نگاه میکردم
یا یونیتی که برای اولین نسخه فایر مانکی نوشتم افتادم
میگردم پیداش کنم تبدیلش کنم برا توکیو
مشکل راست چین و سلکت و ... هم نداشت

holythirteen
شنبه 14 مرداد 1396, 15:14 عصر
من فایلهایی که آمده کردم رو توی github گذاشتم که دسترسی بهش آسون تر باشه.
https://github.com/DelphiBoy2010/FMXPersianPatch

با سلام خدمت همه دوستان بزرگوار

Nice boy عزیز از شما و سایر دوستان که این بحث رو تا اینجا پیش بردید، سپاسگزارم. حدود یک ساعتی زمان گذاشتم و این پنج صفحه این تاپیک رو خوندم. نکته ای که خیلی ازش لذت بردم تعامل سازنده برادران عزیزم بود که واقعا بین ما ایرانی ها کمه. احترام گذاشتن به همدیگه رو خیلی کم رعایت می کنیم اما خوشحال و مفتخرم که برادران عزیزم در اینجا این مسئله رو به بهترین شکل ممکن پیش بردن. از همتون سپاسگزارم.

holythirteen
شنبه 14 مرداد 1396, 15:19 عصر
من فایلهایی که آمده کردم رو توی github گذاشتم که دسترسی بهش آسون تر باشه.
https://github.com/DelphiBoy2010/FMXPersianPatch

من هم تو نسخه Tokyo 10.2 استفاده کردم و بدون مشکل با لیست باکس کار می کنه. Nice boy عزیز واقعا دمت گرم که این کمک بزرگ رو به ما اون هم به صورت رایگان انجام دادی. خدا خیرت بده

reza1944
شنبه 10 آذر 1397, 13:54 عصر
دوستان این الگوریتم و سورس کد اصلا word wrap رو درست نمایش نمیده