Arkadaşlar
Projedeki tüm formlarda basılan tuşları okuyabildiğimiz bir yer var mı?
yani formun onkeypress i gibi olacak ama tüm projeyi kapsayacak
Tüm Formlarda Tuşları Okumak
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Re: Tüm Formlarda Tuşları Okumak
Keyboard Hook yapabilirsiniz ama keyboard hook win7 de bazı sıkıntılara yol açabilir...veya bir procedure yazarak bütün formların onkeypress olayına atama yapabilirsiniz. Formları lazım olduğunda çağırdığınızı varsayarsak form oluşturma kodunda bu atama yapılabilir zahmetsiz olur.
Re: Tüm Formlarda Tuşları Okumak
Komponentin Adını Algılamak
Bu uygulama farenin tıkladığı komponentin adını döndürür FindControlAtPos uygulamasını global olarak tanımlarsanız diğer komponentler içinde kullanabilirsiniz.
Komponentin OnMouseUp olayına yazın.
Bu uygulama farenin tıkladığı komponentin adını döndürür FindControlAtPos uygulamasını global olarak tanımlarsanız diğer komponentler içinde kullanabilirsiniz.
Kod: Tümünü seç
function FindControlAtPos: TWinControl;
var
Pt: TPoint;
begin
GetCursorPos(Pt);
Result := FindControl(WindowFromPoint(Pt));
end;
Kod: Tümünü seç
procedure TForm1.GenericMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
TWC: TWinControl;
begin
TWC := FindControlAtPos;
{hangi sınıf içindeyiz}
Showmessage('Buradayız: ' + TWC.ClassName);
{Boşluk}
TWC.Visible := False;
Sleep(150);
TWC.Visible := True;
end;
Re: Tüm Formlarda Tuşları Okumak
Battosai
Evet aslında tüm formların onkeypress olayına atama yapılabilir ama bennim projemde 100 lerce form var ve bunları bazılarında onkeypress çalışıyor.
RamazanG
Dostum benim istediğim tam olarak o değil yada ben senin yazdığın tam anlayamadım
Evet aslında tüm formların onkeypress olayına atama yapılabilir ama bennim projemde 100 lerce form var ve bunları bazılarında onkeypress çalışıyor.
RamazanG
Dostum benim istediğim tam olarak o değil yada ben senin yazdığın tam anlayamadım
Re: Tüm Formlarda Tuşları Okumak
Ana forma bir adet TApplicationEvent bileşeni atınız. OnMessage olayına aşağıdaki örnek kodu uygulayın kendi sisteminize uyarlayın. Projenizdeki tüm keydown olayları için işlem tetiklenecektir.
örnekte basılan tuşları memoya ekliyor...
Kod: Tümünü seç
procedure Tform1.AppEvent1Message(var Msg: tagMSG; var Handled: Boolean);
function GetChar(Key: Word): string;
var
keyboardState: TKeyboardState;
asciiResult: Integer;
begin
GetKeyboardState(keyboardState) ;
SetLength(Result, 2) ;
asciiResult := ToAscii(key, MapVirtualKey(key, 0), keyboardState, @Result[1], 0) ;
case asciiResult of
0: Result := '';
1: SetLength(Result, 1) ;
else
Result := '';
end;
end;
begin
if Msg.message=WM_KEYDOWN then
memo1.Lines.Add(GetChar(Msg.wParam));
end;
Re: Tüm Formlarda Tuşları Okumak
Dostum Sağ olasın tam olarak istediğim buydu
birde (Ctrl) - (Alt) -(ALt+A) - .. gibi tuşları eklemek istedim ama yapamadım bu konuda yardımcı olabilir misin ?
Aslında Klavyeden girilen tüm her şeyi kaydedip sonra istenildiği zaman kayıtlı tuşları oynatmak istiyorum
tabi burda Alt+E,Ctrl+K... gibi aynı anda basılan tuşlarıda bu şekilde göndermem gerekiyor
birde (Ctrl) - (Alt) -(ALt+A) - .. gibi tuşları eklemek istedim ama yapamadım bu konuda yardımcı olabilir misin ?
Aslında Klavyeden girilen tüm her şeyi kaydedip sonra istenildiği zaman kayıtlı tuşları oynatmak istiyorum
tabi burda Alt+E,Ctrl+K... gibi aynı anda basılan tuşlarıda bu şekilde göndermem gerekiyor
- sabanakman
- Kıdemli Üye
- Mesajlar: 3077
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: Tüm Formlarda Tuşları Okumak
Ctrl, Shift ve Alt gibi çoklu tuş kombinasyonları da kullansanız sonuçta bunların herr biri ayrı bir mesaj olarak gidecektir. Yapmanız gereken giden mesaja göre değerleri ayarlayıp çalıştırmak olacaktır.
Kod: Tümünü seç
var
tCtrl,tShift,tAlt:Boolean;
const
VK_K=Ord('K');
VK_A=Ord('A');
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
if Msg.message=WM_KEYDOWN then begin //--->
case Msg.wParam of
VK_CONTROL:tCtrl:=True;
VK_SHIFT:tShift:=True;
VK_MENU:tAlt:=True;
end;
end;
if Msg.message=WM_KEYUP then begin //--->
case Msg.wParam of
VK_CONTROL:tCtrl:=False;
VK_SHIFT:tShift:=False;
VK_MENU:tAlt:=False;
end;
if (Msg.wParam=VK_A) and tCtrl and tAlt then
ListBox1.Items.Add('Ctrl+Alt+A');
if (Msg.wParam=VK_K) and tCtrl then
ListBox1.Items.Add('Ctrl+K');
end;
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .