handle değeri bilinen kontrol nasıl elde edilir.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

handle değeri bilinen kontrol nasıl elde edilir.

Mesaj gönderen sabanakman »

İyi günler. Bildiğiniz üzere TApplicationEvents sınıfından bir nesneyi form üzerine yerleştirip onMessage olayına kod yazınca uygulamaya giden tüm windows mesajları buradan kontrol edilmektedir.

Kod: Tümünü seç

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
//
end;
gibi bir olay prosedürü içinde mesajı alan kontrolün handle numarası yanlış bilmiyorsam Msg.hwnd bilgisinden elde edilmektedir. Burada lazım olan bu Msg.hwnd bilgisi yerine mesajı alan kontrolün TControl sınıf türünden bilgisini nasıl elde ederiz?
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Tüm projedeki kontrolleri tarayarak bulabiliyorum ama çok kötü bir teknik olduğunu kabul etmek gerekiyor. Bunu daha kestirme bir yoldan elde etmek mümkün değilmidir acep :) ?

Kod: Tümünü seç

function BilesenTara(const KokBilesen: TComponent;const ArananHandle:THandle):TComponent;
var i,Hwnd:Integer;
begin
  if Assigned(KokBilesen) then begin
    if (KokBilesen is TWinControl) then Hwnd:=TWinControl(KokBilesen).Handle
    else if KokBilesen is TApplication then Hwnd:=TApplication(KokBilesen).Handle
    else Hwnd:=0;
    if (Hwnd<>0) and (Hwnd=ArananHandle) then Result:=KokBilesen
    else for i:=0 to KokBilesen.ComponentCount-1 do begin
      Result:=BilesenTara(KokBilesen.Components[i],ArananHandle);
    end;
  end else Result:=nil;
end;
kodu ile

Kod: Tümünü seç

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var AraBul:TComponent;
begin
  if Msg.message=WM_KEYDOWN then//incelemek istediğim mesaj
    AraBul:=BilesenTara(Application,Msg.hwnd);
    if Assigned(AraBul) then //buldu
    else {bulunamadı (nasıl oluyorsa artık :) herhalde runtime oluşturulan ve owner parametresi verilmeyen kontroller olsa gerek "TEdit.Create(nil) gibi." )}
  end;
end; 
Bu teknik çok yavaş ve hantal olacağı için hiç işime gelmiyor ama mecbur kaldık bir kere :) ama sağlam bir önerisi olana da her daim açığım.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba,
Bu konuda pek bilgim yok ama şöyle bir fonksiyon var FindControl(Handle:HWnd):TWinControl; ama bu sadece TWinControl sınıfını döndürüyor size TComponent gerekli sanırım.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Benim TComponent yazdığıma bakmayın, aslında Handle TWinControl sınıfının özelliğidir. Aradığım fonksiyon tamda budur herhalde galiba sanırsam. Çok sağolasın.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: handle değeri bilinen kontrol nasıl elde edilir.

Mesaj gönderen aslangeri »

s.a.
findcontrol kendi programımız içindeki bileşeni buluyor. Başka bir programdaki bileşeni bulmuyor. Acaba ben mi bulduramadım yoksa gerçektende bulmuyormu ?
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: handle değeri bilinen kontrol nasıl elde edilir.

Mesaj gönderen Battosai »

Konu ile alakalı delphi.about da bir örnek program vardı linkini bulamadım...Rapid'e attım buyrun...
http://rapidshare.com/files/178142913/c ... P.rar.html
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: handle değeri bilinen kontrol nasıl elde edilir.

Mesaj gönderen aslangeri »

s.a.
teşekkür ederim.
kodları inceledim.
iki programıda eleman kendisi yazmış. Benim diğer programın kodlarına müdahale etme şansım malesef yok. Ama sanki diğer programdan bana mesaj geliyormuş gibi yaparsam belki birşeyler çıkartabilirim.
Amacım bir griddeki bilgileri başka bir programa aktarmak. Gridin handle ını bi şekilde alıyorum. Ancak aldığım bu handle dan gride ulaşıp gösterdiği verileri şu aşamada alamıyorum.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla