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

## (امید)

*برداشت شده از barnamenevis.com*

__________________________________________________  ___________

چگونه میتوان در پنجره showmessage فارسی نوشت؟

با سلام؛

دوست عزیز در همان کامپوننتهای HRTools یک یونیت بانام Convert وجود دارد که برای همین کار دو تابع دارد:

FConfirmMSG
ShowFMessage



برای نوشتن Message فارسی تو ویندوز انگلیسی چیزی نمی دونم . 

ولی MessageDlgدلفی تو  ویندوز فارسی هم مشکل داره. مثلا icon سمت راست نیست یا متن دکمه ها فارسی نیست .... 

واسه  این کار میتونی از FMessageDlg که تو فایل Fdialogs.dcu تعریف شده استفاده کنی. این فایل تو www.delphi7.net/falad هست که میتونی download کنی.

تو این unit تابع های دیگه ای مثل 

FInputQuery 
FInputBox 
FMessageDlg
هم هست.



Nightbat  


آقای ربیعی 

من از showfmessage استفاده کردم ولی فونتهایش مشکل داشت. با توجه به اینکه در ویندوز XP این مشکل بوجود آمد لطفا در صورت امکان بیشتر توضیح بدهید.

و یک پیشنهاد: چقدر خوب میشد اگه در یک متن Text کوچک در مورد HRtools توضیح میدادید و بهمراه آن درون سایت قرار می دادید. دراین صورت خیلی بهتر و کاملتر میشد از کامپوننتهای شما استفاده کرد. 
با آرزوی توفیق روزافزون برای شما.


ebrahim  


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

{
Var
   MsgText, MsgCaption : String;
   MsgType, UserResp : integer;
}

   MsgCaption := 'اخطار';
   MsgText := 'جهت امتحان';
   MsgType := MB_YESNO + MB_ICONWARNING + MB_DEFBUTTON1 + MB_APPLMODAL + MB_RIGHT;


   UserResp := MessageBox( Handle, PChar(MsgText), PChar(MsgCaption), MsgType);
 { UserResp := MessageBox( Handle, 'جهت امتحان', 'اخطار', $80034); }

   Case UserResp of
      IDYES :
          begin
          end;
      IDNO :
          begin
          end;
   end;

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

MVF

 __________________________________________________  __________

چگونه می توان یک Edit داشت که به محض ورود به آن بتوان فارسی تایپ کرد.(نیازی به تغییر نوع زبان در روی tray نباشد)    

متشکرم.................


عاشقم بر همه عالم که همه عالم از اوست

مخلص شما--سعید--  


Application.Bidikeyboard:='00000429';
MahdiSeifJamali  


شما میتوانید از این دستور استفاده کنید :   
SetKeyboardLayout(LANG_FARSI);
ناصر فدائی  


کد آقای فدائی خوبه - به این آدرس هم سر بزن http://www.delphi-unicode.net/ 



..قانونه جنگلو زیر پا گذاشتی ... 



سلام. در onenter از دستور LoadKeyboardLayout(KLF_ACTIVATE ,"00000401") و در onexit ازLoadKeyboardLayout(KLF_ACTIVATE ,"00000409")  استفاده کنید.
babayetaparman()  

سلام

می بخشی آقا سعید

ولی یادت باشه که 00000401 برای زبان عربیه و 00000429 برای زبان فارسی استاندارد.

البته در ویندوز 98 درسته ولی در ویندوز XP باید 00000429 باشه.


مجید افرا 



HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/keyboard leyouts


..قانونه جنگلو زیر پا گذاشتی ... 

__________________________________________________  __________

سلام

از خدمتتان سوالی داشتم:

چگونه میتوان منوی فارسی در برنامه استفاده نمود؟

متشکرم.


ebrahim 



سلام

درست گفتی اشتباه از من بود چون mainmenu فونت نداره . اگه ویندوزت فارسی باشه فارسی رو نمایش می ده. اگه فونت های فارسی رو نصب نکردی این کارو بکن.

 caption form  هم تو properties form هست(اگه منظورت این بود)

امید


دوست عزیز

1-از سایت جناب ربیعی ابزار فارسی را بردار و استفاده کن چیزهای خوبی است.

2-از فونتهای ایران سیستم کن.

دز صورت نصب فونت مذکور در هر ویندوزی مشکلت حل میشود.

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


MahdiSeifJamali 


اضافه بر مطالب بالا که صحیح بود عرض شود که :

