![]() |
![]() |
| Paypal | 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
|
|||
|
|||
|
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
|
|||
|
|||
|
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 |
|