# Native Code > برنامه نویسی در Delphi > برنامه نویسی موبایل در Delphi >  تلاش برای حل مشکل به هم ریختن فارسی نویسی در اندروید

## ابوالفضل عباسی

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

----------


## hp1361

سلام

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

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

موفق باشیم

----------


## ابوالفضل عباسی

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* هارو فارسی کرد که من در تلاش هستم که فارسی سازی ان ها رو هم کامل کنم.

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

----------


## یوسف زالی

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

----------


## nice boy

:متعجب: 

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

----------


## gbg

آقا منم مشکل showmessage رو برات حل کردم!!!!
چون این یکی رو درست نشون میده

----------


## یوسف زالی

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

----------


## ابوالفضل عباسی

gbg عزیز حل مشکل showmessage رو می تونی برای ما بازگوکنی؟

----------


## ابوالفضل عباسی

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

----------


## BORHAN TEC

> دوستان یک تصویر بگذارید ببینم منظورتون از به هم ریختن دقیقا چیه، شاید برنامه ای که داشتم کمک کنه.
> آیا نوشته ای مثل سلام می شه م ل ا س ؟؟


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

----------


## یوسف زالی

با این برنامه کانورت کنید ببینید اوکی می شه؟
اگر بشه برات کانورتور می نویسم

----------


## BORHAN TEC

> با این برنامه کانورت کنید ببینید اوکی می شه؟
> اگر بشه برات کانورتور می نویسم


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

----------


## یوسف زالی

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

----------


## BORHAN TEC

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

----------


## یوسف زالی

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

----------


## BORHAN TEC

> قربانت


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

----------


## یوسف زالی

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

----------


## Delphi 2010

دوستان کسی Delphi XE7 رو دانلود کرده ببینه مشکل فارسی حل شده یا نه
از آقا یوسف ممنون بابت زحمت هایی که می کشن

----------


## a.r.khoshghalb

مگه XE7 اومد؟! 
چه خوب! توش امکان نوشتن برنامه برای AndroidWear هم اضافه شده؟

----------


## firststep

سلام عزیز منتظریما برای حالا تابع یا کمپوننت......

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

----------


## firststep

ایا برای استفاده از این تابع بهتر نیست برای همه گیر شدنش توی کامپوننت های دیگه به دون ویرایش اونها از CLASS HELPER استفاده کنیم

----------


## ابوالفضل عباسی

> دوستان کسی Delphi XE7 رو دانلود کرده ببینه مشکل فارسی حل شده یا نه
> از آقا یوسف ممنون بابت زحمت هایی که می کشن


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

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

----------


## gbg

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

----------


## یوسف زالی

> مشکل عدم نمایش رو قبلا اصلاح کردن


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

----------


## gbg

خود embarcadero چند تا یونیت داره که میزاری تو مسیر پروژه بعدش اون مشکل حل میشه

----------


## hp1361

> خود embarcadero چند تا یونیت داره که میزاری تو مسیر پروژه بعدش اون مشکل حل میشه


سلام

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

ممنون

----------


## nice boy

> خود embarcadero چند تا یونیت داره که میزاری تو مسیر پروژه بعدش اون مشکل حل میشه


جالبه من خیلی سرچ  کردم ولی این یونیتها روپیدا نکردم میشه لطفا لینک بدبد

----------


## zoghal

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


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

----------


## دلفی بلد

تا همین جا هم که راهی پیدا شده که فارسی در دلفی اندروید داشته باشی خیلیه.
ممنون delphi-xe7

----------


## ali_barani

جناب You-See  ممنون اگر خودتون وقتشو ندارید لطفا سورس برنامه تون را بگذارید تا سایرین تابعش کنند

----------


## ابوالفضل عباسی

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

----------


## یوسف زالی

نه عزیزم برای سورس داستانی پیش اومده فعلا معذورم. اگر مشکل رفع بشه ایشالا می گذارم. بخیل که نیستم  :لبخند گشاده!:

----------


## ابوالفضل عباسی

اختیار داری من که منظورم این نبود

----------


