Treeview ile ilgili [çözüldü ]

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Treeview ile ilgili [çözüldü ]

Mesaj gönderen barutali »

treeview in alt dallarının yazı tipini bold olarak yapıyorum tıklayınca sadece tıkladığım dalın bold dan normal hale gelmesini istiyorum fakat bi türlü beceremedim :( hepsi bold dan normal oluyor.
En son barutali tarafından 10 Eki 2007 08:48 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
amatör küme programcı :D
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
öncelikle forum kurallarına riayet etmenizi ve sorunuzun başlığını uygun bir şekilde değiştirmenizi rica ediyorum.
sonra müneccim olmadığımızı tekrar hatırlatıp yaptığınız ve olmayan kodları göndermenizi ona göre elimizden gelen yardımı yapaağımızı hatırlatmak istiyorum
teşekkür ederim.
iyi çalışmlar.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

// Al sana hazırladığım ve birden fazla seçenek sunacak komple test kodu...

Resim

// Evir çevir kullan.

Kod: Tümünü seç

procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  // Al sana hazırladığım ve birden fazla seçenek sunacak komple test kodu...
  // Evir çevir kullan.
  With TTreeView(Sender).Canvas do begin
    If ( cdsSelected in state ) then begin // Seçili ise
        Brush.Color := clWhite; // Beyaz ile dolgu hazırlık yapıyoruz..
        FillRect ( Node.DisplayRect(True) );

        Pen.Color   := clRed; // Kırmızı Çerçeve çiziyoruz...
        Rectangle( Node.DisplayRect(True) );

        Font.Style  := []; // Font şekillendirip yazıyoruz...
        Font.Color  := clBlue;
        TextOut( Node.DisplayRect(True).Left + 2, Node.DisplayRect(True).Top + 1, Node.Text );
        DefaultDraw := False;
      end else begin
        Font.Style := [fsBold]; // Normal diğer hallerde sadece BOLD diyoruz...
      end; // If
  end; // With
end;
Resim
Resim ....Resim
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Mesaj gönderen barutali »

hocam yardımınız için teşekkür ederim biliyorum en sonunda beni siteden banlattırcaksınız ama tıklayınca tıkladıklarımın normal diğerlerinin bold olarak kalmasını nasıl sağlayabiliriz.
amatör küme programcı :D
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Bu yaptığım neye benziyor... ?
Diğerleri bold tıkladığın bold değil
Resim
Resim ....Resim
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Mesaj gönderen barutali »

evet hocam tıkladığım zaman normal oluyor. Ama ben tıklananların normal olarak kalmasını istiyorum tıklamadıklarım sadece bold olarak kalcak tıkladıklarım normal olcak şeklinde sormustum.
amatör küme programcı :D
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

sanırım arkadaş html linklerdeki gibi visited color yani daha önce o linke tıklanmışsa rengi farklı gözüküyor.onun gibi bişi soruyor ama nasıl yapılır bilgim yok...
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

lanetli yazdı:evet hocam tıkladığım zaman normal oluyor. Ama ben tıklananların normal olarak kalmasını istiyorum tıklamadıklarım sadece bold olarak kalcak tıkladıklarım normal olcak şeklinde sormustum.
onada sen kasacaksın birazcık...
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@serkan'ın dediği gibi bişey istiyorsan o da kolay.

- Her tıkladığın ITEM adı verilen dal ucunun STATEINDEX adı verilen durum kaydı vardır. Sen her tıklananda bu durum imlecinin değerini değiştirirsin. Bu birinci ayağı. Ekranda koyu veya açık gösteren verdiğim kodda da bu item değeri varsayılan ilk değer ise koyu gösterecek şekilde IF bloğunu yeniden düzenlersen istediğin olur.

- Hadi acemiliğine verip senin için bu seferlik de düzenliyorum ama bir dahaki sefer koyun kendi bacağından asıldığını unutma kavramazsan aynısını bir daha yapmak istersen yine bize sormak zorunda kalırsın. İlki öğrenesin diye yardımcı oluyoruz ancak ikincisinde hiç bakmayız ona göre...

Kod: Tümünü seç

procedure TForm1.TreeView1Click(Sender: TObject);
begin
  If (TTreeView(Sender).Selected <> Nil)
    then TTreeView(Sender).Selected.StateIndex := 1;
end;

Kod: Tümünü seç

procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  // Al sana hazırladığım ve birden fazla seçenek sunacak komple test kodu...
  // Evir çevir kullan.
  With TTreeView(Sender).Canvas do begin
    If ( cdsSelected in state ) OR (Node.StateIndex > 0) then begin // Seçili ise
        Brush.Color := clWhite; // Beyaz ile dolgu hazırlık yapıyoruz..
        FillRect ( Node.DisplayRect(True) );

        //Pen.Color   := clRed; // Kırmızı Çerçeve çiziyoruz...
        //Rectangle( Node.DisplayRect(True) );

        Font.Style  := []; // Font şekillendirip yazıyoruz...
        Font.Color  := clBlue;
        TextOut( Node.DisplayRect(True).Left + 2, Node.DisplayRect(True).Top + 1, Node.Text );
        //DefaultDraw := False;
      end else begin
        Font.Style := [fsBold]; // Normal diğer hallerde sadece BOLD diyoruz...
      end; // If
  end; // With
end;
Resim
Resim ....Resim
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Mesaj gönderen barutali »

evet hocam istediğim tam olarak buydu çok teşekkür ederim ilgilenen herkeze.
amatör küme programcı :D
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

mrmarman'ın dediği şekilde yapacak olursanız, Windows Theme'leri bozuk olacaktır. Aşağıdaki fonksiyon daha genel ve kolay bir çözüm.

Fonksiyonun çalışması için uses kısmına CommCtrl dosyasınıda ekleyin.

Kod: Tümünü seç

procedure TForm1.SetNodeBold(Node: TTreeNode; Value: Boolean);
var
	TVItem:TTVItem;
begin
  if not Assigned(Node) then
    Exit;

  TVItem.mask := TVIF_STATE or TVIF_HANDLE;
  TVItem.hItem := Node.ItemId;
  TVItem.stateMask := TVIS_BOLD;
  
  if Value then
    TVItem.state := TVIS_BOLD
  else
    TVItem.state := 0;

  TreeView_SetItem(Node.Handle, TVItem);
end;

Kolay gelsin,
Bahadır Alkaç
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@Opt2000

- Windows temaları bozuk olacaktır demekle neyi ifade etmeye çalıştığınızı da bildirseydiniz. Sanki hatalı kod yazmışım gibi ifade edilmiş oldu. Söylediklerin yanlış anlaşılabilir. Burada bir hata yok.

- Verdiğim örnek standart bir uygulamadır. Temalar bozuluyor dediğin durum arka fon renginin beyaz örneklemiş olmam ise bunu açıkça söyle.

- clWhite gibi statik renk tanımı yerine Windows temasına göre otomatik değişmesini sağlayan clBackground, clWindowsText gibi renk seçilirse, temaya göre değişen arka fon renkleri de burada değerlendirilir ve bu sorunun dediğin şeyin doğal olarak zaten önüne geçer.

- Eğer bahsettiğin başka birşey ise açıklarsan sevinirim.
Resim
Resim ....Resim
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

mrmarman'ın kodu kesinlikle yanlış değil, eğer öyle bir anlam çıktıysa kusuruma bakmayın.

Söylemek istediğim şu: Bazı Windows Theme'lerinde, seçili olan Node'un backgroundu blok renk değil, gradient (bir renkten diğerine geçiş) olabiliyor. mrmarman'ın kodu bu tür theme'lerde sistemden farklı bir sonuç verebilir (Mesajı yazmadan önce test edeyim dedim, ama bilgisayarımda Windows ile gelen theme'lerden başka theme olmadığı için deneyemedim). Renk tutsa bile stil tutmayabilir.

Kolay gelsin,
Bahadır Alkaç[/img]
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Mesaj gönderen barutali »

@opt2000 hocam sizede yardımınız için teşekkür ederim dinamik skin form comp. setini kullandığım için windows teması ne olursa olsun farketmiyor.
amatör küme programcı :D
Cevapla