Merhaba. Sorunuzun cevabı, CM_VISIBLECHANGED component mesajını dinlemek üzerine olacaktır. Aşağıdaki gibi kullanabilirsiniz:
type
TFrame3 = class(TFrame)
private
{ Private declarations }
public
{ Public declarations }
procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
end;
implementation
{$R *.dfm}
procedure TFrame3.CMVisibleChanged(var Message: TMessage);
begin
Application.MainForm.Caption := 'Visible Changed ' + TimeToStr(Time);
end;
Ancak, sadece kod paylaşmayı sevmediğim için bu sonuca nasıl ulaştığımızı da anlatmak isterim müsaadeye binaen.
Öncelikle TFrame'in kaynak kodlarına gidilir ve bir Frame nesnesini gizleyip göstermeye yarayan metodların (Hide, Show) nerede olduklarına ve ne yaptıklarına bakmaya çalışılır.
Görüldüğü gibi, ilgili sınıf TCustomFrame'den türüyor ve ne TFrame sınıfında ne de TCustomFrame sınıfında Hide ve Show metodları bulunmuyor. Bu durumda; kod editöründe iken, Hide ya da Show metodunun tanımlı olduğu yeri bulabilmek için; yazdığınız kod üzerinde iken Alt + Yukarı Ok tuşlarına basabilir ve ilgili tanıma gidebilirsiniz.
Görüldüğü gibi; Show ve Hide metodları aslında ilgili sınıfın Visible property'sinin değerini değiştiriyor. Bu durumda; bu property'nin setter'ına bakmamız gerekiyor.
Görüldüğü üzere, Visible property'sinin her değişiminde ilgili kontrole CM_VISIBLECHANGED mesajı gönderiliyor.
Umarım faydalı olmuştur.