activecontrol ile screen.activecontrol arasındaki fark

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
AliCinkilic
Üye
Mesajlar: 43
Kayıt: 01 Kas 2013 10:03

activecontrol ile screen.activecontrol arasındaki fark

Mesaj gönderen AliCinkilic »

Merhaba,

Base formda keydown da activecontrol e göre işlemler yapıyorum.
Ancak activecontrol nil gelirken screen.activecontrol dolu geliyor ve doğru objeyi getiriyor.
Arasındaki fark nedir?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: activecontrol ile screen.activecontrol arasındaki fark

Mesaj gönderen mrmarman »

activecontrol dediğimizde (self) yani üzerinde bulunduğunuz formdaki focus olunabilen nesneden okunacağı, screen.activecontrol dediğinizde formun kendisini de kapsayacak şekilde eğer aktif ise o formdan okunacağından geçerli olduğundandır.

Yani içinde sadece labellerden oluşan bir form varsa activecontrol nil olması kaçınılmaz, ama screen.activecontrol daima formun kendisi olacaktır.

Aksi halde içinde TEdit, TButton vs. focus olunabilecek bir nesne varsa screen.activecontrol de activecontrol de olmak üzere her ikisi de direkt üzerinde focus olunmuş nesneyi işaret edecektir.

Sana test etmen için basit bir kurgu :

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview := True;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
Var
  strTest : String;
begin
  if activecontrol <> nil
    then strTest := strTest + 'ActiveControl = ' + quotedstr( activeControl.Name ) +  ' '#13;
  if screen.activecontrol <> nil
    then strTest := strTest + 'Screen.ActiveControl = ' + quotedstr( screen.activeControl.Name ) +  ' '#13;
  showmessage( strTest );
end;
Dene ve sonuçları gözlemle. Gözlemlerken forma bir kaç button ve edit vs. koyup dene bir de bunları kaldırıp dene. Farkı göreceksiniz. :idea:

Unutmadan bazı üçüncü parti VCL paketleri panel içine form, formun içine başka şeyler gömüyor. Bu birleşik yapılarda da focus olunan nesne olduğu halde nesnenin kendisi panel, içi form olduğundan sıkıntı olabiliyor. Orada da screen.activecontrol iş görüyor.

Sorunuzu kullandığınız bileşenlerden bağımsız testler yapabileceğiniz gibi, TMS vs kullanyorsanız onunla da test ederek kendinize uygun bir çözümü tercih etmelisiniz. :idea:
Resim
Resim ....Resim
Cevapla