Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Coloreando una parte del Texto en TreeView

Saludos Compañero, he estado haciendo lo siguiente para poder colorear una parte del texto en un TreeView, pero no me funciona:

Código Delphi [-]
procedure TFSelInfC.FormCreate(Sender: TObject);
Var
    Nodo:Packed Array[0..99] of TTreenode;
    NodoValor:Packed array[0..99] of Variant;
begin
  ZDpto.Open;
    trvDptos.Items.Clear;
    ZDpto.First;
    While not ZDpto.Eof do
    begin
        if NodoValor[0]<> ZDpto.Fields[0].Value then begin
     With ZDpto.Fields[2] do
      begin
        Canvas.Font.Color := clBlue;
      end;
             Nodo[0]:=trvDptos.Items.Add(nil,Vartostr(ZDpto.Fields[0].Value+' ('+ZDpto.Fields[2].AsString+')'));
          NodoValor[0]:=ZDpto.Fields[0].Value;
      Nodo[0].Data := pointer(ZDpto.FieldByName('DPTOID').AsInteger);
     end;
    ZDpto.next;
    end;
end;

Quisiera Quedara así:

Departamentos de Compras (18)

He intentado varias formas, pero no llego.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #2  
Antiguo 28-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Lo último que he hecho (un disparate) no funcionó, ya no tengo más ideas:

Código Delphi [-]
procedure TFSelInfC.FormCreate(Sender: TObject);
Var
    Nodo:Packed Array[0..99] of TTreenode;
    NodoValor:Packed array[0..99] of Variant;
  Total: TLabel;
begin
  ZDpto.Open;
    trvDptos.Items.Clear;
    ZDpto.First;
  Total.Caption := ZDpto.Fields[2].AsString;
  Total.Font.Color := ClBlue;
    While not ZDpto.Eof do
    begin
        if NodoValor[0]<> ZDpto.Fields[0].Value then begin
             Nodo[0]:=trvDptos.Items.Add(nil,Vartostr(ZDpto.Fields[0].Value+' ('+Total.Caption+')'));
          NodoValor[0]:=ZDpto.Fields[0].Value;
      Nodo[0].Data := pointer(ZDpto.FieldByName('DPTOID').AsInteger);
     end;
    ZDpto.next;
    end;
end;

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 28-06-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola, ando algo ajuma'o así que no es mucho lo que voy a decir. ¿Qué para pintar nodos de un TreeView no debería usarse uno de sus eventos OnCustomDrawItem u OnAdvancedCustomDrawItem?

// Saludos
Responder Con Cita
  #4  
Antiguo 28-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
¡Hip!, como ves, vengo de la fiesta ¡Hip! aquella ¡Hip!, pero, ¿esos eventos no son para el item completo?, porque lo que quiero darle a una sola parte del texto no todo, digo ¡hip!, eso creo yo.

Salu..¡Hip!..dos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #5  
Antiguo 28-06-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pos' sip, son para el ítem entero, o sea, que tienes que pintarlo todo tú solito pa' q' salga como quieres.

Y que viva méxico!

Ay guey, no, eso era en el otro salón

// Saludos
Responder Con Cita
  #6  
Antiguo 28-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Ay guey, no, eso era en el otro salón

// Saludos
,

Bueno deja,e acell e inten ¡hip! to.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #7  
Antiguo 28-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Bueno, aquí vuelvo con una resaca, y todavía no he logrado nada, por favor, algún alma caritativa que me ayude.

Saludos. (Por favor hablen bajito)
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #8  
Antiguo 30-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Hola, pues vuelvo con otro invento que no funcionó,

Código Delphi [-]
procedure TFSelInfC.trvDptosCustomDraw(Sender: TCustomTreeView;
  const ARect: TRect; var DefaultDraw: Boolean);
begin
with trvDptos.Items[0] do
  begin
      if ZDpto.Fields[2].Value then begin
        Canvas.Font.Color := clBlue;
    end;
  end;
end;

Ya no sé que hacer

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #9  
Antiguo 01-07-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Bueno, con la ayuda de Eduarcol (Todo), hicimos(él hizo) este pedazo de código:

