klavye de dil ayarları

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
futbolcu
Üye
Mesajlar: 129
Kayıt: 02 Tem 2003 08:33
Konum: Ankara

klavye de dil ayarları

Mesaj gönderen futbolcu »

Arkadaşlar merhaba,

Hemen aradığım her yerde;
Denetim masası uygulamaları için verilen örnekler şunlar:

WinExec('C:\WINDOWS\CONTROL.EXE TIMEDATE.CPL', sw_ShowNormal);
WinExec('C:\WINDOWS\CONTROL.EXE MOUSE', sw_ShowNormal);
WinExec('C:\WINDOWS\CONTROL.EXE PRINTERS', sw_ShowNormal);

Benim aradığım, kullanıcıya denetim masasına gitmeden, klavyesini değiştirecek bir kod yazmak:

Şöyle yazıyorum:
WinExec('C:\WINDOWS\CONTROL.EXE keyboard', sw_ShowNormal);

Gelen diyalog penceresi: Klavye özellikleri: "Hız" sekmesindeyim.
Buna bir tab tuşu eklesem dil ayarlarınadyım.. ama bu da yeterli değil.

yani bunu windowsun kısayol tuşlarındanda hallediyouz zaten.

şimdiden teşekkürler.
Bilgi çoğaldıkça krallar ölür
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7532
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Sen nasıl birşey yapmak istiyorsun? Klavye ayarları kısmında başka bir sekmeyi mi açmak istiyorsun?

Kolay gelsin.
Kullanıcı avatarı
futbolcu
Üye
Mesajlar: 129
Kayıt: 02 Tem 2003 08:33
Konum: Ankara

Mesaj gönderen futbolcu »

Hocam merhaba.
istediğim şey, kullanıcının program içerisinden değil de
windowstan klavye değişikliği yapmak. Yani kullanıcı Q ya da F klavye seçimini buton aracılığıyla yapacak.

selamlar
Bilgi çoğaldıkça krallar ölür
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7532
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Selam,

bir kod buldum ama denemedim.

Kod: Tümünü seç

var
  hklEN : HKL;
  hklTH : HKL;

procedure TForm1.FormCreate(Sender: TObject);
begin
  hklEN := LoadKeyboardLayout('00000409',0); // 1. klavye
  hklTH := LoadKeyboardLayout('0000041E',0); // 2. klavye
end;


in my procedure switch it by

     Handle := GetFocus;
     SendMessage(Handle,WM_INPUTLANGCHANGEREQUEST,0,hklTH);
or
     SendMessage(Handle,WM_INPUTLANGCHANGEREQUEST,0,hklEN);
Kolay gelsin.
Kullanıcı avatarı
futbolcu
Üye
Mesajlar: 129
Kayıt: 02 Tem 2003 08:33
Konum: Ankara

Mesaj gönderen futbolcu »

hocam teşekkürler.
dener sonucu yazarım.
Bilgi çoğaldıkça krallar ölür
Kullanıcı avatarı
karflake
Üye
Mesajlar: 222
Kayıt: 15 Haz 2003 03:57

Mesaj gönderen karflake »

Merhaba.

Pek güvenli bir yol değildir ama viewtopic.php?t=1587'deki unit'i kullanırsan istediğin pencereye istediğin tuşu yollayabilirsin. Mesela sekme değitirmek için Ctrl+Tab veya klavye seçimi için aşağı-yukarı yön tuşu gibi...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4733
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman »

Selam... @Admin'in verdiği kodu deneme fırsatım oldu... Thai diline göre ayarlı bir kodmuş... Araştırınca (Delphi IDE/Project/Version Info/Language başlığı) bulduğum Türkçe dili karşılığını ve kullanım kolaylığı açısından procedure şeklinde kodu yazıyorum...

- Kodun güzel tarafı, program sonlanınca klavye ayarı eski haline dönüyor... (kimine göre farklı değerlendirilebilir ama program dahilinde kalmasını sevdim...)

Kod: Tümünü seç

Procedure KlavyeDili(Dil:Integer);
Var
  hklTR : HKL;
  hklEN : HKL;
  Handle : THandle;
begin
  hklTR  := LoadKeyboardLayout('0000041F',0); // Türkçe
  hklEN  := LoadKeyboardLayout('00000409',0); // İngilizce
  Handle := GetFocus;
  Case Dil of
  0: SendMessage(Handle,WM_INPUTLANGCHANGEREQUEST,0,hklTR);
  1: SendMessage(Handle,WM_INPUTLANGCHANGEREQUEST,0,hklEN);
  end; // Case
end;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  KlavyeDili(0); // 0:Türkçe, 1:İngilizce
end;
- Örnek teşkil etsin diye internetten bulduğum dil kodları listesinden bir örnek ekliyorum... (Uzun ve şimdilik gereksiz bir liste. Bu yüzden küçük bir kısmını copy/paste yapıyorum...)

Kod: Tümünü seç

  LanguageIDTatar = $00000444;
  LanguageIDTelugu = $0000044A;
  LanguageIDThai = $0000041E;
  LanguageIDTibetan = $00000451;
  LanguageIDTsonga = $00000431;
  LanguageIDTswana = $00000432;
  LanguageIDTurkish = $0000041F;
  LanguageIDTurkmen = $00000442;
  LanguageIDUkrainian = $00000422;
  LanguageIDUrdu = $00000420;
  LanguageIDUzbekCyrillic = $00000843;
  LanguageIDUzbekLatin = $00000443;
  LanguageIDVenda = $00000433;
  LanguageIDVietnamese = $0000042A;
  LanguageIDWelsh = $00000452;
  LanguageIDXhosa = $00000434;
  LanguageIDZulu = $00000435;
Resim Resim
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7532
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

evet kalıcı olması için sanırım ActivateKeyboardLayout apisi kullanılıyor.

Kolay gelsin.
Kullanıcı avatarı
futbolcu
Üye
Mesajlar: 129
Kayıt: 02 Tem 2003 08:33
Konum: Ankara

Mesaj gönderen futbolcu »

Hocam hepinize ayrı ayrı teşekkür ederim.
Ben de bir yerde:

Kod: Tümünü seç

LoadKeyboardLayout(pChar('0001041f'), KLF_Activate); 

Q Klavyeyi aktive etmek için; 
LoadKeyboardLayout(pChar('0000041f'), KLF_Activate); 
Kodlarını buldum.
Bu kodları kullandığımda, win98 de sorun yok. program kapansa dahi windows yeniden başlayıncaya kadar seçilen klavye dönüşümü geçerliliğini koruyor. Win XP de işe yaramıyor.
Sadece Mustafa hocamın yazdığı kodlar XP de de işe yarıyor.
Fakat henüz F klavye için denemedim.

selamlar
Bilgi çoğaldıkça krallar ölür
Cevapla