PDA

View Full Version : MessageBox



Harry
دوشنبه 09 تیر 1382, 09:40 صبح
می خواستم با دلفی برنامه ای بنویسم تا بوسیله آن بتوانم MessageBox را تغییر دهم . یعنی نوشته دکمه های OK,Cancel,Ignore و غیره را فارسی کنم و رنگ آن ها را نیز تغییر دهم

hosseinzadeh
سه شنبه 10 تیر 1382, 10:16 صبح
فکر کنم چون اینها اجزای استاندارد ویندوز هستند باید dll های خود ویندوز را تغییر دهید.البته من در مورد dll آن اطلاعی ندارم اما اگر بخواهید اجزایی مثل dial up networking را فارسی کنید <می توانید از طریق تغییر Rasapi32.dll این کار را انجام دهید(در ویندوز 98)
یا برای منوها از shell32.dll و برای دیالوگها از commdlg32.dll.
برای تغییر هم می توانید از برنامه هایی مانند exe Scope (که کاملا با دلفی نوشته شده است)
استفاده کنید.

JavanSoft
سه شنبه 10 تیر 1382, 12:58 عصر
یا اینکه بی خیال این قضیه بشی و خودت 1 Message Box خوشگل بنویسی

Mohammad_Mnt
سه شنبه 10 تیر 1382, 20:29 عصر
اتفاقا می شه این کار رو انجام داد . آقای دلفی اسیستانت بلده ! یکی از فایل های دلفی رو باید فارسی کنی همین :wink:

پنج شنبه 12 تیر 1382, 22:07 عصر
این کار رو می تونین با تغییر دو فایل "Dialogs.pas" و "Consts.pas" که در مسیر Source\Vcl قرار دارند انجام بدین ( در شاخه ای که دلفی را نصب کردین )
فایل Consts شامل متغییرهای ثابتی است که در دلفی استفاده می شود، برای تغییر عنوان کلیدهای MessageBox باید متغییرهایی را که با SMsgDlg شروع می شوند رو تغییر بدین مثلا

SMsgDlgWarning = 'Warning';
و از فایل Dialogs هم برای بعضی از تغییرات دیگه، مثلا تغییر فونت دیالوگ می شه استفاده کرد.
تنها لازمه که یک بار تغییراتتون رو بصورت دستی و نه برنامه نویسی انجام بدین، تا دیالوگ شما فارسی بشه !

Mohammad_Mnt
جمعه 13 تیر 1382, 05:56 صبح
آفرین به شیما !
هری جان همینه 8)

mohammad_mahdawi
جمعه 14 شهریور 1382, 14:49 عصر
این کار رو می تونین با تغییر دو فایل "Dialogs.pas" و "Consts.pas" که در مسیر Source\Vcl قرار دارند انجام بدین ( در شاخه ای که دلفی را نصب کردین )
فایل Consts شامل متغییرهای ثابتی است که در دلفی استفاده می شود، برای تغییر عنوان کلیدهای MessageBox باید متغییرهایی را که با SMsgDlg شروع می شوند رو تغییر بدین مثلا

SMsgDlgWarning = 'Warning';
و از فایل Dialogs هم برای بعضی از تغییرات دیگه، مثلا تغییر فونت دیالوگ می شه استفاده کرد.
تنها لازمه که یک بار تغییراتتون رو بصورت دستی و نه برنامه نویسی انجام بدین، تا دیالوگ شما فارسی بشه !

----------------------------------------------------
سلام

من تغییرات بالا را اعمال کردم ولی هیچ تاثیری نداشت(ضمن اینکه در چند سایت دیگر هم مطالب مشابهی را دیدم وانجام دادم که باز هم تاثیری نداشت.)

آیا بغیر اینها کار دیگری هم باید انجام داد؟
اگر کسی اطلاعاتی دارد لطفا کمک کند.

Hidarneh
جمعه 14 شهریور 1382, 14:54 عصر
برای اینکه تغییرات مورد نظر اعمال بشن باید فایلهای dcu‌مربوطه رو پاک کنی از شاخه lib و بعد این فایلهای جدید رو توی شاخه lib یا یه جایی که به عنوان search path معرفی کردی بذاری تا دلفی کامپایلشون کنه .

houshmand
شنبه 15 شهریور 1382, 00:57 صبح
:idea: یک راه راحت تر بدون نیاز به پاک کردن فایلها این است
‍Project\options...
از برگه Directories/Conditionals
به Search path مقدار
$(DELPHI)\Source\Vcl
(یا مسیر ...\Borland\Delphi5\Source\Vcl)
رابدهید
و بعد از هر بار تغییر برنامه را دوباره Build کنید
<<Delphi 5>>
//××××××××××××××××××
:idea: با این کار حتی می توانید از کد های VCL نیز اجرای خط به خط بگیرید!

SyntaxCheck
شنبه 15 شهریور 1382, 01:15 صبح
سلام دوستان
البته راه بهتر و اصولی هم وجود داره. خود مسیج باکس هم قابل تغییر هست. شما میتونید با تابع CreateMessageDialog مسیج باکس ایده آل خودتون رو درست کنید با فرم استاندارد ویندوز و با همه چیز از جمله آیکون کوچولوی خوشگل که همه میشناسیمش و البته راست به چپ. از اونجایی که نمیخوام پرچونگی کنم با یه مثال صحبتم رو تموم میکنم. تابع زیر یک مسیج باکس با دو کلید Cancel و Ok البته با کپشن فارسی و کاملا راست به چپ درست میکنه. لازم به ذکره که این تابع قابل تعمیم هست که بیشتر از یک کلید داشته باشه. اگر سوال یا مجهولی بود در خدمتم:


function FarsiMsg(m:string;mtype:TMsgDlgType):TModalResult;
var
fd1:tform;
begin
fd1:=CreateMessageDialog(m,mtype,[mbok,mbno]);
fd1.BiDiMode:=bdrighttoleft;
fd1.Caption:='سلام';
fd1.Font.Name :='Tahoma';
fd1.Font.Size := 10;
tbutton(fd1.Components[2]).caption:='انصراف' ;
tbutton(fd1.Components[3]).caption:='تایید';
result:=fd1.ShowModal;
fd1.Free;
end;

(امید)
شنبه 15 شهریور 1382, 07:47 صبح
:تشویق: :تشویق: :تشویق:

احسنــــــــــت علی جان

mohammad_mahdawi
شنبه 15 شهریور 1382, 14:43 عصر
سلام

از همه کسانی که جواب بنده را دادند ممنونم.

SyntaxCheck عزیز ! کد شما اجرا شد ولی تنها مشکلی که دارد(شاید فقط در کامپیوتر من ) این است که Caption فرم فارسی نمیشود. البته برای اطلاع شما بگویم که OS کامپیوتر من Windows Xp فارسی میباشد. که delphi در این محیط فارسی را پشتیبانی نمیکند . و من برای فارسی نویسی از برنامه IPT 5 ساخت شرکت برنارایانه استفاده میکنم که چندان هم راضی نیستم چرا که هنگام نوشتن چه در Object Inspector و چه در Editor دلفی حروف نامشخصی را نشان میدهد و مثل کد شما صراحتا نمیتوان نوشت مثلا : 'انصراف' و فقط در هنگام اجرای برنامه روی فرمهای مربوط میتوان آنها را خواند.
آیا شما روش دیگری برای فارسی نویسی دارید؟
اگر در این زمینه هم بنده را راهنمایی فرمایید تا مشکل Caption را حل کنم ممنون
میشوم.

SyntaxCheck
شنبه 15 شهریور 1382, 16:56 عصر
ُسلام
دوست عزیز ویندوز اکس پی با فارسی کاملا سازگاره و مشکلی نداره همچنین دلفی کاملا فارسی رو پشتیبانی میکنه.برای فارسی کردن ویندوز من ذکر چند تا نکته رو بیفایده نمیدونم. شما هم موارد زیر رو کنترل کنید:
1) به کنترل پنل برید و Regional & Language Options رو انتخاب کنید.
2) در برگه Regional Options دو تا کامبو باکس میبینید.اولی باید Farsi و کامبوباکس انتهای صفحه باید Iran رو نشون بده.
3) در برگه Languages در قسمت Supplemental Language Support دو تا چک باکس وجود داره.چک باکس اول باید تیک خورده باشه. در همین برگه در قسمت Text Services and input languages با فشار دکمه Details یک پنجره باز میشه که تنزیمات مربوط به کیبورد رو میتونید انجام بدید. و اگر میخواهید که تایپ فارسی رو داشته باشید باید FA در قسمت Installed Services دیده بشه.یه چیزی شبیه زیر و البته نه بصورت رنگی :wink: :

EN English(United States) Keyboard US
FA Farsi Keyboard Farsi

4) در برگه Advanced و در قسمت Languages for non-Unicode programs یک کامبو باکس وجود داره که باید Farsi رو نشون بده.(این قسمت خیلی مهمه)

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

mohammad_mahdawi
شنبه 15 شهریور 1382, 18:39 عصر
سلام!
بالاخره موفق شدم!!
SyntaxCheck عزیز! از راهنمایی شما بینهایت ممنونم. ظاهرا کمی ناشی گری کرده بودم وتنظیمات Control Panel رو خوب انجام نداده بودم.
خب! برای هر تازه کاری پیش میاد دیگه. :oops:

mostafa612003
شنبه 24 آبان 1382, 10:41 صبح
سلام
من در ویندوز 2000 کارمی کنم تنظیمات مربوط به فارسی کردن ویندوز را نیز انجام دادم
در محیطهای دیگر با فارسی نوشتن مشکلی ندارم ولی در دلفی نمی توانم فارسی بنویسم

متشکرم

jirjirakk
شنبه 24 آبان 1382, 21:13 عصر
مرسی علی آقا خیلی با حال بودش :mrgreen:

DataMaster
یک شنبه 25 آبان 1382, 08:31 صبح
وای سوال چی بود به کجا ختم شد
حالا منم اون تابعی که آقای syntaxheck داده بودند رو این جوری در آورد فکر کنم نحوه فراخوانی اون راحت تر باشه

function FMessageDlg(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons): Integer;
begin
with CreateMessageDialog(Msg, DlgType, Buttons) do
begin
FlipChildren(True);
BiDiMode := bdRightToLeft;
Result := ShowModal;
end;
end;
دست آخر ما هم یاد نگرفتیم توی این سایت درست بنویسیم :cry:
اصلاح شده توسط مشاطان