Yaptığım ekran klavyesinde türkçe karakter sorunu...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
BLuE_ALoNE
Üye
Mesajlar: 47
Kayıt: 26 Eki 2006 08:30

Yaptığım ekran klavyesinde türkçe karakter sorunu...

Mesaj gönderen BLuE_ALoNE »

merhaba arkadaşlar hemen hemen tüm kaynakları araştırdım. SndKey32tr.pas dosyasını inceledim. bir yerlerden kodlar buldum ve bir ekran klavyesi hazırladım. Tab, Enter, Ara Tuşu gibi tuşları ve türkçe olmayan tuşları başka uygulamalara gönderiyorum. ancak ü,ş,İ gibi türkçe karakterleri bir türlü yazdıramadım. amacım dokunmatik ekranda kullanıcı bilgileri girerken ekran klavyesini çağırması ve ekranda dokunarak arka planda çalışan programa bastığı tuşun karakterinin yazılması, yardımlarınızı bekliyorum. yaptığım tüm Unitin kodlarını gönderiyorum.

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus, cxLookAndFeelPainters, cxButtons;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    BtnKare: TcxButton;
    Btn1: TcxButton;
    Btn2: TcxButton;
    Btn3: TcxButton;
    Btn4: TcxButton;
    Btn5: TcxButton;
    Btn6: TcxButton;
    Btn7: TcxButton;
    Btn8: TcxButton;
    Btn9: TcxButton;
    BTn0: TcxButton;
    BtnBeta: TcxButton;
    BtnUtire: TcxButton;
    BtnBack: TcxButton;
    BtnTab: TcxButton;
    BtnQ: TcxButton;
    BtnW: TcxButton;
    BtnE: TcxButton;
    BtnR: TcxButton;
    BtnT: TcxButton;
    BTnZ: TcxButton;
    BtnU: TcxButton;
    Btni: TcxButton;
    BtnO: TcxButton;
    BtnP: TcxButton;
    Btnuu: TcxButton;
    BtnPlus: TcxButton;
    cxButton41: TcxButton;
    BtnA: TcxButton;
    BtnS: TcxButton;
    BtnD: TcxButton;
    BtnF: TcxButton;
    BtnG: TcxButton;
    BtnH: TcxButton;
    BtnJ: TcxButton;
    BtnK: TcxButton;
    BtnL: TcxButton;
    Btnoo: TcxButton;
    Btnaa: TcxButton;
    BtnEnter: TcxButton;
    cxButton54: TcxButton;
    BtnShiftL: TcxButton;
    BTnY: TcxButton;
    BtnX: TcxButton;
    BtnC: TcxButton;
    BtnV: TcxButton;
    BtnB: TcxButton;
    BtnN: TcxButton;
    BtnM: TcxButton;
    BtnNokta: TcxButton;
    BtnVirgul: TcxButton;
    Btntire1: TcxButton;
    BTnShiftR: TcxButton;
    BtnCtrlL: TcxButton;
    BtnAra: TcxButton;
    BtnCtrlR: TcxButton;
    BtnAlt: TcxButton;
    BtnAltGr: TcxButton;
    BtnWinR: TcxButton;
    BtnWinL: TcxButton;
    BTnMs: TcxButton;
    BtnEsc: TcxButton;
    BtnF1: TcxButton;
    BtnF2: TcxButton;
    BtnF3: TcxButton;
    BtnF4: TcxButton;
    BtnF5: TcxButton;
    BtnF6: TcxButton;
    BtnF7: TcxButton;
    BtnF8: TcxButton;
    BtnF9: TcxButton;
    BtnF10: TcxButton;
    BtnF11: TcxButton;
    BtnF12: TcxButton;
    procedure Timer1Timer(Sender: TObject);
    procedure BtnTuslarClick(Sender: TObject);
    procedure BtnCapslockClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var
a:PChar;

function SendKeys(ClassOrCaption:PChar;Keys:array of Integer):Boolean;
var
hW:HWND;
Ix:Integer;
begin
hW:=FindWindow(ClassOrCaption,nil);
if hW<=0 then hW:=FindWindow(nil,ClassOrCaption);
Result:=hW>0;
if Result then
begin
Result:=SetForeGroundWindow(hW);
if not Result then Exit;
for Ix:=0 to High(Keys) do KeyBd_Event(Keys[Ix], 0, 0, 0);
for Ix:=High(Keys) downto 0 do Keybd_Event(Keys[Ix], 0, KEYEVENTF_KEYUP, 0);
end;
end;

function ActiveClass: string;
var
Handle: THandle;
Title: string;
begin
Result := '';
Handle := GetForegroundWindow;
if Handle <> 0 then
begin
SetLength(Title, 300);
GetClassName(Handle, PChar(Title), 300);
Result := TrimRight(Title);
end;
end;
function StringToCaseSelect(Selector : string;CaseList: array of string): Integer;
var cnt: integer;
begin
   Result:=-1;
   for cnt:=0 to Length(CaseList)-1 do
begin
     if CompareText(Selector, CaseList[cnt]) = 0 then
     begin
       Result:=cnt;
       Break;
     end;
   end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if not Application.Active then
a:=pchar(ActiveClass); //uygulama aktif değil iken diğer uygulamanın adını alıyorum.
end;

procedure TForm1.BtnTuslarClick(Sender: TObject);//tüm tuşların onclick olayı buraya bağlı
var deger:String;
    tus_kodu:Integer;
begin
  deger:=AnsiUpperCase((sender as TcxButton).Caption); //butondaki karakteri alıyorum ve büyük harfe dönüştürüyorum. A,B,C,Ü,Ş gibi
  tus_kodu:=ord(deger[1]);
  case StringToCaseSelect(deger,['ENTER','','TAB','BCKSPC','Ü']) of //case komutunun geliştirilmiş hali butonların isimleri farklı olanları alıp o tuşun acsii kodunu gönderiyorum
  0 : SendKeys(a,[13]);
  1 : SendKeys(a,[32]);
  2 : SendKeys(a,[9]);
  3 : SendKeys(a,[8]);
  4 : SendKeys(a,[154]);
  else
  SendKeys(a,[ord(deger[1])]);
  end;
end;
end;

end.
BLuE_ALoNE
Üye
Mesajlar: 47
Kayıt: 26 Eki 2006 08:30

Re: Yaptığım ekran klavyesinde türkçe karakter sorunu...

Mesaj gönderen BLuE_ALoNE »

BU konuda bir fikri olan yok mu lütfen yardım edin? alt tuşunun ascii kodu var mı acaba?
Cevapla