نمایش نتایج 1 تا 35 از 35

نام تاپیک: چرا کاراکترهام به صورت ؟ می آید

  1. #1

    Thumbs down چرا کاراکترهام به صورت ؟ می آید

    متنی را از فایل با فرمت RTF داخل Richedit باز می کنم و درست است ولی وقتی می خواهم یک خط از Richedit را داخل متغییر String بریزم کاراکترهای خاص از جمله:
    ī و āو مشابه آنها بصورت ؟ می آید چکار کنم که موقع ریختن خطی با این کاراکترها در رشته بصورت صحیح بیاید و ؟ نشود.

    متن در Richedit:
    Mr. Sayyid `Abbās Sadr-`āmelī

    متن در String:
    Mr. Sayyid `Abb?s Sadr-`?mel?
    آخرین ویرایش به وسیله m-khorsandi : شنبه 23 تیر 1386 در 12:51 عصر دلیل: فونت نامناسب

  2. #2
    برو در کنترل پنل در قسمت regianal and language option تنظیمات فارسی را تصحیح کن

  3. #3
    ببخشید تنظیمات فارسی سیستم درست است چون اگر مشکل داشت در Word هم به مشکل بر میخورد ولی همان طور که گفتم این مشکل موقع ریختن در یک متغیر string پیش می آید!

  4. #4
    توی این متن فارسی هست که تنظیمات فارسی رو درست کنند ؟!

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

  5. #5
    نمی دونم شما منظور منو متوجه نمی شید یا من منظور شما رو
    اگه معادل بگذارم چون باز تو استرینگه به همون شکل علامت سوال نشون می ده
    مشکلش با استرینگه
    من انواعی مثل:
    widestring utf8string و .... را امتحان کردم ولی باز هم این کاراکترها را علامت سوال می یاره

  6. #6
    اگه میتونید آی دی زیر را اد کنید تا یه فایل واستون بفرستم نصب کنید
    احتمالا" مشکلتون حل می شه
    چو ن حجمش زیاده نمی تونم تو سایت آپلود کنم
    موفق باشید
    mehdi_mohamadi59@yahoo. com

  7. #7
    در قسمت فونت کنترلت خاصیتی است (دقیقا یادم نیست) که برای نمایش حروف فارسی باید مقدار arabic داشته باشد که احتمالا مقداری مثل western رو داره - اون رو arabic کن.

  8. #8
    کاربر دائمی آواتار Batman
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    ناكجاآباد
    پست
    887
    همون طوری که دوست خوبمون آقای ealvandi اشاره کردن قسمت زیر رو دنبال کن شاید مشکلت حل شد
    font-->charset-->arabic_charset

  9. #9
    ممنون از راهنمایی های همه ولی اگه به بالا دقت کنید می بینید که اصلا متن من فارسی نیست
    اگه کسی می خواد کمک کنه لطفا یک رشته تعریف کنه
    var s:string
    بعد رشته S را مقدار دهی کنه ' s:='Mr. Sayyid `Abbās Sadr-`āmelī
    بعد هم با کلید F7 که Trace کنه می بینه که موقع ریخته شدن این مقدار در رشته S مقدارش بصورت زیر تغییر می کنه
    Mr. Sayyid `Abb?s Sadr-`?mel?
    (همون طور که می بینید متن فارسی نیست)
    یعنی اینکه کاراکترهای خاص از جمله:ī و āو مشابه آنها بصورت ؟ می آید

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

  10. #10
    کاربر دائمی آواتار Batman
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    ناكجاآباد
    پست
    887
    من تستش کردم و هیچ مشکلی نبود
    ممکنه برنتمتون رو آپلود کنید تا ببینم مشکل فقط رو سیستم شما هستش یا در بقیه سیستم ها هم به همین شکل هستش

  11. #11
    اینم برنامه نمونه
    فایل های ضمیمه فایل های ضمیمه

  12. #12
    کاربر دائمی آواتار Batman
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    ناكجاآباد
    پست
    887
    من برنامتون رو نگاه کردم
    دوست عزیز شما برای اون کاراکترها از Character Map استفاده کردید؟

  13. #13
    هیچ کسی نیست سوال من را جواب بده؟
    به جای String از WideString هم استفاده کردم جواب نداد.

  14. #14
    کاربر جدید
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    مشهد
    پست
    11
    سلام.
    با WideString که مشکلی نداره!
    فقط شما از TextBox استاندارد دلفی استفاده نکنید.
    فکر کنم از TntUnicode Controls استفاده کنید مشکل حل بشه!
    عکس های ضمیمه عکس های ضمیمه
    • نوع فایل: gif Pic.GIF‏ (5.6 کیلوبایت, 15 دیدار)

  15. #15
    ببین بعضی از حروفی که توی این استفاده کردی مثل ā توی Charset فارسی و حتی اینگیلیسی نیستند ، دلیل اینکه اینجا توی وب دیده میشند اینه که اینجا محیط یونیکد هست ، اما محیط دلفی یونیکد نیست پس فقط میتونه حروفی رو که توی کرکترست پیش فرض سیستم هست رو نشون یده . که چون این حروف توش نیستند ، علامت سوال نشونشون میده ، حالا شما یا باید بیخیال این کلمات بشید و تبدیلشون کنید به معادلهاییشون که توی Charset Default سیستم هست ، یا اینکه کرست سیستم رو بزارید روی یک زبانی که این کرکترها رو داره مثلا آلمانی (اگر داشته باشه) ، یا اینکه همونطوری که یکی اینجا پیشنهاد کرده از اینترفیسهای یونیکدی که برای دلفی هست مثل TNT استفاده کنید که در این حالت هم باید حواستون باشه این وسط اطلاعات رو دوباره توی استرینگ نریزید که خراب میشند.

    پ.ن : Charset Default سیستم برای برنامه هایی که یونیکد ساپورت نیستند در RegionalSettings، تب Advanced اونجایی که نوشته Language For none Unicode Programs تعیین میشه .

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

  16. #16
    کاربر دائمی آواتار Batman
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    ناكجاآباد
    پست
    887
    پ.ن : امیدوارم دوستان به جای حدس زدن های روی هوا سعی کنند مشکلات رو بفهمند و راه حل درستشون رو پیدا کنند.[/quote]
    با عرض معذرت از آقای ghabil عزیز
    من گفتم شاید از کاراکترهای charactermap استفاده کرده چون بعضی از اونها زمانی که توی دلفی میاری به صورت علامت ؟ در میاد
    بهر حال شما چند تا پیرهن بیشتر از ماها پاره کردی و ما میخواهیم از تجربیات شما استفاده کنیم

  17. #17
    کاربر دائمی آواتار Hadizadeh
    تاریخ عضویت
    اردیبهشت 1382
    محل زندگی
    World of Machine
    پست
    326
    فونت رو Tahoma کن درست میشه!

  18. #18
    کاربر دائمی آواتار Batman
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    ناكجاآباد
    پست
    887
    آقای هادیزاده این کاری رو که شما فرمودی جواب نداده
    لطفا مطالب رو با دقت بخون
    موفق باشی

  19. #19
    کاربر دائمی آواتار Hadizadeh
    تاریخ عضویت
    اردیبهشت 1382
    محل زندگی
    World of Machine
    پست
    326
    شرمنده ام به خدا ولی من قبلا چنین مشکلی داشتم این کارو کردم حل شد حالا ببخشید که وقت نکردم کل مطالب رو بخونم :-)

  20. #20
    سلام منم همچین مشکلی دارم و تکست های فارسیم رو Thai (تایوان) نمایش میده و من قبلا این مشکل رو نداشتم فکر کنم تنظیماته دلفی رو به هم ریختم و مشکلی از ویندوز نیست و مجبورم Thai رو به Arabic هر دفعه تعغیر بدم تا بتونم بنویسم

  21. #21
    [QUOTE=ghabil;368400]

    پ.ن : Charset Default سیستم برای برنامه هایی که یونیکد ساپورت نیستند در RegionalSettings، تب Advanced اونجایی که نوشته Language For none Unicode Programs تعیین میشه .

    [QOUTE]


    اینو چک کردی؟

  22. #22
    من یه فایل Rtf را در یک RichEdit لود می کنم که این فایل دارای کاراکترهای خاص از جمله ā و ī و ... هست و مشکلی در نمایش آن در RichEdit وجود ندارد.
    RichEdit1.Lines.LoadFromFile(filepath);

    ولی وقتی که می خواهم یک خط از RichEdit را داخل یک متغییر WideString بریزم مشکل دار می آید
    str:= RichEdit1.lines.Strings[1];

    و دلیلش این است که lines.Strings یک مقدار String برمی گرداند نه Widestring و با اینکه خروجی اش را داخل Widestring می ریزیم چون خودش String برگردانده مشکل دار می شود.

    سوال: آیا تابعی وجود دارد که خروجی RichEdit1.lines.Strings[1] را به Widestring تبدیل کند؟

    با تشکر

  23. #23
    یه برنامه جدید ایجاد کنید
    یک Memo و یک RichEdit روی فرم قرار بدید برنامه رو ران کنید
    در زمان اجرا جمله زیر رو در اون Paste کنید ببینید چه اتفاقی میفته
    Mr. Sayyid `Abbās Sadr-`āmelī
    اتفاق اینه که در RichEdit همین عبارت ولی در Memo عبارت همره با ؟ نمایش در میاد.
    این در حالیه که نوع Lines در هر دو کنترل TStrings هست
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  24. #24
    نقل قول نوشته شده توسط علامت سوال مشاهده تاپیک
    این در حالیه که نوع Lines در هر دو کنترل TStrings هست
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    دقیقا نکته همینجاست ! اگر دقت کنی RichEdit در تب Windows هست ، یعنی ماله VCL دلفی نیست یکی از کامپونتهای ویندوزه ، پس از ویندوز 2000 به بعد یونیکد ساپورت هست ، اما وقتی دلفی مقدارش رو از ویندوز میگیره تبدیلش میکنه به استرینگ 1 بایتی.
    این نکته ای بود که من هم بهش دقت نکرده بودم ....

    پس :

    نقل قول نوشته شده توسط farnaz2003 مشاهده تاپیک
    [COLOR=black]
    سوال: آیا تابعی وجود دارد که خروجی RichEdit1.lines.Strings[1] را به Widestring تبدیل کند؟

    با تشکر
    ببین با این تابع باید بتونی مقادیر رو مستقیما از ویندوز بگیری (بدون دخالت دلفی) ولی بعدش دوباره توی دلفی هر کاری باهاش بکنی میشه String ها :


    function TForm1.RicheditWideLine(ARichEdit: TRichEdit; ALine: Integer ): WideString;
    var
    ALineIndex, ALineLength, I: Integer;
    AHandle: HWND;
    begin
    Result := '';
    AHandle := ARichEdit.Handle;
    ALineIndex := SendMessageW(AHandle, EM_LINEINDEX, ALine, 0);
    if ALineIndex >= 0 then
    begin
    ALineLength := SendMessageW(AHandle, EM_LINELENGTH, ALineIndex, 0);
    if ALineLength > 0 then
    begin
    SetLength(Result, ALineLength);
    Result[1] := Widechar(ALineLength);
    I:= SendMessageW(AHandle, EM_GETLINE, ALine, LPARAM(PWideChar(Result)));
    if I < ALineLength then
    SetLength(Result, I);
    end;
    end;
    end;


    این کد یک خط رو میگیره دیگه ، میتونی یک لوپ بزنی همه خطهارو بگیری...

  25. #25
    ممنون آقای ghabil هر چند ظاهر تابع خیلی درسته، و درست هم کار می کنه ولی با این تابع هم درست نشد و باز هم خروجی به جای اون کاراکترها ؟ داد.
    اگه راه حل دیگه ای هر کسی داره بگه ممنون می شم.

  26. #26
    کجا دیدی مقدار رو ؟

  27. #27
    خروجی تابع را توی متغییر WideString ریختم.
    چطور مگه؟ اشتباه کردم؟

  28. #28
    منظور آقای کوشا این هست که مقدار رو ریختی توی WideString این درست ولی چطوری تونستی این مقدار رو در برنامه به نمایش بزاری و ببینی که متوجه شدی باز هم کار نمیکنه.

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

  30. #30
    نمی دونم منظورتون از اینکه کجا دیدید و اینا چیه ولی من با F7، خروجی را دیدم (Trace کردم) و دیدم علامت سوال می یاد.
    (البته وقتی متغییر WideString بگیری و رشته را مستقیما توش بریزی و با F7 ببینی اوکی هستش
    var s:Widestring
    s:='Mr. Sayyid `Abbās Sadr-`āmelī

    ولی همونطور که قبلا گفتم مشکلم اینه که
    وقتی که می خواهم یک خط از RichEdit را داخل یک متغییر WideString بریزم مشکل دار می آید str:= RichEdit1.lines.Strings[1];


    و دلیلش این است که lines.Strings یک مقدار String برمی گرداند نه Widestring و با اینکه خروجی اش را داخل Widestring می ریزیم چون خودش String برگردانده مشکل دار می شود.


    و تابعی که شما دادید را خروجی اش را توی متغییر WideString ریختم و موقع اجرا با F7 دیدم که توش ؟ می ریزه

    ممنون از همه (امیدوارم این دفعه تونسته باشم مفهوم را برسونم)

  31. #31
    خب توی F7 یک EDIT و یک MEMO دلفی هست که اونا خودشون نمیتونند کد یونیکد رو نشون بدهند دیگه ، وقتی میگم محیط دیباگ هم یونکد نیست منظورم همینه دیگه.
    تو بگو میخوای با این اطلاعات وقتی گرفتیشون چی کار بکنی؟

  32. #32
    می خوام توی جدول بریزم.
    توضیح بیشتر:
    می خوام توی یه فیلد از جدول (در اکسس) بریزم، نوع فیلدش Memo است و در ضمن امتحان کردم و وقتی مستقیما در اکسس این رشته را توی فیلد می ریزیم مشکل نیست ولی وقتی از طریق کد نویسی توی دلفی است، مشکل دار می شه.
    str:=R_temp.lines.Strings[StrToInt(ListBox1.Items.Strings[i])];
    ADOTable1.FieldValues['txt']:=str;

  33. #33
    یه چیز دیگه که حالا امتحان کردم (با فرض نادیده گرفتن Richedit) اینه که حتی اگه مستقیما رشته را توی WideString بریزیم
    var str:widestring
    str:='Mr. Sayyid `Abbās Sadr-`āmelī
    تا اینجا درست در Str ریخته می شه ولی موقعی که توی جدول می ریزیم مشکل دار می شه
    ADOTable1.FieldValues['txt']:=str

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

    اشکالات:
    1- چطوری خروجی RichEdit1.lines.Strings[1 را به Widestring تبدیل کنم؟
    2- بعد که از Richedit به درستی توی متغییر Widestring ریخته شد چطوری وقتی توی جدول می ریزم( ADOTable1.FieldValues['txt']:=str)درست وارد جدول بشه؟

  34. #34
    نوع فیلد رو چی گذاشتی .؟
    توی دیتابیس از nchar استفاده کن البته این برای SQLserver هست.
    بعد ببین درست میشه

  35. #35
    قبلا یکی از دوستان اشاره کردند که از کنترل های Tnt استفاده کنید. این مجموعه کامپوننت از unicode پشتیبانی می کنه و بصورت open-source در دسترس هست. برای کار شما یک نمونه مثال از روی نمونه سورس کد خودتون با استفاده از Memo و TntMemo گذاشتم.
    برای کامپایل مجدد نمونه سورس ضمیمه شده، باید Tnt روی دلفی نصب شده باشه.
    فایل های ضمیمه فایل های ضمیمه


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •