Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-01-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Talking Asignarle distintos Popups a los Nodos de TreeView

Hola amigos. En el tema de mi post creo que dejo claro lo que quiero hacer.
Actualmente me encuentro creando un cliente de jabber y tengo un TreeView donde pinto los Grupos y dentro de cada grupo los usuarios que estan dentro de el. Algo como esto.

Amigos
- Amigo 1
- Amigo 2
Familiares
- Familiar 1
- Familiar 2
etc.

Lo que me hace falta es que al hacer clic derecho sobre Amigos o Familiares (que son grupos) me salga un PopupMenu y cuando haga clic sobre un nodo que no sea un grupo (como el de usuarios) me salga otro Popup. Como podria yo lograr esto?. Gracias desde ya mis amigos.

Aqui les dejo las imagenes de como va quedando el cliente de jabber.

http://www.facebook.com/photo.php?pi...00000461193039
http://www.facebook.com/photo.php?pi...00000461193039

De paso me dicen que les parece como va quedando !
Responder Con Cita
  #2  
Antiguo 21-01-2011
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
Puedes usar el evento OnPopup del menú para habilitar/inhabilitar, mostrar/esconder o agregar/eliminar elementos del menú. Este evento se lanza justo antes de que se muestre al usuario.

Otra opción (mejor para mi manera de ver) es no asignar el menú al TreeView y usar el evento OnMouseDown del TreeView para determinar qué menú despliegas usando su método Popup.

// Saludos
Responder Con Cita
  #3  
Antiguo 21-01-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Hmm, ya creo que voy entendiendo. Deja probar y te comento luego como me fue. Muchisimas gracias por la ayuda !
Responder Con Cita
  #4  
Antiguo 21-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Puedes usar el evento OnPopup del menú para habilitar/inhabilitar, mostrar/esconder o agregar/eliminar elementos del menú. Este evento se lanza justo antes de que se muestre al usuario.

Otra opción (mejor para mi manera de ver) es no asignar el menú al TreeView y usar el evento OnMouseDown del TreeView para determinar qué menú despliegas usando su método Popup.

// Saludos
A mí me parece más cómoda de programar la primera. Sin embargo, para cualquiera de las dos, lo que se necesita es saber sobre que nodo está el puntero al momento de hacer el click derecho. Para saberlo utiliza el procedimiento TreeView_HitTest. Desconozco si dicho procedimiento está implementado en la unidad Commctrl de delphi. Sino lo está, tendrás que "irte por otro lado", utilizando SendMessage.

MI OPINIÓN DE LA INTERFAZ: 2/3. La interfaz esta muy buena, pero existe mucha similitud en la ventana de inicio de sesión con su contraparte de Windows Live Messanger, lo que podría llevar a una confusión. En menor medida, este problema también ocurre con la lista de contactos, si cambiases los iconos de estado puedes hacer mucha diferencia. En la misma ventana, los nodos correspondientes a los grupos deberían distinguirse (siendo talvez dibujados en negrillas). Estos mismos también deberían de indicar cuántos contactos están disponibles en cada grupo sin necesidad de expandir el nodo. De la misma forma en que lo hace Windows Live. Por último, la ventana de conversación está un poco cruda. Deberías de confeccionarla un poco más siempre manteniendo el minimalismo que tienes por el momento.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #5  
Antiguo 21-01-2011
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
Cita:
Empezado por Chris Ver Mensaje
Para saberlo utiliza el procedimiento TreeView_HitTest. Desconozco si dicho procedimiento está implementado en la unidad Commctrl de delphi.
Tienes razón en el uso del hittest. Aquí un ejemplo de cómo podemos usar el evento MouseDown y el hittest para determinar qué menú desplegar:

Código Delphi [-]
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
var
    Ht: THitTests;
    Pt: TPoint;

