
Treeview ile ilgili [çözüldü ]
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Treeview ile ilgili [çözüldü ]
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ı 

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.
ö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
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
// Al sana hazırladığım ve birden fazla seçenek sunacak komple test kodu...

// Evir çevir kullan.

// 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;
onada sen kasacaksın birazcık...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.
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
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
@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...
- 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;
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.
Kolay gelsin,
Bahadır Alkaç
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;
Bahadır Alkaç
@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.
- 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.
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]
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]