PDA

View Full Version : تبدیل فونت فارسی ویندوز به فونت فارسی IPT



شفیعی
پنج شنبه 24 اردیبهشت 1383, 02:58 صبح
سلام
می خواهیم برنامه ای بنویسیم که فونتهای فارسی ویندوز را به فونتهای فارسی IPT تبدیل کند
لطفا بنده را راهنمائی نمائید

شفیعی
جمعه 25 اردیبهشت 1383, 04:56 صبح
سلام
در ویندوز وقتی یک رشته را وارد می کنیم بعد که می خواهیم این رشته را تکه تکه کنیم و نوع کاراکترها را تشخیص دهیم با مشکل مواجه می شویم مثلا وقتی یک کلمه فارسی می نویسیم می خواهیم نوع کاراکترها تشخیص دهیم مثلا با استفاده از کد اسکی متوجه شویم کاراکتر از حروف کوچک است یا حروف بزرگ . در متغیر SS تمام حروف به شکل بزرگ نمایش داده می شود به همین خاطر نمی توان متوجه شد که کاراکتر از نوع کوچک است یا بزرگ .


ss:=FD[t];
T1:=Ord(SS);
case T1 of

شفیعی
یک شنبه 27 اردیبهشت 1383, 03:08 صبح
سلام
اگر بخواهیم فارسی سازی شبیه پارسا 99 بنویسیم که در کلیه نرم افزار ها فارسی بنویسد باید چکارکنیم

شفیعی
دوشنبه 28 اردیبهشت 1383, 17:54 عصر
سلام
تبدیل فونتهای ویندوز به فونتهای IPT