begin
    if Button = mbRight then
    begin
        Ht := TreeView1.GetHitTestInfoAt(X, Y);

        if htOnItem in Ht then
        begin
            Pt := TreeView1.ClientToScreen(Point(X, Y));

            TreeView1.Selected := TreeView1.GetNodeAt(X, Y);

            if Assigned(TreeView1.Selected.Parent) then
                PopupMenu1.Popup(Pt.X, Pt.Y)
            else
                PopupMenu2.Popup(Pt.X, Pt.Y);
        end;
    end;
end;

// Saludos
Responder Con Cita
  #6  
Antiguo 23-01-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Exclamation

Cita:
Empezado por Chris Ver Mensaje
A mí me parece más cómoda de programar la primera. Sin embargo, para cualquiera de las dos, lo que se necesita es saber sobre que nodo está el puntero al momento de hacer el click derecho. Para saberlo utiliza el procedimiento TreeView_HitTest. Desconozco si dicho procedimiento está implementado en la unidad Commctrl de delphi. Sino lo está, tendrás que "irte por otro lado", utilizando SendMessage.

MI OPINIÓN DE LA INTERFAZ: 2/3. La interfaz esta muy buena, pero existe mucha similitud en la ventana de inicio de sesión con su contraparte de Windows Live Messanger, lo que podría llevar a una confusión. En menor medida, este problema también ocurre con la lista de contactos, si cambiases los iconos de estado puedes hacer mucha diferencia. En la misma ventana, los nodos correspondientes a los grupos deberían distinguirse (siendo talvez dibujados en negrillas). Estos mismos también deberían de indicar cuántos contactos están disponibles en cada grupo sin necesidad de expandir el nodo. De la misma forma en que lo hace Windows Live. Por último, la ventana de conversación está un poco cruda. Deberías de confeccionarla un poco más siempre manteniendo el minimalismo que tienes por el momento.

Saludos,
Chris
El problema es que lo comenze a desarrollar pero no tenia prototipo de interfaz. Y como ese me gusta mucho (Windows Live Messenger) pues esa fue la que escogi hasta que termine con y tenga una disponible. No obstante voy a tener todas tus opiniones y sugerencias en cuenta para mejorarlo. Gracias a todos por el apoyo. Si fuera posible quiciera que el cliente saliera por aqui por clubdelphi como un logro mas de Delphi.
Responder Con Cita
  #7  
Antiguo 23-01-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
me fue muy util este codigo. Era justo lo que necesitaba. Lo unico que con una pequeña modificacion. Por que cuando hacia clic fuera del nombre del elemento en el TreeView no me desplegaba el menu. Asi que le quite ese parametro al Hittest. Como viene a continuacion..

Código Delphi [-]
var
    Ht: THitTests;
    Pt: TPoint;
begin
    //ShowMessage('aa');
    if Button = mbRight then
    begin
        Ht := roster_tree.GetHitTestInfoAt(X, Y);

        {if (htOnItem in Ht) or (htOnIcon in Ht) or (htNowhere in Ht) then
        begin}
            Pt := roster_tree.ClientToScreen(Point(X, Y));
            roster_tree.Selected := roster_tree.GetNodeAt(X, Y);
            if roster_tree.Selected.Level = 1 then
                roster_contact_popup.Popup(Pt.X, Pt.Y)
            else
                roster_group_popup.Popup(Pt.X, Pt.Y);
        //end;
    end;
end;

Muchisimas gracias a todos ustedes que siempre estan ayudando a las personas ggg. Espero poderlos ayudar yo un dia a ustedes.
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
Problemas con el TreeView y los nodos Gustavo Gowdak OOP 5 23-09-2007 17:44:19
nodos y la propiedad data en un Treeview david_uh Varios 1 22-09-2007 00:12:31
nodos del treeview Buelos Varios 4 04-09-2007 21:54:44
Accesos de Usuarios a Nodos de TreeView Maury Manosalva OOP 0 09-09-2005 22:00:28
TreeView y colores para los nodos gqxns Varios 2 20-01-2004 12:28:31


La franja horaria es GMT +2. Ahora son las 21:00:59.


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