## mkarimpour

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

Screenshot_2014-10-07-11-26-05.png

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

----------


## zoghal

این مشکل در وب هم وجود داشت و سالار کابلی پروژه ای رو با اسم persianParser در گیت هاب دارد که همین کار رو انجام می دهد.
https://github.com/sallar/persianParser

----------


## hp1361

سلام

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

----------


## mkarimpour

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





 
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/S...withArabic.htm
- بهترین مورد پیاده شده تا کنون FriBiDi است. friBiDi.org

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

----------


## Delphi 2010

حالا چطوری باید استفاده کنیم عزیزان

----------


## mxmaa64

سلام با تشکر از دوست خیلی خوبم 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.*

----------


## یوسف زالی

سلام.
هیچ کدام از این کدها رو نتونستم به درستی تست کنم.
البته روی XE6 که جواب نمی ده، باید اصلاحاتی انجام می دادم، اما باز هم نشد.
اگر نمونه پروژه ای دارید اتچ کنید بررسی می کنم.

----------


## mxmaa64

اینم از کامپوننت : یه گزینه داره به نام PersianSupport تیک بزنید حال کنید  :لبخند گشاده!:

----------


## mxmaa64

دارم یه پک کامل ازGrid, Label, Edit, Button, DataSet ها می سازم که به محض اتمام Upload می کنم

----------


## یوسف زالی

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

----------


## mxmaa64

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

----------


## یوسف زالی

باید دنبال راه بهتری باشیم. مثلا OverRide کردن متد GetText شاید خوب باشه.
وقت کنم روش باز کار می کنم

----------


## mxmaa64

> یک عکس از ادیت در حال تایپ فارسی بگیرید بگذارید ببینم چطور کار می کنه، من نتونستم کار کنم.


این هم نمونه از برنامه و عکس هاش

----------


## mxmaa64

واسه اونایی که میشه override کردم اما مثلا Tedit همه تایع هاش بسته هستن. بقیه رو همه رو override دارم می نویسم اما کامپوننت می کنم که واسه همه قابل استفاده باشه

----------


## gbg

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

----------


## zoghal

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

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

----------


## gbg

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

----------


## mkarimpour

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

----------


## gbg

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

----------


## gbg

من تو گیت هاب چیزی ندیدم
میشه دقیقا بگی کجا دیدی

----------


## developing

با سلام

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

1- از شرکت داده پردازان فراگیر یک سری کامپوننت بازمتن منتشر شده که مشکل رو رفع کردن و از اینجا می تونید به اون دسترسی داشته باشید.(البته با لطف جدید دوستان سورس فورج هم چیلتر شده پس باید با چیز پی ان یا چیلترشکن وارد بشوید.)

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

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

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

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

با تشکر

----------


## gbg

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

----------


## a.r.khoshghalb

> بله دستشون درد نکنه اما نظر شخصی من اینکه از این مزخرف تر چیز دیگه ای نمی تونستن بنویسن
> یعنی حالم از این کامپوننت DPF بهم می خوره ، الکی هم اینترنت رو پر کردن ، همه هم همش دایورت می کنن روش ، به نظر من فقط یک کلام به درد نمی خورههههههههههههههههههه


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

----------


## gbg

من که نتونستم باهاش کار کنم
اگه کسی کار کرده و مشکل نداشته بیاد بگه

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

----------


## nice boy

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


البته کسی که این کامپوننت رو نوشته خیلی زحمت کشیده و ادم با سوادی هم بوده، ولی در کل اشکالاتی داره که استفاده ازش رو سخت می کنه
1-اولین و بزرگترین عیبش اینکه وقتی ازش استفاده می کنی دیگه نمی تونی همزمان از بقیه کامپوننت های دلفی استفاده کنی!! که اصلا خوب نیست.
2-بعضی وقتها هنگ می کنه
3-کامپوننتهاش خیلی محدوده
مثلا شما گرید دلفی رو اینجا ندارید چون این کامپوننت ها از کامپوننت ها استاندارد دلفی مشتق نشدن
دو تا از شعارهای اصلی FMX اینه که از همون کامپوننت های موجود در ویندوز در آندروید هم استفاده کنید و دوم اینکه یک کد بنویسید و روی پلتفرمهای مختلف کامپایل کنید ولی وقتی شما از این کامپوننت استفاده می کنی فقط برای آندروید کامپایل میشه
من خودم یه پروژه رو با این کامپوننتها پیاده کردم ولی وسط کار به مشکل خوردم و بیخیال شدم
در کل برای یه پروژه کوچیک خوبه