function FWIN_FIPT(Win_Ipt : STRING):PCHAR; stdcall;
const CHAR_BIG =[32,40..57,142,194,199,208,207,209,210,230];
CONST CH_FIRST_SMALL=[129,141,144,200,202,203,204,205,20 6
,211,212,213,214,216,217,218,219,221
,222,223,225,227,228,229,237];
CONST CHAR_FIRST_SMALL =[129,141,144,199,200,202,203,204,205
,206,211,212,213,214,216,217,218,219
,221,222,223,225,227,228,229,237];
VAR FW:STRING;
T,T1:INTEGER;
SS:CHAR;
BEGIN
FW:=Win_Ipt;
Win_Ipt:='';
IF TRIM(FW) <> '' THEN
for t:=1 to length(FW) do
begin
ss:=FW[t];
T1:=Ord(SS);
IF T1 IN [48..57] THEN
INSERT(SS,Win_Ipt,T);
if T1 = 194 THEN
BEGIN
Win_Ipt:=chr(68)+Win_Ipt;
T1:=0;
END;
IF ((ORD(FW[T+1])= 32 ) AND (ORD(FW[T-1])IN CHAR_BIG ) ) THEN
BEGIN
case T1 of
129 : Win_Ipt:='J'+Win_Ipt;
141 : Win_Ipt:='Z'+Win_Ipt;
142 : Win_Ipt:=chr(111)+Win_Ipt;
144 : Win_Ipt:='ء '+Win_Ipt;
199 : Win_Ipt:='B'+Win_Ipt;
200 : Win_Ipt:='F'+Win_Ipt;
202 : Win_Ipt:='N'+Win_Ipt;
203 : Win_Ipt:='R'+Win_Ipt;
204 : Win_Ipt:='V'+Win_Ipt;
205 : Win_Ipt:='^'+Win_Ipt;
206 : Win_Ipt:='b'+Win_Ipt;
207 : Win_Ipt:='f'+Win_Ipt;
208 : Win_Ipt:='h'+Win_Ipt;
209 : Win_Ipt:='j'+Win_Ipt;
210 : Win_Ipt:='l'+Win_Ipt;
211 : Win_Ipt:='p'+Win_Ipt;
212 : Win_Ipt:='t'+Win_Ipt;
213 : Win_Ipt:='x'+Win_Ipt;
214 : Win_Ipt:='|'+Win_Ipt;
216 : Win_Ipt:='¢'+Win_Ipt;
217 : Win_Ipt:='¦'+Win_Ipt;
218 : Win_Ipt:=CHR(170)+Win_Ipt;
219 : Win_Ipt:='°'+Win_Ipt;
221 : Win_Ipt:='´'+Win_Ipt;
222 : Win_Ipt:='¹'+Win_Ipt;
223 : Win_Ipt:='½'+Win_Ipt;
225 : Win_Ipt:='إ'+Win_Ipt;
227 : Win_Ipt:='ة '+Win_Ipt;
228 : Win_Ipt:='ح '+Win_Ipt;
229 : Win_Ipt:='×'+Win_Ipt;
230 : Win_Ipt:='س'+Win_Ipt;
237 : Win_Ipt:='ک'+Win_Ipt;
END;
T1:=0;
end;
IF ((ORD(FW[T+1])=32 ) AND (ORD(FW[T-1]) IN CHAR_BIG = FALSE)) THEN
BEGIN
CASE T1 OF
129 : Win_Ipt:=CHR(75)+Win_Ipt;
141 : Win_Ipt:=CHR(91)+Win_Ipt;
142 : Win_Ipt:=chr(111)+Win_Ipt;
144 : Win_Ipt:=CHR(194)+Win_Ipt;
199 : Win_Ipt:=chr(67)+Win_Ipt;
200 : Win_Ipt:=CHR(71)+Win_Ipt;
202 : Win_Ipt:=CHR(79)+Win_Ipt;
203 : Win_Ipt:=CHR(83)+Win_Ipt;
204 : Win_Ipt:=CHR(87)+Win_Ipt;
205 : Win_Ipt:=CHR(95)+Win_Ipt;
206 : Win_Ipt:=CHR(99)+Win_Ipt;
207 : Win_Ipt:=CHR(103)+Win_Ipt;
208 : Win_Ipt:=CHR(105)+Win_Ipt;
209 : Win_Ipt:=CHR(107)+Win_Ipt;
210 : Win_Ipt:=CHR(109)+Win_Ipt;
211 : Win_Ipt:=CHR(113)+Win_Ipt;
212 : Win_Ipt:=CHR(117)+Win_Ipt;
213 : Win_Ipt:=CHR(121)+Win_Ipt;
214 : Win_Ipt:=CHR(125)+Win_Ipt;
216 : Win_Ipt:=CHR(163)+Win_Ipt;
217 : Win_Ipt:=chr(167)+Win_Ipt;
218 : Win_Ipt:=chr(171)+Win_Ipt;
219 : Win_Ipt:=chr(177)+Win_Ipt;
221 : Win_Ipt:=chr(181)+Win_Ipt;
222 : Win_Ipt:=chr(186)+Win_Ipt;
223 : Win_Ipt:=chr(190)+Win_Ipt;
225 : Win_Ipt:=chr(198)+Win_Ipt;
227 : Win_Ipt:=chr(202)+Win_Ipt;
228 : Win_Ipt:=chr(206)+Win_Ipt;
229 : Win_Ipt:=chr(216)+Win_Ipt;
230 : Win_Ipt:=chr(212)+Win_Ipt;
237 : Win_Ipt:=chr(224)+Win_Ipt;
END;
T1:=0;
END;
IF ((ord(fw[t]) in [142,207..210,230]) AND
(ord(fw[t-1]) in CHAR_FIRST_SMALL)) THEN
BEGIN
CASE T1 OF
142 : Win_Ipt:=chr(111)+Win_Ipt;
207 : Win_Ipt:=chr(103)+Win_Ipt;
208 : Win_Ipt:=chr(105)+Win_Ipt;
209 : Win_Ipt:=chr(107)+Win_Ipt;
210 : Win_Ipt:=chr(109)+Win_Ipt;
230 : Win_Ipt:=chr(212)+Win_Ipt;
END;
T1:=0;
END;
if (ord(fw[t-1]) in CH_FIRST_SMALL) and
(ord(fw[t+1]) in CHAR_FIRST_SMALL) then
CASE T1 OF //media STRING
129 : Win_Ipt:=chr(76)+Win_Ipt;
141 : Win_Ipt:=chr(92)+Win_Ipt;
142 : Win_Ipt:=chr(111)+Win_Ipt;
144 : Win_Ipt:=chr(195)+Win_Ipt;
199 : Win_Ipt:=chr(67)+Win_Ipt;
200 : Win_Ipt:=chr(72)+Win_Ipt;
202 : Win_Ipt:=chr(80)+Win_Ipt;
203 : Win_Ipt:=chr(84)+Win_Ipt;
204 : Win_Ipt:=chr(88)+Win_Ipt;
205 : Win_Ipt:=chr(96)+Win_Ipt;
206 : Win_Ipt:=chr(100)+Win_Ipt;
207 : Win_Ipt:=chr(103)+Win_Ipt;
208 : Win_Ipt:=chr(105)+Win_Ipt;
209 : Win_Ipt:=chr(107)+Win_Ipt;
210 : Win_Ipt:=chr(109)+Win_Ipt;
211 : Win_Ipt:=chr(114)+Win_Ipt;
212 : Win_Ipt:=chr(118)+Win_Ipt;
213 : Win_Ipt:=chr(122)+Win_Ipt;
214 : Win_Ipt:=chr(126)+Win_Ipt;
216 : Win_Ipt:=chr(164)+Win_Ipt;
217 : Win_Ipt:=chr(168)+Win_Ipt;
218 : Win_Ipt:=chr(172)+Win_Ipt;
219 : Win_Ipt:=chr(178)+Win_Ipt;
221 : Win_Ipt:=chr(182)+Win_Ipt;
222 : Win_Ipt:=chr(187)+Win_Ipt;
223 : Win_Ipt:=chr(191)+Win_Ipt;
225 : Win_Ipt:=chr(199)+Win_Ipt;
227 : Win_Ipt:=chr(203)+Win_Ipt;
228 : Win_Ipt:=chr(207)+Win_Ipt;
229 : Win_Ipt:=chr(217)+Win_Ipt;
237 : Win_Ipt:=chr(225)+Win_Ipt;
END
else
if (ord(FW[t-1]) IN CHAR_BIG = TRUE ) OR (T=1) then
CASE T1 OF //START STRING
129 : Win_Ipt:='M'+Win_Ipt;
141 : Win_Ipt:=']'+Win_Ipt;
142 : Win_Ipt:=chr(110)+Win_Ipt;
144 : Win_Ipt:='ؤ '+Win_Ipt;
199 : Win_Ipt:=chr(66)+Win_Ipt;
200 : Win_Ipt:='I'+Win_Ipt;
202 : Win_Ipt:='Q'+Win_Ipt;
203 : Win_Ipt:='U'+Win_Ipt;
204 : Win_Ipt:='Y'+Win_Ipt;
205 : Win_Ipt:='a'+Win_Ipt;
206 : Win_Ipt:='e'+Win_Ipt;
207 : Win_Ipt:='f'+Win_Ipt;
208 : Win_Ipt:='h'+Win_Ipt;
209 : Win_Ipt:='j'+Win_Ipt;
210 : Win_Ipt:='l'+Win_Ipt;
211 : Win_Ipt:='s'+Win_Ipt;
212 : Win_Ipt:='w'+Win_Ipt;
213 : Win_Ipt:='{'+Win_Ipt;
214 : Win_Ipt:='،'+Win_Ipt;
216 : Win_Ipt:='¥ '+Win_Ipt;
217 : Win_Ipt:=chr(166)+Win_Ipt;
218 : Win_Ipt:=chr(174)+Win_Ipt;
219 : Win_Ipt:=chr(179)+Win_Ipt;
221 : Win_Ipt:=chr(184)+Win_Ipt;
222 : Win_Ipt:=chr(188)+Win_Ipt;
223 : Win_Ipt:=chr(192)+Win_Ipt;
225 : Win_Ipt:=chr(200)+Win_Ipt;
227 : Win_Ipt:=chr(204)+Win_Ipt;
228 : Win_Ipt:=chr(208)+Win_Ipt;
229 : Win_Ipt:=chr(218)+Win_Ipt;
230 : Win_Ipt:=chr(211)+Win_Ipt;
237 : Win_Ipt:=chr(226)+Win_Ipt;
END
ELSE
case T1 of // END STRING
129 : Win_Ipt:='J'+Win_Ipt;
141 : Win_Ipt:='Z'+Win_Ipt;
142 : Win_Ipt:=chr(111)+Win_Ipt;
144 : Win_Ipt:='ء '+Win_Ipt;
199 : Win_Ipt:='B'+Win_Ipt;
200 : Win_Ipt:='F'+Win_Ipt;
202 : Win_Ipt:='N'+Win_Ipt;
203 : Win_Ipt:='R'+Win_Ipt;
204 : Win_Ipt:='V'+Win_Ipt;
205 : Win_Ipt:='^'+Win_Ipt;
206 : Win_Ipt:='b'+Win_Ipt;
207 : Win_Ipt:='f'+Win_Ipt;
208 : Win_Ipt:='h'+Win_Ipt;
209 : Win_Ipt:='j'+Win_Ipt;
210 : Win_Ipt:='l'+Win_Ipt;
211 : Win_Ipt:='p'+Win_Ipt;
212 : Win_Ipt:='t'+Win_Ipt;
213 : Win_Ipt:='x'+Win_Ipt;
214 : Win_Ipt:='|'+Win_Ipt;
216 : Win_Ipt:='¢'+Win_Ipt;
217 : Win_Ipt:='¦'+Win_Ipt;
218 : Win_Ipt:='®'+Win_Ipt;
219 : Win_Ipt:='°'+Win_Ipt;
221 : Win_Ipt:='´'+Win_Ipt;
222 : Win_Ipt:='¹'+Win_Ipt;
223 : Win_Ipt:='½'+Win_Ipt;
225 : Win_Ipt:='إ'+Win_Ipt;
227 : Win_Ipt:='ة '+Win_Ipt;
228 : Win_Ipt:='ح '+Win_Ipt;
229 : Win_Ipt:='×'+Win_Ipt;
230 : Win_Ipt:='س'+Win_Ipt;
237 : Win_Ipt:='ک'+Win_Ipt;
end;
END;
FWIN_FIPT:=PCHAR(Win_Ipt);
END;

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

