FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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; Código:
SourceNode:=TreeView1.SelectedNode; Código:
var TargetNode,SourceNode:TTreeNode; 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); 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. |
#2
|
|||
|
|||
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. |
#3
|
|||
|
|||
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. |
#4
|
||||
|
||||
Hola,
Cita:
|
|
|
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 |
|