----------


## jst

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

----------


## jst

اگر ممکنه کمی راجع به توابع موجود در farsireshaper و روش کارتون توضیح بدید تا کمکتون کنیم و زودتر بتونیم مشکل رو حل کنیم .

----------


## zoghal

> ممنون
> ولی توی کانورتورها فکر میکنم رشته رو اول برعکس میکنن بعدش حروف رو به اول وسط آخر تبدیل می کنن
> من نمی خوام کلمه رو برعکس کنم
> بعدش هم یه کانورتور که دیدم خیلی حجم کدش زیاد بود ، یه همچین الگروتمی نباید اونقدر زولانی باشه


نه نه نیاز به 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 را ندارد یا به درستی تعریف نشده است. مثل این تصویر
new.jpg
۲- text shaping engine از جداول اوپن تایپ پشتیبانی کامل نمی کند.

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





> من تو گیت هاب چیزی ندیدم
> میشه دقیقا بگی کجا دیدی


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



```
https://github.com/zoghal/persianParser
```

----------


## gbg

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

----------


## zoghal

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

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

----------


## gbg

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

----------


## nice boy

> من با اصلاح یونیت TControl مربوط به اندروید، و خوراندن اون به دلفی همه کنترل ها رو با هم یکجا اصلاح کردم، به این روش فکر کنید.


اگه میشه بفرمایید کدوم متد رو تغییر دادید تا ما هم همون کار رو بکنیم. 
آیا با این کار تایپ فارسی درست میشه؟

----------


## یوسف زالی

> اگه میشه بفرمایید کدوم متد رو تغییر دادید تا ما هم همون کار رو بکنیم. 
> آیا با این کار تایپ فارسی درست میشه؟


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

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

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

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

----------


## nice boy

> نه تایپ فارسی رو متد دیگه ای کنترل می کنه.


مرسی از راهنماییتون.
ولی من با تغییر متد TTextLayout.EndUpdate و استفاده از Converter مشکل تایپ فارسی رو حل کردم. حتی تایپ ترکیبی فارسی و انگلیسی هم مشکل نداره.
برای نمایش هم متد TText.SetText رو تغییر دادم که درست شد. 
البته هنوز دارم تست می کنم.
البته Converter هم که دوستان قرار داده بودند یه اشکالاتی داره مثلا حروف فارسی رو برعکس می کنه یا موقع نوشتن کلمات انگلیسی و فارسی مشکل پیش میاد که دارم اون رو هم تغییر می دم.

----------


## jst

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

----------


## adel_javad

> حالا چطوری باید استفاده کنیم عزیزان


سلام دوستان
خیلی ممنون
کل اینترنت رو گشتم و جوابمو اینجا پیدا کردم
ممنون
یه تابع ساده نوشتم که امیدوارم به درد همه بخوره
این تابع تمام کامپوننت هایی رو که متن 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

ضمن تشکر میشه بفرمایید برای listview , grid چکار باید کرد ؟

----------


## nice boy

> ضمن تشکر میشه بفرمایید برای listview , grid چکار باید کرد ؟


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

----------


## jst

من تو oncreate  فرم از کد بالا استفاده کردم . ولی گرید درست نشد.

----------


## jst

به لطف راهنمایی های دوستان و استفاده از کلاس tfarsi قدمهای خوبی برداشتم , اما هنگام استفاده از convert متون فارسی - لاتین و یا لاتین نوشته شده در edit کلا حذف می شوند . دوستان راهنمایی بفرمایید

----------


## hojat_y