Código Delphi [-]
procedure TFSelInfC.trvDptosCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
   rc: TRect;
begin
   DefaultDraw := False;
   with trvDptos do
   begin
      Canvas.Brush.Style := bsClear;
      Canvas.Font.Color := clBlue;
      Canvas.Font.Name := 'Tahoma';
      Canvas.Font.Size := 10;
      rc :=  Node.DisplayRect(False);
      Canvas.TextOut(rc.Left, rc.Top, Copy(Node.Text, 1, Pos('(', Node.Text)));
      Canvas.Refresh;
      Canvas.Font.Color := clRed;
      Canvas.Font.Name := 'Tahoma';
      Canvas.Font.Size := 10;
      Canvas.TextOut(rc.Left + Canvas.TextHeight(Copy(Node.Text, 1, Pos('(', Node.Text) - 1)), rc.Top, EntreValores(Node.Text, '(', ')'));
      Canvas.Refresh;
      Canvas.Font.Color := clBlue;
      Canvas.Font.Name := 'Tahoma';
      Canvas.Font.Size := 10;
      Canvas.TextOut(rc.Left + Canvas.TextHeight(Node.Text) - 1, rc.Top, Copy(Node.Text, 1, Pos(')', Node.Text)));
 end;
end;

Resultado:

http://img237.imageshack.us/img237/8...sultadouv7.jpg

Sin comentarios.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #10  
Antiguo 01-07-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
pero veo que aun sigue montado el texto, no se soluciono eso?
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #11  
Antiguo 01-07-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Cita:
Empezado por eduarcol Ver Mensaje
pero veo que aun sigue montado el texto, no se soluciono eso?
No funcionó amigo Eduardo
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #12  
Antiguo 01-07-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
bueno, esperemos que llegue algun maestro del canvas a ver que hace con esto.... Recuerda que te dije que no estoy muy puesto en el tema
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #13  
Antiguo 01-07-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Listo, no era nada del canvas ni eso... un simple error por el cansancio de ayer

Código Delphi [-]
procedure TForm1.trvDptosCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
   rc: TRect;
begin
   DefaultDraw := False;
   with trvDptos do
   begin
      Canvas.Brush.Style := bsClear;
      Canvas.Font.Color := clBlue;
      Canvas.Font.Name := 'Tahoma';
      Canvas.Font.Size := 10;
      rc :=  Node.DisplayRect(False);
      Canvas.TextOut(rc.Left, rc.Top, Copy(Node.Text, 1, Pos('(', Node.Text)));
      Canvas.Refresh;
      Canvas.Font.Color := clRed;
      Canvas.Font.Name := 'Tahoma';
      Canvas.Font.Size := 10;
      Canvas.TextOut(rc.Left + Canvas.TextWidth(Copy(Node.Text, 1, Pos('(', Node.Text))), rc.Top, EntreValores(Node.Text, '(', ')'));
      Canvas.Refresh;
      Canvas.Font.Color := clBlue;
      Canvas.Font.Name := 'Tahoma';
      Canvas.Font.Size := 10;
      Canvas.TextOut(rc.Left + Canvas.TextWidth(Node.Text) - 1, rc.Top, Copy(Node.Text, Pos(EntreValores(Node.Text, '(', ')'), Node.Text) + Length(EntreValores(Node.Text, '(', ')')), Pos(')', Node.Text)));
 end;
end;

si te fijas cambian las formulas que calculan los valores del texto IMAGEN
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela

Última edición por eduarcol fecha: 01-07-2008 a las 14:22:27.
Responder Con Cita
  #14  
Antiguo 01-07-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Eso está muy bien. Yo había intentado hacerlo llegando más o menos a lo mismo pero no podía cambiar el color (por eso no había dicho nada). Veo que lo han resuelto con un Refresh. Estupendo.

// Saludos
Responder Con Cita
  #15  
Antiguo 01-07-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
¡Vale!, Me ha funcionado de maravillas, he quitado el canvas.Brush.style, porque al estar en bsClear no me muestra la selección del item. Muchas gracias Eduarcol, eres un master .

