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?
activecontrol ile screen.activecontrol arasındaki fark
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 43
- Kayıt: 01 Kas 2013 10:03
Re: activecontrol ile screen.activecontrol arasındaki fark
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 :
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.
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.
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;

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.