> سلام دوستان
> خیلی ممنون
> کل اینترنت رو گشتم و جوابمو اینجا پیدا کردم
> ممنون
> یه تابع ساده نوشتم که امیدوارم به درد همه بخوره
> این تابع تمام کامپوننت هایی رو که متن text  داره رو راست چین میکنه
> این تابع از کلاس بالا استفاده میکنه
> اونو توی پروژتون اد کنید و از این تابع استفاده کنید
>    Farsi:=TFarsi.Create;
> ...


کدوم کلاس؟

----------


## sasaee04

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

----------


## adel_javad

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

----------


## adel_javad

> با عرض سلام و تشكر به همه دوستاني كه در زمينه فارسي سازي دلفي براي برنامه نويسي موبايل تلاش ميكنند.
> من همه كامنتها رو خوندم ولي بلاخره متوجه نشدم كه بايد از كدوم كلاس و به چه نحوي استفاده بكنم تا بشه قارسي نوشت.اگر امكانش هست يه توضيح كاملتر بفرماييد يا يك *نمونه كد برنامه و مثال* بگداريد تا مشكل برايم حل بشه.
> البته من با كامپوننت 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

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


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

FARSI.jpg

----------


## jst

دوستان نسخه xe8 دلفی امروز منتشر شد. کسی نصب کرده ؟ آیا مشکل فارسی حل شده ؟

----------


## gbg

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

----------


## Sir.V65j

> دوستان نسخه xe8 دلفی امروز منتشر شد. کسی نصب کرده ؟ آیا مشکل فارسی حل شده ؟


سلام بنده نصب کردم هنوز مشکل پابرجاس

----------


## a.r.khoshghalb

> سلام بنده نصب کردم هنوز مشکل پابرجاس


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

----------


## sasaee04

*نقل قول: تلاش برای حل مشکل به هم ریختن فارسی نویسی در آندروید* 				   						 						 				 					 						 							 	 		 			 			 				سلام
 برای نمایش فارسی متنهای پروژه در اندروید مراحل زیر را انجام دهید

 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  بنويسه " سلام"...ممنون ميشم راهنمايي كنيد

----------


## hadisalahi2

> اینم از کامپوننت : یه گزینه داره به نام PersianSupport تیک بزنید حال کنید


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

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

----------


## Sir.V65j

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

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

سلام*  Sir.V65j* و ممنون از جوابتون
من اون كاري كه شما فرموديد انجام دادم ولي باز هم خطا از همون كلاسي ميده كه به برنامه اضفه كردم تصويرش رو ميذارم بي زحمت بفرماييد مشكل كجاست... مننون ميشم


Untitled.jpg

----------


## Sir.V65j

سلام من رو xe7 و XE8 استفاده کردم کامل جواب داده و ایرادی نداشت
شمام اینا رو پشت سر هم بکن ببین درست میشه یا نه یعنی همه رو یه خط بکن

----------


## nice boy

> سلام
> من اون كاري كه شما فرموديد انجام دادم ولي باز هم خطا از همون كلاسي ميده كه به برنامه اضفه كردم تصويرش رو ميذارم بي زحمت بفرماييد مشكل كجاست... مننون ميشم


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

----------


## sasaee04

سلام
ممنون از همگي مخصوصا از nice-boy  و *Sir.V65j* ..مشكلم حل شد با XE8 كامپايل كردم درست شد.
فقط يه راهنمايي ديگه مي خواستم  .
ميخواستم ازتون بپرسم چطوري ميتونم اين كار رو روي list view انجام بدم.ممنون ميشم راهنمايي بكنيد.

----------


## jst

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

----------


## meysam_212

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

----------


## meysam_212

> واسه اونایی که میشه 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

> 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
> 
> ...



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

----------


## jst

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


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

----------


## gbg

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


بازنویسی فایر مانکی

----------


## nice boy

سلام به دوستان
من تغییراتی در سورس فایرمانکی دادم و مشکل فارسی نویسی رو تا حد زیادی حل کردم
کد نمونه رو اینجا می زارم تا بقیه هم استفاده کنن.
فقط باید فایل ها رو در کنار پروژه تون اضافه کنید.
یکی از فایلها یونیتی هست که قبلا آقای کریم پور نوشته بودند و من برخی تغییرات روی اون دادم.
روی ذلفی XE6 و XE7 تست کردم درست کار می کنه
هنوز روی آندروید 5 تست نکردم
امیدوارم به دردتون بخوره.
اگر کسی اشکالی دید بگه تا اصلاح کنم
Screenshot_2015-08-09-21-53-05.png

----------


## Mask

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

----------


## jst

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

----------


## jst

text کمبو باکس و LISTBOX هنوز مشکل دارد. ضمنا من در محیط اندروید 5 تست کردم

----------


## Mask

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

----------


## Mary_nikjo

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

----------


## Mask

تو xe8 مشکل داره. میشه برای xe8 هم تغییرات بدید؟

----------


## nice boy

> فقط نمی دونم چرا گاهی از برنامه می پرید بیرون ؟ مشکل از گوشی منه یا از کد ؟ هنوزنفهمیدم!


این مشکل ارتباطی به این پکیج نداره چون من از این فایلها در یک پروژه استفاده کردم و ساعت ها بدرستی کار کرده

----------


## nice boy

> text کمبو باکس و LISTBOX هنوز مشکل دارد. ضمنا من در محیط اندروید 5 تست کردم


در مورد ComboBox و ListBox هم روش کار می کنم تا درست بشه اگر مورد دیگری هم دیدید بگید تا اصلاح کنم

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

----------


## nice boy

> تو xe8 مشکل داره. میشه برای xe8 هم تغییرات بدید؟


من XE8 رو هنوز نصب نکردم در نتیجه قایلهای اون رو ندارم.
لطفا فایل های زیر رو از مسیر نصب XE8 برای من بفرستید تا براتون اصلاح کنم
FMX.TextLayout.pas
FMX.Objects.pas

----------


## jst

بعضی وقتها موقع تایپ بدون هیچ خطایی از برنامه خارج میشه ! 
ظاهرا روی اندروید 5 مشکل داره چون با اندروید پایین تر تست کردم درست بود . احتمالا اگه با xe8 کامپایل بشه مشکل حل بشه

----------


## Mary_nikjo

رو xe7 آندروید 5 و پایینتر برای من جواب داد فقط xe8 رو اگر لطف کنید. اینم یونیت های xe8 که خواستید.

----------


## nice boy

> رو xe7 آندروید 5 و پایینتر برای من جواب داد فقط xe8 رو اگر لطف کنید. اینم یونیت های xe8 که خواستید.


تصحیح کردم فقط چون من XE8 ندارم زحمت تست کردنش با خودتون

----------


## Mary_nikjo

سلام،
ممنون از زحماتتون. جواب داد رو xe8 مشکلی نداره.
خیلی ممنون.

----------


## jst

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

----------


## jst

شما که تو این مورد زحمت کشیدید برای مساله BiDi هم میشه کاری کرد؟

----------


## nice boy

> شما که تو این مورد زحمت کشیدید برای مساله BiDi هم میشه کاری کرد؟


توی پروژه هایی که من نوشتم درست نمایش دادن فارسی اهمیت داشت و راست چین بودن خیلی مهم نبود در نتیجه دنبالش نرفتم. 
ضمن اینکه این مشکل فقط به آندروید مربوط نمیشه و توی ویندوز هم مشکل داره.
مطمئن نیستم ولی فکر می کنم اگر مثلا TEdit مربوط به FMX رو با TEdit درون VCL مقایسه کنیم شاید مشکل راست به چپ رو بشه حل کرد

----------


## Mask

ممنون از زحمتتون. من در xe8 تست کردم. انگلیسی ها به هم میریزه. اما فیلدهایی که فارسی هست صحیحه.
ایندفعه بر عکس شد. انگلیسی به هم میریزه.

----------


## jst

