Caption Arama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Lord_Ares
Üye
Mesajlar: 1058
Kayıt: 15 Eki 2006 03:33
Konum: Çorlu

Caption Arama

Mesaj gönderen Lord_Ares » 02 Oca 2019 11:18

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.

Kod: Tümünü seç

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;

me_turan@mynet.com
Üye
Mesajlar: 29
Kayıt: 09 Eyl 2017 01:53

Re: Caption Arama

Mesaj gönderen me_turan@mynet.com » 03 Oca 2019 10:48

create yapmamışssın. ayrıca yapsan bile yeni bir panel oluşturdun. rengini değiştireceğin panelde yepyeni başka bir panel olur.

Kod: Tümünü seç

(hedefpanel.components[i] as Tpanel).color := clred; 
ile rahatca bulduğun panelin rengini değiştirebilirsin.

Kod: Tümünü seç

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;

Lord_Ares
Üye
Mesajlar: 1058
Kayıt: 15 Eki 2006 03:33
Konum: Çorlu

Re: Caption Arama

Mesaj gönderen Lord_Ares » 03 Oca 2019 12:45

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ı.

me_turan@mynet.com
Üye
Mesajlar: 29
Kayıt: 09 Eyl 2017 01:53

Re: Caption Arama

Mesaj gönderen me_turan@mynet.com » 03 Oca 2019 05:32

Denemek icin firsatim olmamisti. Belki yazim hatasi yapmisimdir. Yarin delphide deneyip calistigindan emin olurum.

Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3040
Kayıt: 17 Nis 2006 07:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Caption Arama

Mesaj gönderen sabanakman » 03 Oca 2019 05:41

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

Kod: Tümünü seç

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. - .

Lord_Ares
Üye
Mesajlar: 1058
Kayıt: 15 Eki 2006 03:33
Konum: Çorlu

Re: Caption Arama

Mesaj gönderen Lord_Ares » 04 Oca 2019 12:16

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.

Kod: Tümünü seç

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;

Cevapla