ورود

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



developing
دوشنبه 04 مرداد 1389, 19:07 عصر
با سلام.

حتما همه ی شما با تغییر زبان سیستم بوسیله ActivateKeyboardLayout آشنا هستید

بله من هم سوالم این نیست .

در ویندوز 7 یه برنامه وجود داره که در واقع مدیریت زمان رو انجام می ده و برای انجام کارها می تونی یک زمان مشخص کنی توی اون یک دفترچه تلفن هم هست.

بگذریم من نمی خوام این قابلیت ویندوز 7 رو توضیح بدم.

سوال من اینه که توی این برنامه Button هایی برای تغییر زبان وجود داره که زمانی که روی اونا کلیک می کنید زبان برنامه تغییر می کنه بدون اینکه زبان سیستم رو دستکاری کنه.

می خواستم ببینم می شه بدون نوشتن کدهایی که مثلا با زدن کلید "f" به جای اون "ب" رو بنویسه (مثل سایت سازمان سنجش) این کار رو انجام داد.

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

با تشکر از همه.

yaseriran
دوشنبه 04 مرداد 1389, 20:12 عصر
درود!


می خواستم ببینم می شه بدون نوشتن کدهایی که مثلا با زدن کلید "f" به جای اون "ب" رو بنویسه (مثل سایت سازمان سنجش) این کار رو انجام داد.

سوالتون واضح نیست!...
اگه منظورتون اینه که وقتی " f" را می زنی "ب" را درج کند، می شود این کار را کرد.


آزادی، آیا با زنجیر می آیی...

Pascal
دوشنبه 04 مرداد 1389, 23:09 عصر
شما قصد دارید این کار رو در صفحات وب انجام بدی یا در win32 application
اگر برای صفحات وب می خواهید ؟!
این فایل جاوا اسکریپت هست ،البته می توانید همین فایل را از سایت سنجش هم بگیرید چون من هم همین کار را کردم. راهنمای استفاده این فایل در خود فایل نوشته شده

bootshow
چهارشنبه 06 مرداد 1389, 00:05 صبح
من ازLoadKeyboardLayout ('00000429', 1)استفاده کردم و زبان سیستم را تغییر نمیدهد.

tdkhakpur
چهارشنبه 06 مرداد 1389, 00:16 صبح
به این شکل استفاده کنید.

LoadKeyboardLayout ('00000429', KLF_ACTIVATE);

developing
چهارشنبه 06 مرداد 1389, 10:30 صبح
با سلام.

قبلا از همتون تشکر می کنم اما سوال من اینه : بدون اینکه زبان سیستم رو تغییر بدم می خوام توی برنامم فارسی بنویسم.

اما یک شرط هم وجود داره که این کار رو بدون نوشتن کدِ تبدیل بنویسم.
(کد تبدیل:کدی است که اگر کاربر کلید "f" رو بزنه به جای اون کاراکتر "ب" رو می نویسه و اگر کلید "J" رو زد به جای اون کاراکتر "ت"و ...)

این کدی که شما نوشتید زبان سیستم رو هم تغییر می ده.

با تشکر

Felony
چهارشنبه 06 مرداد 1389, 10:59 صبح
در پست شماره 5 پاسخ شما داده شد ، با کدی که در همون پست ذکر شده زبان صفحه کلید برای برنامه جاری تغییر پیدا میکنه و وقتی فکوس از برنامه جاری خارج بشه زبان صفحه کلید به حالت پیش فرض بر میگرده .

tdkhakpur
چهارشنبه 06 مرداد 1389, 13:52 عصر
(کد تبدیل:کدی است که اگر کاربر کلید "f" رو بزنه به جای اون کاراکتر "ب" رو می نویسه و اگر کلید "J" رو زد به جای اون کاراکتر "ت"و ...)

این همان کاری هست که داخل نسخه های 9 به بالای دلفی در اختیار گذاشته شده و کد زیر ساده ترین الگوریتم تبدیلات یونیکد به حساب می آید


function ToUnicodeString(s:string):WideString;
var
p1 : pChar;
pw1:array[0..1024]of WideChar;
nLen1,nLen2:integer;
begin
p1:=PChar(s);
nLen1:=Length(s);
nLen2:=nLen1 * 2;
MultiByteToWideChar(CP_ACP , MB_COMPOSITE , p1 , nLen2 , @pw1 , nLen2);
Result:=WideString(pw1);
end;

MOJTABAATEFEH
چهارشنبه 06 مرداد 1389, 19:27 عصر
این همان کاری هست که داخل نسخه های 9 به بالای دلفی در اختیار گذاشته شده و کد زیر ساده ترین الگوریتم تبدیلات یونیکد به حساب می آید


