ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

فونت فارسی برای پاسکال

 
Post new topic   Reply to topic    ParsX.com Forum Index -> برنامه نويسي دلفي و پاسكال : Delphi & Pascal Programming
View previous topic :: View next topic  
Author Message
SAJAD_MIRZA
مهمون يكي دو روزه


Joined: 20 Dec 2005
Posts: 21

PostPosted: Tue Dec 27, 2005 1:25 pm    Post subject: فونت فارسی برای پاسکال Reply with quote

سلام

این برنامه عمل فارسی سازی محیط گرافیکی پاسکال را انجام میده . توضیح اینکه اولا اون ثابتی هایی که میبینید مال فونته که هر سطرش مال یه بلوک 8 در 16 هست.
مثلا (0,0,66,62,2,2,4,4,4,4,2,2,0,0,0,0) ماله یک بلوکه و هر عدد ماله هر سطر که مجموعا 16 سطر داریم و اگه عدد را به باینری تبدیل کنیم میبینیم که حالت پیکسلها رو مشخص میکنه .
اگه به تابع say مراجعه کنید بهتر متوجه میشید .
نکته دوم به کار گیری تابع say در برنامه است :
توضیح (say (x1,y1,c1,c2,size,a1 : این تابع یک حرف از الفبا یا عدد فارسی را با مشخصات داده شده برایمان در صفحه گرافیکی رسم میکند .
x1 : مختصات گوشه چپ
y1 : مختصات گوشه بالا
c1 : رنگ زمینه
c2 : رنگ قلم
size : اندازه قلم
a1 : کد اسکی حرف یا عدد مورد نظر

یکم توضیح اضافی اینکه اگه بخواهید یه متن با این برنامه روی صفحه نمایش قرار بدید *** جر خواهد خورد Confused پس ***رو کنار بذارید و یه تابع به برنامه اضافه کنید که بشه باهاش تابع say رو کنترل کرد و عمل تبدیل کاراکتر به کد اسکی همچنین چیدن کارکترها رو انجام بدهد.
نکته آخر اینکه size اینجوری تعریف شده که اگه 1 باشه بلوک 8 در 16 اگه دو باشه بلوک 16 در 32 اگه سه باشه بلوک 24 در 48 میشه و الی آخر پس موقع به کار بردن say برای ساخت یک کلمه حواستون جمع باشه.
اینم کد فارسی ساز:

PROGRAM FarsiFnt;
USES
    GRAPH;
const
  char1:array[127..175,1..16] of byte=(
    (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    (0,0,0,0,0,0,16,40,40,16,0,0,0,0,0,0),
    (0,0,16,16,16,16,8,8,8,4,4,4,0,0,0,0),
    (0,0,62,64,64,64,32,32,32,16,16,16,0,0,0,0),
    (0,0,74,74,116,64,32,32,32,16,16,16,0,0,0,0),
    (0,0,6,8,16,16,12,8,16,32,34,28,0,0,0,0),
    (0,0,0,16,24,36,66,129,129,145,110,0,0,0,0,0),
    (0,0,66,62,2,2,4,4,4,4,2,2,0,0,0,0),
    (0,0,66,66,66,34,36,36,20,24,24,16,0,0,0,0),
    (0,0,8,24,24,20,36,36,34,66,66,66,0,0,0,0),
    (0,0,28,34,34,34,30,2,2,2,2,2,0,0,0,0),
    (0,0,0,0,0,12,24,24,24,0,0,0,0,0,0,0),
    (0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0),
    (0,0,60,66,64,96,16,12,12,0,12,12,0,0,0,0),
    (0,1,62,64,8,8,8,8,8,0,0,0,0,0,0,0),
    (0,0,6,8,30,0,1,1,254,0,0,0,0,0,0,0),
    (0,0,0,0,12,18,16,12,16,4,8,0,0,0,0,0),
    (0,8,12,12,8,8,8,8,8,0,0,0,0,0,0,0),
    (0,4,4,4,4,4,4,4,3,0,0,0,0,0,0,0),
    (0,0,0,0,0,64,129,129,126,0,0,16,0,0,0,0),
    (0,0,0,0,0,0,1,1,254,0,0,32,0,0,0,0),
    (0,0,0,0,0,64,129,129,126,0,0,40,16,0,0,0),
    (0,0,0,0,0,0,1,1,254,0,0,40,16,0,0,0),
    (0,0,0,20,0,64,129,129,126,0,0,0,0,0,0,0),
    (0,0,0,20,0,0,1,1,254,0,0,0,0,0,0,0),
    (0,0,8,20,0,64,129,129,126,0,0,0,0,0,0,0),
    (0,0,8,20,0,0,1,1,254,0,0,0,0,0,0,0),
    (0,0,0,0,24,36,2,63,64,128,136,128,65,62,0,0),
    (0,0,0,0,0,12,18,1,254,0,0,8,0,0,0,0),
    (0,0,0,0,24,36,2,63,64,128,148,136,65,62,0,0),
    (0,0,0,0,0,12,18,1,254,0,0,40,16,0,0,0),
    (0,0,0,0,24,36,2,63,64,128,128,128,65,62,0,0),
    (0,0,0,0,0,12,18,1,254,0,0,0,0,0,0,0),
    (0,0,16,0,24,36,2,63,64,128,128,128,65,62,0,0),
    (0,0,8,0,0,12,18,1,254,0,0,0,0,0,0,0),
    (0,0,0,0,4,2,1,33,62,0,0,0,0,0,0,0),
    (0,0,16,0,4,2,1,33,62,0,0,0,0,0,0,0),
    (0,0,0,0,0,0,0,1,1,1,2,36,24,0,0,0),
    (0,0,0,2,0,0,0,1,1,1,2,36,24,0,0,0),
    (0,0,2,5,0,0,0,1,1,1,2,36,24,0,0,0),
    (0,0,0,0,0,0,21,21,143,136,132,132,120,0,0,0),
    (0,0,0,0,0,0,37,45,210,0,0,0,0,0,0,0),
    (0,2,5,0,0,0,21,21,143,136,132,132,120,0,0,0),
    (0,4,10,0,0,0,37,45,210,0,0,0,0,0,0,0),
    (0,0,0,0,0,2,5,41,158,136,132,132,120,0,0,0),
    (0,0,0,0,0,6,41,49,254,0,0,0,0,0,0,0),
    (0,0,2,0,0,2,5,41,158,136,132,132,120,0,0,0),
    (0,4,0,0,0,6,41,49,254,0,0,0,0,0,0,0),
    (0,32,32,32,32,38,41,49,254,0,0,0,0,0,0,0)
  );

  char2:array[224..254,1..16] of byte=(
    (0,0,36,32,32,38,41,49,254,0,0,0,0,0,0,0),
    (0,0,0,12,18,16,8,62,64,128,128,128,66,60,0,0),
    (0,0,0,0,14,18,12,19,32,64,64,64,33,30,0,0),
    (0,0,0,0,0,28,36,24,231,0,0,0,0,0,0,0),
    (0,0,0,0,6,9,16,8,255,0,0,0,0,0,0,0),
    (0,8,0,12,18,16,8,62,64,128,128,128,66,60,0,0),
    (0,4,0,0,14,18,12,19,32,64,64,64,33,30,0,0),
    (0,0,8,0,0,28,36,24,231,0,0,0,0,0,0,0),
    (0,4,0,0,6,9,16,8,255,0,0,0,0,0,0,0),
    (0,4,0,0,6,73,137,133,126,0,0,0,0,0,0,0),
    (0,4,0,0,6,9,9,5,254,0,0,0,0,0,0,0),
    (0,0,10,0,0,2,5,37,67,65,65,34,28,0,0,0),
    (0,10,0,0,6,9,9,5,254,0,0,0,0,0,0,0),
    (0,6,8,16,16,14,65,129,126,0,0,0,0,0,0,0),
    (0,6,8,16,16,14,1,1,254,0,0,0,0,0,0,0),
    (0,38,72,16,16,14,65,129,126,0,0,0,0,0,0,0),
    (0,38,72,16,16,14,1,1,254,0,0,0,0,0,0,0),
    (0,1,1,1,1,1,1,65,129,129,129,66,60,0,0,0),
    (0,33,33,33,17,9,9,7,30,0,0,0,0,0,0,0),
    (0,1,1,1,1,1,1,1,254,0,0,0,0,0,0,0),
    (0,0,0,0,14,17,17,62,64,64,32,32,16,16,16,16),
    (0,0,0,0,0,14,17,41,198,0,0,0,0,0,0,0),
    (0,0,0,8,0,0,0,33,65,65,65,34,28,0,0,0),
    (0,0,0,8,0,0,1,1,254,0,0,0,0,0,0,0),
    (0,0,0,0,0,6,9,9,7,1,2,68,56,0,0,0),
    (0,0,0,0,12,18,17,17,14,0,0,0,0,0,0,0),
    (0,0,0,0,0,28,36,40,243,36,18,14,0,0,0,0),
    (0,0,0,8,28,38,37,25,246,0,0,0,0,0,0,0),
    (0,0,0,0,0,0,0,0,7,72,140,130,130,124,0,0),
    (0,0,0,0,0,6,72,140,130,130,124,0,0,0,0,0),
    (0,0,0,0,0,0,1,1,254,0,0,40,0,0,0,0)
  );
function say (x1,y1,c1,c2,size,a1:integer):integer;
var  t,u,x,y,a,b,c,d,e,f,g:integer;
     s:array [1..8] of boolean;
begin
         for a:= 1 to 16 do
         begin
           if (a1>=127) and (a1<=175) then b:=char1[a1,a];
           if (a1>=224) and (a1<=254) then b:=char2[a1,a];
           y:=y1+(a-1)*size;
           t:=size;
           repeat
             c:=b mod 2;
             s[9-(t div size) ]:=false;
             if c=1 then s[9-(t div size)]:=true;
             b:=b div 2;
             t:=t+size;
           until t>8*size;
           t:=size;
           repeat
                if s[t div size]=true then
                begin
                setcolor(c1);
                RECTANGLE(x1+(t-size),y,x1+t,y+size);
                SETFILLSTYLE(1,c1);
                FLOODFILL(x1+(t-size)+1,y+1,c1);
                end
                else
                begin
                setcolor(c2);
                RECTANGLE(x1+(t-size),y,x1+t,y+size);
                SETFILLSTYLE(1,c2);
                FLOODFILL(x1+(t-size)+1,y+1,c2);
                end;
                t:=t+size;
           until t>8*size;
         end;
end;

VAR
   DM,GM,x,y,a:integer;
BEGIN
    DM:=DETECT;
    INITGRAPH(DM,GM,'');
    x:=0;
    y:=0;
    for a:=127 to 175 do
    begin
         inc(x,25);
         if x>575 then
         begin
              inc(y,30);
              x:= 0;
         end;
         say(x,y,10,0,2,a);
    end;


    for a:=225 to 254 do
    begin
         inc(x,25);
         if x>575 then
         begin
              inc(y,30);
              x:= 0;
         end;
         say(x,y,10,0,2,a);
    end;
    readln;
END.

______________________________________________________
اين پست توسط مدير سايت جهت رعايت موارد ادبي ويرايش شده است .
Back to top
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 3067
Location: Tehran

PostPosted: Wed Dec 28, 2005 8:48 pm    Post subject: Reply with quote

اگه ميشد كامل تشريحش ميكردي خيلي خوب ميشد ...
Back to top
SAJAD_MIRZA
مهمون يكي دو روزه


Joined: 20 Dec 2005
Posts: 21

PostPosted: Fri Dec 30, 2005 2:54 pm    Post subject: Reply with quote

برنامه رو اجرا کن و یکم برای فهمیدنش سعی کن اگه متوجه نشدی چشم کامل تشریح میکنم
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> برنامه نويسي دلفي و پاسكال : Delphi & Pascal Programming All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum