Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > .NET
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2006
XaRz XaRz is offline
Miembro
 
Registrado: ene 2006
Posts: 13
Poder: 0
XaRz Va por buen camino
TreeView Drag and Drop en Delphi.net

Hola a todos,

Estoy intentando hacer funcionar un drag and drop para un treeview programado con TTreeView que funcione para un control TreeView de .NEt.

Lo he intentado de varias formas...la última a través del código de Marco Cantu del libro Mastering Delphi 2005 que va como sigue:
Código:
procedure EquipCom.TreeView1_DragDrop(sender,source: System.Object; e: System.Windows.Forms.DragEventArgs;
        point:System.Drawing.point);
var
 TargetNode,SourceNode:TTreeNode;
begin
    TargetNode:=treeView1.GetNodeAt(point);
    if TargetNode <> nil then
    begin
      SourceNode:=TreeView1.SelectedNode;
      SourceNode.MoveTo(targetNode,naAddChildFirst);
      TargetNode.Expand(False);
      treeView1.SelectedNode:=TargetNode;
    end;

end;

procedure EquipCom.TreeView1_DragOver(sender,source: System.Object;point:System.Drawing.point;
      state:TDragState;var Accept:boolean; e: System.Windows.Forms.DragEventArgs);
var
TargetNode,SourceNode:TTreeNode;
begin
      TargetNode:=TreeView1.GetNodeAt(Point);
      if ((source=Sender) AND(targetNode <> nil)) then
      begin
        Accept:=True;
        SourceNode:=TreeView1.SelectedNode;
        while (targetNode.Parent<> nil) and (targetNode<> SourceNode) do
        begin
          targetNode:=TargetNode.Parent;
        end;
        if TargetNode = SourceNode then
        Accept:=False;
      end
      else Accept:=False;
end;
Pero claro, hay cosas que de calle no están bien para .NET, por ejemplo en
Código:
SourceNode:=TreeView1.SelectedNode;
nos darà un problema de tipos ya que: en
Código:
var
TargetNode,SourceNode:TTreeNode;
le estamos definiendo un TTreeNode que no es lo mismo que un TreeNode en .NET
Aparte el compilador se queja cuando le assigno al drag&drop cabeceras diferentes de:
Código:
procedure EquipCom.TreeView1_DragOver(sender: System.Object;
e: System.Windows.Forms.DragEventArgs);
En mi caso la cabecera que intento assignarle al DragOver es:
Código:
procedure EquipCom.TreeView1_DragOver(sender,source: System.Object;point:System.Drawing.point;
      state:TDragState;var Accept:boolean; e: System.Windows.Forms.DragEventArgs);
.

En fin, si alguna lumbrera me puede orientar..yo lo único que desearia són acciones de drag&drop en un treeview. Pero estoy encallado.

Ala,saludos y gracias por adelantado.
Responder Con Cita
  #2  
Antiguo 08-06-2006
XaRz XaRz is offline
Miembro
 
Registrado: ene 2006
Posts: 13
Poder: 0
XaRz Va por buen camino
Thumbs up Resuelto

Dios cuanta incultura que trajino por ahi...

En resumen, he incorporado tal cual el Formulario que viene con el ejemplo de Marco Cantú a mi proyecto .NET y tachánnn! sorpresa porque ningun problema de mezclar classes TTreeView con proyectos.net. Es mas, no hay problema con mezclar units .NET i win32!
Esto es la leche!
Se me ha abierto un mundo de clases que tenia por desaprovechadas por una falta de conocimiento al respecto...que inculto soy...

Si alguien necesita implementar algo parecido le pasteo el codigo que ya advierto que es de marco cantú..(espero que no incumpla ningún copyright chungo por pastear esto...y si lo incumplo no me lo tengáis en cuenta
Código:
unit TreeForm;

interface

{$WARN UNIT_PLATFORM OFF}

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, Menus;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    MainMenu1: TMainMenu;
    Options1: TMenuItem;
    File1: TMenuItem;
    Exit1: TMenuItem;
    Help1: TMenuItem;
    About1: TMenuItem;
    Root1: TMenuItem;
    Buttons1: TMenuItem;
    Lines1: TMenuItem;
    N1: TMenuItem;
    Font1: TMenuItem;
    FontDialog1: TFontDialog;
    ExpandAll1: TMenuItem;
    N2: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure About1Click(Sender: TObject);
    procedure Root1Click(Sender: TObject);
    procedure Buttons1Click(Sender: TObject);
    procedure Lines1Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure Font1Click(Sender: TObject);
    procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ExpandAll1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  TreeView1.LoadFromFile (
    ExtractFilePath (Application.ExeName) + 'TreeText.txt');
end;

procedure TForm1.About1Click(Sender: TObject);
begin
  MessageDlg ('DragTree Example'#13'by Marco Cantù',
    mtInformation, [mbOk], 0);
end;

procedure TForm1.Root1Click(Sender: TObject);
begin
  TreeView1.ShowRoot := not TreeView1.ShowRoot;
  Root1.Checked := TreeView1.ShowRoot;
end;

procedure TForm1.Buttons1Click(Sender: TObject);
begin
  TreeView1.ShowButtons := not TreeView1.ShowButtons;
  Buttons1.Checked := TreeView1.ShowButtons;
end;

procedure TForm1.Lines1Click(Sender: TObject);
begin
  TreeView1.ShowLines := not TreeView1.ShowLines;
  Lines1.Checked := TreeView1.ShowLines;
end;

procedure TForm1.Exit1Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.Font1Click(Sender: TObject);
begin
  if FontDialog1.Execute then
    TreeView1.Font := FontDialog1.Font;
end;

procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
  TargetNode, SourceNode: TTreeNode;
begin
  TargetNode := TreeView1.GetNodeAt (X, Y);
  // accept dragging from itself
  if (Source = Sender) and (TargetNode <> nil) then
  begin
    Accept := True;
    // determines source and target
    SourceNode := TreeView1.Selected;
    // look up the target parent chain
    while (TargetNode.Parent <> nil) and
        (TargetNode <> SourceNode) do
      TargetNode := TargetNode.Parent;
    // if source is found
    if TargetNode = SourceNode then
      // do not allow dragging over a child
      Accept := False;
  end
  else
    Accept := False;
end;

procedure TForm1.TreeView1DragDrop(Sender, Source: TObject;
  X, Y: Integer);
var
  TargetNode, SourceNode: TTreeNode;
begin
  TargetNode := TreeView1.GetNodeAt (X, Y);
  if TargetNode <> nil then
  begin
    SourceNode := TreeView1.Selected;
    SourceNode.MoveTo (TargetNode, naAddChildFirst);
    TargetNode.Expand (False);
    TreeView1.Selected := TargetNode;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  TreeView1.SaveToFile (
    ExtractFilePath (Application.ExeName) + 'TreeText.txt');
end;

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  TreeView1.BeginDrag (False); 
end;

procedure TForm1.ExpandAll1Click(Sender: TObject);
begin
  // either:
  TreeView1.FullExpand;
  // or:
  // TreeView1.Items [0].Expand(True);
end;

end.
Ale grácias de todos modos.
Responder Con Cita
  #3  
Antiguo 08-06-2006
XaRz XaRz is offline
Miembro
 
Registrado: ene 2006
Posts: 13
Poder: 0
XaRz Va por buen camino
Cool Rectificando conceptos....

A ver..he releido las tonterias que he escrito anteriormente y la verdad me explico mal y con mala leche.

No es verdad que mezcle librerias win32 con .Net, lo que passa es que no utilizo controles estrictos del .Net frameWork sino de la vcl.net de borland que contiene los controles anteriores al movimiento .Net Osease Win32.

Con lo qual si programas con BDS2006 puedes acceder a todas las clases de Borland que exisitan en DelphiWin32 (y que esten programadas en .NET) que ahora veo el gran quid de usar Delphi.NEt en vez de VB.NET.

Que rollazo tengo..en fin. Monólogos aparte se haceptan correcciones, insultos educados con el fin de mejorar mi cultura de programador.

Saludos y nos leemos.
Responder Con Cita
  #4  
Antiguo 08-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Que rollazo tengo..en fin. Monólogos aparte se haceptan correcciones, insultos educados con el fin de mejorar mi cultura de programador.
¡Saludos!
__________________
David Esperalta
www.decsoftutils.com
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
Drag & Drop DanForever Varios 2 01-06-2006 14:24:25
Drag&Drop !!! rafstyle OOP 6 27-07-2004 04:39:41
Drag&Drop entre dos TreeView ceocarbajal OOP 1 08-05-2004 09:21:41
Drag&Drop xflo Lazarus, FreePascal, Kylix, etc. 0 13-10-2003 19:31:22
Drag & Drop cone220 Varios 1 26-05-2003 19:06:34


La franja horaria es GMT +2. Ahora son las 11:06:19.


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