function ToUnicodeString(s:string):WideString;
var
p1 : pChar;
pw1:array[0..1024]of WideChar;
nLen1,nLen2:integer;
begin
p1:=PChar(s);
nLen1:=Length(s);
nLen2:=nLen1 * 2;
MultiByteToWideChar(CP_ACP , MB_COMPOSITE , p1 , nLen2 , @pw1 , nLen2);
Result:=WideString(pw1);
end;


دوست عزیز کدی که نوشتید کاری انجام نمی ده

tdkhakpur
چهارشنبه 06 مرداد 1389, 21:50 عصر
کدی که نوشتید کاری انجام نمی ده
خب بستگی داره با این چه کد کاری انجام بدید؟
شما یک رشته را بهش میدید و این کد برای شما یونیکد رشته را بر میگرداند.

Felony
چهارشنبه 06 مرداد 1389, 22:00 عصر
شما یک رشته را بهش میدید و این کد برای شما یونیکد رشته را بر میگرداند.
خوب اخوی این چه ربطی به این سوال داره ؟ »

(کد تبدیل:کدی است که اگر کاربر کلید "f" رو بزنه به جای اون کاراکتر "ب" رو می نویسه و اگر کلید "J" رو زد به جای اون کاراکتر "ت"و ...)

ایشون میخوان مثلا وقتی کلید a فشار داده شد جاش توی Edit تو برنامشون بنویسه "ش" یعنی معادل فارسیش رو صفحه کلید ، برای این کار هم میشه تو رویداد keyPress کارکتر رو با یک دستور Case خوند و بعد تغییرش داد ، برای اعمال سراسری این کار هم میشه کلیدهای صفحه کلید رو در سطح برنامه هوک کرد و کارکتر ورودی رو تغییر داد .

MOJTABAATEFEH
جمعه 08 مرداد 1389, 10:02 صبح
خب بستگی داره با این چه کد کاری انجام بدید؟
شما یک رشته را بهش میدید و این کد برای شما یونیکد رشته را بر میگرداند.

دوست عزیز خب معلومه شما این کد رو برای یک کار نوشتید اونم سوال دوستمون و منم گفتم این کاری رو که می گید انجام نمی ده فکر نکنم به منظور دیگه ای نوشته شده باشه


موفق باشید

tdkhakpur
جمعه 08 مرداد 1389, 12:35 عصر
و منم گفتم این کاری رو که می گید انجام نمی ده

یعنی چی؟ مگه تبدیل نمیکنه؟

developing
سه شنبه 12 مرداد 1389, 19:07 عصر
با سلام.

دوستان با تشکر از همتون.

من نمی دونستم این سوال تبدیل به جنجال خواهد شد وگرنه هرگز نمی پرسیدم. با هم دعوا نکنید. حالا من یک شکری خوردم.

در ضمن من تحقیق کردم دیدم اون برنامه که در پست اول نوشتم با تغییر کد اسکی ورودی از صفحه کلید، کار فارسی سازی رو انجام می ده.

من می تونم و از قبل هم می تونستم توی کدهای ورودی در رویداد OnKeyPress تغییر ایجاد کنم که کاراکترهای فارسی رو بنویسم.

من فقط می خواستم بدونم بدون تغییر کدی که کیبورد در OnkeyPress به ما می ده می تونم تغییر زبان بدم یا نه؟ که طبق این بحث ها فهمیدم که نمی شه.

با تشکر از همه شما.

bmanfy
پنج شنبه 14 مرداد 1389, 00:02 صبح
البته درباره اين سوال شما يه چيزي وجود داره .
ميتوني تو برانامه روالي رو بنويسي كه هر كليدي رو كه دريافت كرد به هر چي دوست داري تغيير بدي .
كافيه اين روال تنها تو فرم اصلي برنامه به كا برده بشه . بعد يه دونه هم بايد از شي ApplicationEvents استفاده كني و كد زير رو براي رويداد OnMEssage اون بنويسي :



if Msg.message = WM_CHAR then //
begin
if Msg.wParam = 65 then
Msg.wParam := 200
//و الي اخر
end;


دستور بالا كد هاي رو تبديل ميكنه. مثلا حرف A رو به ب نبديل مي كنه .
البته كد بالا نسبت به حروف كوچيك و بزرگ فرق داره چون كد اسكي رو برميگردونه . و فكر ميكنم همين هم مورد نياز جنابعالي باشه .

موفق باشيد .