Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Resaltar un nodo dentro de un TreeView (https://www.clubdelphi.com/foros/showthread.php?t=71884)

fide_uci 15-01-2011 22:05:21

Resaltar un nodo dentro de un TreeView
 
Hola amigos. Mi duda es la siguiente. Estoy desarrollando un cliente de jabber y necesito que los Nodos que son de tipo Grupo, o sea que contienen a los usuarios dentro de si tengan un resaltado. Por ejemplo la fuente sea en negrita. Como podria resaltar un nodo del treeview para diferenciarlo de los otros?

Gracias desde ya. xD !

ecfisa 15-01-2011 23:20:19

Hola fide_uci.

En este [ enlace ], Zarko Gajic explica como hacerlo.


Un saludo.

fide_uci 16-01-2011 18:16:52

Esta bueno eso y lo voy a ir utilizando de momento pero no me sirve de mucho por que ademas de poner un nodo en negrita, necesito cambiarle tamaño y color entiendes?. Recuerdo que en el OnDrawItem o algo asi del TreeView se hacia algo que te permitia lograr lo mismo. Saben como puedo hacerlo por esa via?. Mediante el OnCustomDrawItem o en el OnDrawItem del TreeView?

ecfisa 16-01-2011 18:44:14

Hola.

Ahora te entiendo...

Te pongo un ejemplo utilizando el evento OnCustomDrawItem. En este caso, pone en rojo, negrita y tamaño = 10, aquellos nodos que posean subnodos.

Código Delphi [-]
procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Node.HasChildren then
  begin
    TreeView1.Canvas.Font.Color:= clRed;
    TreeView1.Canvas.Font.Style:= [fsBold];
    TreeView1.Canvas.Font.Size:= 10; 
  end;
end;

Un saludo.

fide_uci 16-01-2011 21:32:21

Uff justo eso era lo que andaba buscando. Pero tengo una duda ahora. Sabes que cuando marco un nodo, si le tengo la propiedad RowSelect a true me selecciona todo el nodo completo con un fondo no?. QUe por defecto es Azul. Como puedo cambiar ese fondo o ponerle un color de fondo a un nodo en especifico?

fide_uci 16-01-2011 21:37:23

O sea cuando voy a pintar los nodos que son de tipo Grupo o sea que van a contener a otros nodos dentro de si, a esos ponerles un background como lo hace el psi y otros jabbers.???

ecfisa 16-01-2011 22:04:31

Hola.

Con el mismo ejemplo, para pintar el fondo sería:
Código Delphi [-]
...
 if Node.HasChildren then
  begin
    TreeView1.Canvas.Brush.Color:= clYellow; // COLOR DE FONDO 
    TreeView1.Canvas.Font.Color:= clRed;
    TreeView1.Canvas.Font.Style:= [fsBold];
    TreeView1.Canvas.Font.Size:= 10;
  end;
...

Un saludo.

fide_uci 16-01-2011 22:10:54

WoW, ya veo. El gran problema es que todavia no domino los objetos como TCanvas, TRec pero bueno con personas como tu se aprende facil. GG muchas gracias por tu ayuda. Aqui te dejo unas imagenes de como va quedando el cliente de jabber que toy haciendo.

Interfaz de Inicio
http://www.facebook.com/#!/photo.php...00000461193039

Cuando no tenia grupos
http://www.facebook.com/#!/photo.php...00000461193039

Ya con grupos
http://www.facebook.com/#!/photo.php...00000461193039

fide_uci 16-01-2011 22:16:15

Dime entonces, que te parece como va quedando?

JXJ 16-01-2011 23:48:47

Cita:

Empezado por fide_uci (Mensaje 387742)
Dime entonces, que te parece como va quedando?

hola

fide_uci

como le haces para implementar jabber?

tienes un servidor jabber o te conectas a uno publico?

no le entiendo bien a jabber y como implementarlo.


tengo el interes en implementar un cliente jabber con delphi.

fide_uci 17-01-2011 08:07:37

Ha, pues es sencillo de hacer. Si quieres te puedo ayudar gg. LA cosa es que cuando te conectas al server, debes enviar XML y Recibir XML. Mas nada. Cada cosa es con XML. Ejemplo un mensaje seria asi.

Al usuario

<message type="chat" to="JXJ@servidor.net">
<body>Hola, saludos !</body>
</message>

Todo es asi de sencillo. Enviar y recibir XML gg.

fide_uci 17-01-2011 12:40:01

Tengo una Duda. Como los nodos que son de tipo Grupo, llevan un menu diferente a los que son de Tipo usuario, o sea un Popup_menu que es distinto para cada uno. Como asigno un popup a un nodo y otro popup_menu a otro tipo de nodo?

ecfisa 20-01-2011 03:14:01

Cita:

Empezado por fide_uci (Mensaje 387742)
Dime entonces, que te parece como va quedando?

Disculpa la tardanza en responder, aún estoy de vacaciones y entro cada tanto.

Lo que ví está muy bueno.

Un saludo.

ecfisa 20-01-2011 07:43:45

Cita:

Empezado por fide_uci (Mensaje 387766)
Tengo una Duda. Como los nodos que son de tipo Grupo, llevan un menu diferente a los que son de Tipo usuario, o sea un Popup_menu que es distinto para cada uno. Como asigno un popup a un nodo y otro popup_menu a otro tipo de nodo?

Algo que se me ocurre es verificar en el evento OnMouseDown sobre que nodo estas y asignar a la propiedad PopupMenu del TreeView el PopupMenu correspondiente:
Código Delphi [-]
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then
    if TreeView1.Selected.HasChildren then
      TreeView1.PopupMenu:= PopupMenu1 // Grupo
    else
      TreeView1.PopupMenu:= PopupMenu2; // Otros
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 11:54:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi