ورود

View Full Version : مشکل با کامپوننت Tnt



solook
دوشنبه 08 مهر 1387, 10:36 صبح
باسلام

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


procedure TForm1.SrarchEditKeyPress(Sender: TObject; var Key: Char);
begin
IF Key = #223 then Key := #153;
IF Key = #236 then Key := #237;
IF Key = #195 then Key := #199;
IF Key = #197 then Key := #199;
end;
این با Edit های معلمولی خوب کار میکنه اما وقتی از tntedit استفاده میکنم کار نمیکنه

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

tntedit1.Text:=' = #'+inttostr(ord(key));نتیجه جالب بود ..
همه کارکترهای فارسی این بود :

#255اما انگلیسی متفاوت بود


چیکارش کنم؟

vcldeveloper
دوشنبه 08 مهر 1387, 17:38 عصر
کدهای یونی کد با کدهای ASCII فرق میکنه.

solook
دوشنبه 08 مهر 1387, 18:58 عصر
خب چجوری میشه کد های یونی رو پیدا کرد

vcldeveloper
سه شنبه 09 مهر 1387, 05:29 صبح
1- برای پشتیبانی کامل از یونی کد در دلفی می تونید از دلفی 2009 استفاده کنید.
2- وقتی از یونی کد در نسخه های پایین تر دلفی استفاده می کنید، پاس دادن Key بصورت Char باعث از بین رفتن کارکتر میشه، باید از WideChar استفاده بشه. اگر از WideChar استفاده بشه، می تونید با اضافه کردن $# به ابتدای یک کد یونیکد، معادل حرفی آن را بدست بیارید، مثلا:


var
S : WideString;
begin
S := #$0637;
tntEdit1.Text := S;
end;

solook
پنج شنبه 11 مهر 1387, 10:12 صبح
خب حالا چطوری کدشو بنویسم که وقتی کار بر مثلا ی رونوشت تبدیل به ي بشه ؟

اینطوری


if Key = #$0637 then Key := #$0636 ;

خطا میده ...

vcldeveloper
پنج شنبه 11 مهر 1387, 13:16 عصر
خب حالا چطوری کدشو بنویسم که وقتی کار بر مثلا ی رونوشت تبدیل به ي بشه ؟

اینطوری
خطا میده ...
در پست قبلی گفتم:


وقتی از یونی کد در نسخه های پایین تر دلفی استفاده می کنید، پاس دادن Key بصورت Char باعث از بین رفتن کارکتر میشه
پس طبیعی هست که خطا بده. چون در اونجا Key بصورت Char تعریف شده، نه WideChar.
شاید لازم باشه خودتون پیام ویندوزی که موجب فراخوانی اون رویداد میشه رو هندل کنید. فکر کنم پیامش برای KeyPress باید WM_CHAR باشه. فقط هنگام کار با توابع API ویندوز در دلفی قبل از دلفی 2009 دقت کنید که توابع API ویندوز در این نسخه های دلفی به نسخه های Ansi (توابعی که در انتهای آنها A دارد) خودشون map شدند، نه به نسخه های یونی کد (توابعی که در انتهای آنها W دارد). پس اگر می خواید از تابع API ایی استفاده کنید، خودتون مستقیما نسخه یونیکد آن را فراخوانی کنید.
در دلفی 2009 تمام توابع API ایی که دو نسخه Ansi و یونیکد داشتند، به نسخه یونیکد Map شدند.