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 07:33
Konum: Ankara

klavye de dil ayarları

Mesaj gönderen futbolcu » 27 Şub 2004 01:52

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: 7506
Kayıt: 09 Haz 2003 11:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek » 27 Şub 2004 02:04

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 07:33
Konum: Ankara

Mesaj gönderen futbolcu » 27 Şub 2004 02:26

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: 7506
Kayıt: 09 Haz 2003 11:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek » 27 Şub 2004 02:39

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 07:33
Konum: Ankara

Mesaj gönderen futbolcu » 27 Şub 2004 02:52

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 02:57

Mesaj gönderen karflake » 27 Şub 2004 11:23

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: 4731
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Mesaj gönderen mrmarman » 28 Şub 2004 12:57

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: 7506
Kayıt: 09 Haz 2003 11:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek » 28 Şub 2004 03:23

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 07:33
Konum: Ankara

Mesaj gönderen futbolcu » 28 Şub 2004 05:33

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