شفیعی
چهارشنبه 30 اردیبهشت 1383, 04:48 صبح
سلام
برای تبدیل تابع بالا به یک DLL باید چکار کرد

Hidarneh
جمعه 01 خرداد 1383, 23:37 عصر
عوض اونهمه case و عدد ردیف کردن ( که سر آدم سوت می کشه ) می تونستی تعریف آرایه هات رو هم از جنس کاراکتر بگیری :

const s1:array[1..50] of char =chr(220),...
و در بخش کد نویسی به یه دستور ساده pos کاراکتر خودتو توی رشته اصلی پیدا کنی و همون اندیس رو برای جایگزینی بکار ببری . ( همون روشی که من خودم در مبدل کدپیج هام استفاده کردم ) اینجوری اگه یه کاراکتر اشتباه بشه که ...

شفیعی
شنبه 02 خرداد 1383, 05:14 صبح
سلام
خیلی ممنون
به چه روش می توان تابع بالا را تبدیل به کامپوننت یا DLL نمود

شفیعی
دوشنبه 12 مرداد 1383, 23:57 عصر
سلام
در برنامه بالا آخرین حرف رشته را با حروف کوچک می زند برای حل این مشکل چکار باید کرد
کسی از دوستان برنامه ای در این زمینه دارد

شفیعی
سه شنبه 31 شهریور 1383, 21:36 عصر
سلام
کسی از دوستان راه حلی به ذهنش نمی رسد تا مشکل بنده حل شود

MiRHaDi
سه شنبه 07 مهر 1383, 09:50 صبح
سلام
شرطت رو کامل کن !
اگر بعدش چیزی نبود یا آخرین کاراکتر بود بزرگ شه
بای

شفیعی
جمعه 24 مهر 1383, 20:28 عصر
سلام
اگر ممکن است دستورش را برایم بنویس