> ممنون از زحمتتون. من در xe8 تست کردم. انگلیسی ها به هم میریزه. اما فیلدهایی که فارسی هست صحیحه.
> ایندفعه بر عکس شد. انگلیسی به هم میریزه.


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

----------


## nice boy

> ممنون از زحمتتون. من در xe8 تست کردم. انگلیسی ها به هم میریزه. اما فیلدهایی که فارسی هست صحیحه.
> ایندفعه بر عکس شد. انگلیسی به هم میریزه.


باید روی XE8 برنامه رو Trace کنم تا مشکل رو پیدا کنم.
هفته آینده می خوام XE8 رو دانلود کنم . به امید خدا اونوقت تست می کنم.

----------


## Valadi

> در مورد ComboBox و ListBox هم روش کار می کنم تا درست بشه


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

----------


## jst

سلام ممکنه فایل مربوط به نسخه seattle  رو هم تصحیح بفرمایید !

----------


## a.r.khoshghalb

> سلام به دوستان
> من تغییراتی در سورس فایرمانکی دادم و مشکل فارسی نویسی رو تا حد زیادی حل کردم
> کد نمونه رو اینجا می زارم تا بقیه هم استفاده کنن.
> فقط باید فایل ها رو در کنار پروژه تون اضافه کنید.
> یکی از فایلها یونیتی هست که قبلا آقای کریم پور نوشته بودند و من برخی تغییرات روی اون دادم.
> روی ذلفی XE6 و XE7 تست کردم درست کار می کنه
> هنوز روی آندروید 5 تست نکردم
> امیدوارم به دردتون بخوره.
> اگر کسی اشکالی دید بگه تا اصلاح کنم
> Screenshot_2015-08-09-21-53-05.png


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

----------


## jst

فرمایشتون درسته . ولی محیط دلفی خیلی خوش کارتره ! قبول دارید ؟

----------


## nice boy

> سلام ممکنه فایل مربوط به نسخه seattle رو هم تصحیح بفرمایید !


اجازه بدید دانلود کنم چشم.
البته نمی دونم نسخه ای که الان برای دانلود گذاشتن شامل فایل های سورس هم میشه یا خیر. چون اگه سورس فایل های FMX.TextLayout.pas و FMX.Objects.pas نباشه نمیشه درستش کرد.




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



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

----------


## ابوالفضل عباسی

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

----------


## J870813986

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

----------


## ابوالفضل عباسی

به احتمال زیاد شرکت embarcadero مشکلش رو حل میکنه چون فقط ایران از دلفی استفاده نمیکنه عرب ها هم استفاده میکنن.
به زودی این مشکل رو شرکت دلفی حل میکنه .
اما ماهم نباید بیکار بنشینیم و ماهم باید تلاش کنیم.

----------


## raa126

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

----------


## ابوالفضل عباسی

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

----------


## saba_mehdi

سلام عزیز
من روی xe8 امتحان کردم listview رو مشکل داره میشه راهنمایی کنید؟

----------


## ابوالفضل عباسی

بله مشکل داره من و دوستان داریم تلاش میکنیم که این مشکلاتش که مثلا:
در listview و نوشتن انگلیسی و فارسی باهم و گذاشتن علامت های(. و / و \)
حل کنیم اگر درست شد یونیت درست شده رو اینجا قرار میدیم

----------


## saba_mehdi

> بله مشکل داره من و دوستان داریم تلاش میکنیم که این مشکلاتش که مثلا:
> در listview و نوشتن انگلیسی و فارسی باهم و گذاشتن علامت های(. و / و \)
> حل کنیم اگر درست شد یونیت درست شده رو اینجا قرار میدیم


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

----------


## ابوالفضل عباسی

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

----------


## kont_200

با سلام خدمت nice boy و تشکر میکنم از زحمات شما
بسیار کار شما عالی بود 
آیا بر روی bidi mode  هم کار کردید

----------


## ابوالفضل عباسی

باید ببینیم که niceboy چکار کرده 
زودترین این مشکل رو حل بکنید بچه ها و niceboy
من از یونیت niceboy  چیزی سردر نیاوردم وگرنه خودم درستش میکردم