کامپوننت های متفاوتی دیدم که از main menu اصلی دلفی منشق نشده اند و همه ظواهر و شمایل اونها بطور اختصاصی تنظیم میشود . ( مثلا“ از فونت استاندارد ویندوز برای نمایش منو ها تبعیت نمیکند و میتوانید هر فونتی با هر کد پیجی بهش بدید ) . فکر میکنم اگر اصرار به فارسی یا right justified بودن منو داری از اونها استفاده کنی . یکی شون رو من توی یکی از همین سایتهای معروف دلفی که کامپوننت مفتی قربه الی الله ( خدا خیرشون بده ) میدن کش رفتم . سرچ کن پیدا میکنی فکر کنم اسمش big menu یا یه همچین چیزهائی بود .




..قانونه جنگلو زیر پا گذاشتی ...

----------


## وحید20

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

Procedure MyMessageDlg(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons);
begin
  with CreateMessageDialog(Msg, DlgType, Buttons) do
    try
        .
        .
        .
      font.Name := 'Titr';
      ShowModal;
    finally
      Free;
    end;

end;
در ضمن به جای نقطه چین می تونی هر بلاپی سر فرم پیغام بیاری حتی راست چین کردن آیکون

----------


## مهدی کرامتی

میتونی یک مثال کامل بزنی؟ مثلا همون راست چین کردن آیکون دیالوگ.

----------


## (امید)

سلام

اینم چیزه خوبیه  :wink: . عنوان پنجره رو هم می شه فارسی نوشت :

application.MessageBox

امید

----------


## وحید20

جناب اسیستان باسلام :
باید عرض کنم که منظور از راست چین کردن آیکون تغییر مکان قرار گیری آیکون بود مثلا می شود بجای نقطه چین در تابع بالا دستور زیر را نوشت

for I := 0 to (ComponentCount - 1) do  begin
         if Components[I] is Timage then
            Timage(Components[I]).Left := ClientWidth - 50;

----------


## وحید20

اضافه بر مطالب بالا تابع کاملی که من تو یکی از برنامه هام از آن استفاده کردم و در آن مکان آیکون و لیبل را تغییر دادم در زیر آمده است

Procedure MyMessageDlg(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons);
var
  I : Integer ;
begin
  with CreateMessageDialog(Msg, DlgType, Buttons) do
    try
      font.Name := 'Titr';
      for I := 0 to (ComponentCount - 1) do  begin
         if Components[I] is Timage then
            Timage(Components[I]).Left := ClientWidth - 50;
         If Components[I] is TLabel then
            TLabel(Components[I]).Left := 10;
      end;
      ShowModal;
    finally
      Free;
    end;

end;

ارادتمند همه دوستان

----------


## Tirdad

من زمانی که اطلاعات فارسی را از بانک اطلاعاتی بیرون می کشم و در listbox قرار میدم , روی سیستم خودم هیچ مشکلی ندارم ولی زمانی که برنامه رو به صورت exe به یک سیستم دیگه میبرم فارسی نشون نمیده
در حالیکه در قسمتهای دیگه هیچ مشکلی ندارم مثلا از بانک وقتی اطلاعات فارسی رو در یک label قرار میدم درست نشون میده.
لطف کنید و به دادم برسید.
دیگه واقعا کلافه شدم
 :cry:

----------


## Tirdad

از پیشنهادهایی که ندادید ممنونم.

خودم پیدا کردم و درست شد.

 :wink: 
 :P

----------


## MToloo

اگه یه جایی همون اولهای برنامه بنویسید:
Application.BiDiMode&#58;= bdRightToLeft;
بعد Messagedialog ها از راست به چپ میشن. البته MessageDialog های خود دلفی مشکل دارن. ولی MessageBox ویندوز یعنی Application.MessageBox درست کار میکنه.

----------


## media

salam
mikhastam karborde "help context " ro bedoonam 
age kasi midoone lotfan javab bede

----------


## mjdeveloper

این هم یه messagedlg کاملا فارسی با امکان راست چین و caption های فارسی برای دکمه ها

این تابع را به یک فرم در قسمت public اضافه کنید و هر جا خواستید استفاده کنید

Farsi message Dialog ------------------------------------
function msgdlg(CONST Msg:string; DlgTypt:TmsgDlgType;
  button:TMsgDlgButtons; Caption:ARRAY OF string;dlgcaption:string): integer;
var
aMsgdlg:TForm;
i:integer;
Dlgbutton:Tbutton;
Captionindex:integer;
begin
amsgdlg:= createMessageDialog(Msg,DlgTypt,button);
aMsgdlg.Caption:=dlgcaption;
aMsgdlg.BiDiMode:=bdRightToLeft;
Captionindex:=0;
for i:= 0 to amsgDlg.componentcount-1 Do
begin
if(amsgDlg.components[i] is Tbutton) then
Begin
dlgbutton:=Tbutton(amsgdlg.components[i]);
if Captionindex <= High(Caption) then
dlgbutton.caption:=caption[captionindex];
inc(captionindex);
end;
end;
  Result:=amsgdlg.Showmodal;
end;---------------------------------------------------

----------


## vcldeveloper

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

----------