Saludod.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #16  
Antiguo 01-07-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Eso está muy bien. Yo había intentado hacerlo llegando más o menos a lo mismo pero no podía cambiar el color (por eso no había dicho nada). Veo que lo han resuelto con un Refresh. Estupendo.

// Saludos
Pues eso es de mi epoca cuando trabajaba en Pascal o C con la BGI, para que cambiara el color del texto habia que darle un clrscr, y buscando eso encontre el refresh funciono y sorpresa


Por cierto primera vez que trabajo con la canvas.
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #17  
Antiguo 01-07-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo había hecho un ejemplo a dos colores pero en un DBGrid y sin necesidad del Refresh, por ello no me pasó por la mente, aunque en realidad ya no me pasaba nada por la mente
Qué bueno que encontraste la forma. Ahora ya sabemos algo más

// Saludos
Responder Con Cita
  #18  
Antiguo 02-07-2008
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
He probado el ejemplo "final", y siento decir, que pierde la gracia del TTreeView xD Los SubItems aparecen en el nivel 0

Aquí un pequeño parche xD

Código Delphi [-]
procedure TForm2.trvDptosCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
   rc: TRect;
   // Details: TThemedElementDetails; // ESTO ES basura de una prueba, lo comento en lugar de borrarlo, para que se entienda el mensaje de enecumene xD

begin
   DefaultDraw := False;
   with trvDptos do
   begin
      Canvas.Brush.Style := bsClear;
      Canvas.Font.Color := clBlue;
      Canvas.Font.Name := 'Tahoma';
      Canvas.Font.Size := 10;
      rc :=  Node.DisplayRect(False);
      // sub-niveles
      rc.Left:=(Node.Level + 1) * TTreeView(Sender).indent;
      // miramos si esta seleccionado
      if Node.Selected then
          Canvas.Brush.Color:=clSilver
      else
          Canvas.Brush.Color:=clWindow;
      // pintamos texto
      Canvas.TextOut(rc.Left, rc.Top, Copy(Node.Text, 1, Pos('(', Node.Text)));
      Canvas.Refresh;
      Canvas.Font.Color := clRed;
      Canvas.Font.Name := 'Tahoma';
      Canvas.Font.Size := 10;
      Canvas.TextOut(rc.Left + Canvas.TextWidth(Copy(Node.Text, 1, Pos('(', Node.Text))), rc.Top, EntreValores(Node.Text, '(', ')'));
      Canvas.Refresh;
      Canvas.Font.Color := clBlue;
      Canvas.Font.Name := 'Tahoma';
      Canvas.Font.Size := 10;
      Canvas.TextOut(rc.Left + Canvas.TextWidth(Node.Text) - 3, rc.Top, Copy(Node.Text, Pos(EntreValores(Node.Text, '(', ')'), Node.Text) + Length(EntreValores(Node.Text, '(', ')')), Pos(')', Node.Text)));
 end;
end;

Saludos.

Última edición por xEsk fecha: 04-07-2008 a las 17:00:57. Razón: Comentada la variable: Details
Responder Con Cita
  #19  
Antiguo 02-07-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
¡Vaya!, excelente, una cosa, ¿donde utilizas la variable Details?, no lo encuentro en el código.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #20  
Antiguo 02-07-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Una pregunta xEsk:

El rc ¿no se puede obtener directamente si en lugar de usar Node.DisplayRect(False) usamos Node.DisplayRect(True)?

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Capturar parte de un texto Roilo SQL 3 12-01-2006 20:36:43
Buscar parte de un texto en campo de tabla jadelphi Varios 3 22-04-2005 17:15:03
treeview ocultar parte del texto de nodo adfa OOP 5 25-11-2003 00:13:47
como buscar dentro de una consulta un texto que sea parte de la descripcion viajero2015 Conexión con bases de datos 1 15-11-2003 05:18:09
Eliminar parte de un archivo de texto miguelb Varios 1 20-05-2003 16:34:49


La franja horaria es GMT +2. Ahora son las 09:23:53.


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
Copyright 1996-2007 Club Delphi