Merhaba, hedef gösterdiğim bir panelin içerisindeki diğer panellerde caption değeri 1 olanı bulmak için aşağıdaki yapıyı kullandım. Fakat hiç bir tepki vermedi. Nerede hata yapıyorum anlamadım.
procedure TForm1.PaneliArastir(aAranan: String; HedefPanel: TComponent);
var
I : Integer;
Kutucuk : TPanel;
begin
for I := 0 to HedefPanel.ComponentCount - 1 do begin
if (HedefPanel.Components[I] is TPanel) then begin
Kutucuk := TPanel(HedefPanel.Components[I]);
if (Kutucuk.Caption = aAranan) then begin
Kutucuk.Color := clRed;
end else begin
Kutucuk.Color := clBtnFace;
end;
end;
end;
end;
procedure TForm1.PaneliArastir(aAranan: String; HedefPanel: TComponent);
var
I : Integer;
begin
for I := 0 to HedefPanel.ComponentCount - 1 do begin
if (HedefPanel.Components[I] is TPanel) then begin
if ((hedefpanel.components[i] as Tpanel).caption = aAranan) then begin
(hedefpanel.components[i] as Tpanel).Color := clRed;
end else begin
(hedefpanel.components[i] as Tpanel).Color := clBtnFace;
end;
end;
end;
end;
Cevap için teşekkürler , amacım tasarım anında oluşturmuş olduğum paneller içinde caption değerini aratmak . Ama sanırım yanlış kullandım. Örneğinizi inceliyorum fakat onda da malesef olmadı.
Panelleri kodla create ettiyseniz ve oluşturduğunuz bu panellerde Owner parametresi HedefPanel vermediyseniz kodunuz çalışmayacaktır. Eğer delphi tasarım ekranından oluşturduysanız Owner form olacağından yine çalışmayacaktır. Bir (WinControl olan) panelin içindekileri aramak için ComponentCount Components özelliklerini değil, ControlCount Controls özelliklerini kullanmak gerekmektedir. Böylelikle o kontrolün içinde görünen nesnelere erişmiş olursunuz. Yani
procedure TForm1.PaneliArastir(aAranan: String; HedefPanel: TComponent);
var
I : Integer;
Kutucuk : TPanel;
begin
for I := 0 to HedefPanel.ControlCount - 1 do begin
if (HedefPanel.Controls[I] is TPanel) then begin
Kutucuk := TPanel(HedefPanel.Controls[I]);
if (Kutucuk.Caption = aAranan) then begin
Kutucuk.Color := clRed;
end else begin
Kutucuk.Color := clBtnFace;
end;
end;
end;
end;
şeklindeki bir düzenleme işinizi görebilir. Tabi burada panel içinde panel onun da içinde panel durumu söz konusu ise bu da yeterli olmayabilir ama iç içe bir yapı yoksa bu düzeltme çalışacaktır.
Şaban Şahin AKMAN
_________________ Derin olan kuyu değil kısa olan iptir. - .
Cevap için teşekkürler, aşağıdaki şekilde bir deneme yaptım. Bu haliyle çalışıyor. Eksik tarafı hedef bir panel gösterip alt panellerinde arama yapamamış olmam ama sanırım buda işimi görecektir. Sıkıntı çıkarırmı henüz bilmiyorum. Panellerin parentbackgroundlarını false yaptığımda aşağıdaki kod ile şuanlık sonuç aldım.
var
x:integer;
begin
for x := 0 to ComponentCount -1 do begin
if Components[x] is TPanel then begin
if TPanel(Components[x]).Caption= Edit1.Text then TPanel(Components[x]).Color:=clred;
end;
end;
end;