----------


## Valadi

آپديت اول دلفي سياتل ارائه شده اما خبري از rtl نيست 
http://edn.embarcadero.com/article/44619

----------


## nice boy

سلام دوستان
فایل های مربوط به نسخه seattle‌ رو آماده کردم که اینجا میذارم.
مشکل ComboBox‌و ListBox‌هم حل شد
مشکل جابجایی کلمات انگلیسی هم حل شد

----------


## kont_200

با تشکر از دوست عزیز بابت تمامی زحماتشان
آیا برای listview که از بانک فراخوانی می کنیم هم درست است

----------


## ابوالفضل عباسی

تا اینجا که تست کردم توی listview درست عمل کرده.
دستت درد نکنه

----------


## Valadi

> سلام دوستان
> فایل های مربوط به نسخه seattle‌ رو آماده کردم که اینجا میذارم.
> مشکل ComboBox‌و ListBox‌هم حل شد
> مشکل جابجایی کلمات انگلیسی هم حل شد


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

----------


## hadisalahi2

منم برای XE7 لازم دارم اگه زحمتی نیست

----------


## ابوالفضل عباسی

بی زحمت نسخه xe7 برای دوستان و هم xe8 برای خودم رو هم قرار بدهید.
ممنون

----------


## nice boy

> بی زحمت نسخه xe7 برای دوستان و هم xe8 برای خودم رو هم قرار بدهید.
> ممنون


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

----------


## morteza147

> سلام دوستان
> فایل های مربوط به نسخه seattle‌ رو آماده کردم که اینجا میذارم.
> مشکل ComboBox‌و ListBox‌هم حل شد
> مشکل جابجایی کلمات انگلیسی هم حل شد



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

----------


## ابوالفضل عباسی

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

----------


## Valadi

> نسخه مربوط به XE7 و XE8 رو قبلا اینجا گذاشتم از اونها استفاده کنید
> بعضی تغییرات هم در فایل PersianTool هست که می تونید فایل جدید که برای S10 گذاشتم رو جایگزین قبلی کنید
> برخی موارد هم (مثل ComboBox)مربوط میشه به تغییرات ساختاری که خود Embarcadero در کلاس هاش داده و تغییر دادنشون SideEffect زیادی داره.
> پیشنهاد می کنم دوستان از S10 استفاده کنند من خودم از این نسخه استفاده می کنم و خیلی هم خوب کار می کنه


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

----------


## ابوالفضل عباسی

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

----------


## ابوالفضل عباسی

برای من اول نمایش list box درست نشون میده اما وقتی مثلا روی یک button کلیک میکنم و تا یک فرمان دلفی اجرا بشه ،یهو list box میریزه بهم.
ما تا اینجاش خوب پیش رفتیم . واقعا کارت عالیه بود niceboy .
بی زحمت روش تغییرات رو بما بگو که خودمون دست بکار بشیم و همه کار ها به دوش شما نباشه و زودتر یه یونیت عالی بدهیم بیرون.

----------


## nice boy

> بی زحمت روش تغییرات رو بما بگو که خودمون دست بکار بشیم و همه کار ها به دوش شما نباشه و زودتر یه یونیت عالی بدهیم بیرون.


ؤوش خاصی نداره.
در فایل FMX.TextLayout در متد TTextLayout.EndUpdate; خط زیر رو اضافه کردمFText := TFarsi.Convert(FText);

----------


## ابوالفضل عباسی

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

----------


## nice boy

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

----------


## drama22

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

----------


## ابوالفضل عباسی

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

----------


## molla2005b

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

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

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

لینک دانلود

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

----------


## parsidev

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

----------


## saeidd

> سلام دوستان، کسی آخرین نسخه دلفی (xe10.1 berlin) رو برای این موضوع چک کرده ببینه بالاخره مشکل rtl و فارسی از پایه حل شده یا نه؟


سلام. آپدیت 2 رو چک کردم، هنوز حل نشده.

----------


## ابوالفضل عباسی

سلام.
نه بابا دلفی این کار رو حالا حالا ها نمی کنه.
من روی یونیت niceboy تغییرات کوچیکی دادم،بهتر شده(البته روی edit و button و grid ) من الان به جای label از یک edit که readonly هست و canfocus غیرفعال هست،استفاده می کنم.

----------


## nice boy

> سلام.
> نه بابا دلفی این کار رو حالا حالا ها نمی کنه.
> من روی یونیت niceboy تغییرات کوچیکی دادم،بهتر شده(البته روی edit و button و grid ) من الان به جای label از یک edit که readonly هست و canfocus غیرفعال هست،استفاده می کنم.


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

----------


## ابوالفضل عباسی

سلام دوست عزیز،عیدت مبارک (پیشاپیش)
فکر کنم تنها کسی که با این یونیت خیلی کار کرده من باشم،خودم تغییراتی دادم خواستی بهت یونیت تغییر داده رو میگم.
اشکالات
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

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

----------


## nice boy

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


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

----------


## ابوالفضل عباسی

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

----------


## sajiCG

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

----------


## افشين لي

سلام به همگي دوستان
من طبق فرمايش دوستمون و راهنمايي سايت 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

> *ینکه داشتن کمی انسانیت و انصاف*


من فقط نظرم رو گفتم ولی نمی دونم چرا شما توهین می کنی؟!! اینکه من گفتم این کامپوننت پولیه یعنی من انسانیت ندارم!!!




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


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




> * کمتر آدمی پیدا میشه که حتی به اندازه ی زمان یک روز کاریشون رو به رایگان در اختیار دیگران قرار بده*


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




> *یا اینکه همین که بدونید این برنامه ها پشتیبانی میشن براتون کافیه؟*


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




> *مشکلی که حل شده، حل شده. مشکل فارسی در اندروید حل شده. حالا شما برای مشکل حل شده، دنبال راه حل می گردید؟!*


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

----------


## ابوالفضل عباسی

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


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


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

----------


## sajiCG

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

----------


## ابوالفضل عباسی

حرف شما درست و منطقی هست.
ولی من تفاوتی بین دلفی برلین و سیاتل نمی بینم که بخوام 7 گیگ دانلود کنم و دوباره نصب کنم.
درضمن وقتی برای xe7 طراحی شده و برلین داره درست کار میکنه،باید هم روی سیاتل کار بکنه.

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

----------


## hp1361

احتمالا باز بهار شده و حساسیت من عود کرده! نمیدونم چرا همش فکر میکنم بوی تبلیغات و بازاریابی به مشامم میاد!

----------


## nice boy

من نسخه توکیو رو نصب کردم ولی فایلهای FMX.Objects.pas و FMX.TextLayout.pas رو نداره. اگر کسی از دوستان نسخه رو نصب کرده که این دو فایل توش هست لطفا برای من بفرسته که تغییرات رو انجام بدم
ممنون

----------


## ابوالفضل عباسی

بوی زیادی توی این تاپیک پیچیده.
راستی نسخه توکیو اومد و فارسی درست نشد!!!؟؟؟ :گریه:  :کف کرده!: 

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

باتشکر

----------


## nice boy

آخرین تغییرات برای نسخه توکیو در لینک زیر هست
https://barnamenevis.org/showthread.p...=1#post2364402

----------


## nice boy

من فایلهایی که آمده کردم رو توی github گذاشتم که دسترسی بهش آسون تر باشه.
https://github.com/DelphiBoy2010/FMXPersianPatch

----------


## gbg

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

----------


## holythirteen

> من فایلهایی که آمده کردم رو توی github گذاشتم که دسترسی بهش آسون تر باشه.
> https://github.com/DelphiBoy2010/FMXPersianPatch


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

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

----------


## holythirteen

> من فایلهایی که آمده کردم رو توی github گذاشتم که دسترسی بهش آسون تر باشه.
> https://github.com/DelphiBoy2010/FMXPersianPatch


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

----------


## reza1944

دوستان این الگوریتم و سورس کد اصلا word wrap رو درست نمایش نمیده

----------

