diff --git a/components/virtualtreeview-new/branches/4.8/demos/dragdrop/fmain.lfm b/components/virtualtreeview-new/branches/4.8/demos/dragdrop/fmain.lfm new file mode 100644 index 000000000..73d187468 --- /dev/null +++ b/components/virtualtreeview-new/branches/4.8/demos/dragdrop/fmain.lfm @@ -0,0 +1,52 @@ +object MainForm: TMainForm + Left = 569 + Height = 362 + Top = 219 + Width = 461 + Caption = 'VTV Drag and Drop' + ClientHeight = 362 + ClientWidth = 461 + Position = poDesktopCenter + LCLVersion = '0.9.31' + object VirtualStringTree1: TVirtualStringTree + Left = 8 + Height = 315 + Top = 24 + Width = 200 + DefaultText = 'Node' + DragMode = dmAutomatic + DragType = dtVCL + Header.AutoSizeIndex = 0 + Header.Columns = <> + Header.DefaultHeight = 17 + Header.MainColumn = -1 + RootNodeCount = 30 + TabOrder = 0 + TreeOptions.AutoOptions = [toAutoDropExpand, toAutoScroll, toAutoScrollOnExpand, toAutoTristateTracking, toAutoDeleteMovedNodes] + OnDragOver = VirtualStringTree1DragOver + OnDragDrop = VirtualStringTree1DragDrop + OnGetText = VirtualStringTree1GetText + OnGetNodeDataSize = VirtualStringTree1GetNodeDataSize + OnInitNode = VirtualStringTree1InitNode + end + object ListBox1: TListBox + Left = 256 + Height = 315 + Top = 24 + Width = 192 + DragMode = dmAutomatic + Items.Strings = ( + 'List Item 1' + 'List Item 2' + 'List Item 3' + 'List Item 4' + 'List Item 5' + 'List Item 6' + ) + ItemHeight = 23 + OnDragDrop = ListBox1DragDrop + OnDragOver = ListBox1DragOver + ScrollWidth = 190 + TabOrder = 1 + end +end diff --git a/components/virtualtreeview-new/branches/4.8/demos/dragdrop/fmain.pas b/components/virtualtreeview-new/branches/4.8/demos/dragdrop/fmain.pas new file mode 100644 index 000000000..729acd704 --- /dev/null +++ b/components/virtualtreeview-new/branches/4.8/demos/dragdrop/fmain.pas @@ -0,0 +1,128 @@ +unit fMain; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, + VirtualTrees, FakeActiveX; + +type + + { TMainForm } + + TMainForm = class(TForm) + ListBox1: TListBox; + VirtualStringTree1: TVirtualStringTree; + procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); + procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; + State: TDragState; var Accept: Boolean); + procedure VirtualStringTree1DragDrop(Sender: TBaseVirtualTree; + Source: TObject; DataObject: IDataObject; Formats: TFormatArray; + Shift: TShiftState; const Pt: TPoint; var Effect: Integer; Mode: TDropMode + ); + procedure VirtualStringTree1DragOver(Sender: TBaseVirtualTree; + Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; + Mode: TDropMode; var Effect: Integer; var Accept: Boolean); + procedure VirtualStringTree1GetNodeDataSize(Sender: TBaseVirtualTree; + var NodeDataSize: Integer); + procedure VirtualStringTree1GetText(Sender: TBaseVirtualTree; + Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; + var CellText: String); + procedure VirtualStringTree1InitNode(Sender: TBaseVirtualTree; ParentNode, + Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); + private + { private declarations } + public + { public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.lfm} + +type + + TNodeData = record + Title: String; + end; + + PNodeData = ^TNodeData; + +{ TMainForm } + +procedure TMainForm.VirtualStringTree1GetText(Sender: TBaseVirtualTree; + Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; + var CellText: String); +begin + CellText := PNodeData(Sender.GetNodeData(Node))^.Title; +end; + +procedure TMainForm.VirtualStringTree1InitNode(Sender: TBaseVirtualTree; + ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); +begin + PNodeData(Sender.GetNodeData(Node))^.Title := 'VTV Item ' + IntToStr(Node^.Index); +end; + +procedure TMainForm.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; + State: TDragState; var Accept: Boolean); +begin + Accept := (Source = VirtualStringTree1) or (Source = ListBox1); +end; + +procedure TMainForm.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); +var + Node: PVirtualNode; +begin + if Source = VirtualStringTree1 then + begin + Node := VirtualStringTree1.FocusedNode; + if Node <> nil then + ListBox1.Items.Append(VirtualStringTree1.Text[Node, 0]); + end; +end; + +procedure TMainForm.VirtualStringTree1DragDrop(Sender: TBaseVirtualTree; + Source: TObject; DataObject: IDataObject; Formats: TFormatArray; + Shift: TShiftState; const Pt: TPoint; var Effect: Integer; Mode: TDropMode); +var + Node: PVirtualNode; + S: String; +begin + if Source = ListBox1 then + begin + Node := Sender.AddChild(Sender.DropTargetNode); + if ListBox1.ItemIndex = -1 then + S := 'Unknow Item from List' + else + S := ListBox1.Items[ListBox1.ItemIndex]; + Sender.ValidateNode(Node, True); + PNodeData(Sender.GetNodeData(Node))^.Title := S; + end + else if Source = Sender then + begin + Node := Sender.AddChild(Sender.DropTargetNode); + Sender.ValidateNode(Node, True); + PNodeData(Sender.GetNodeData(Node))^.Title := VirtualStringTree1.Text[Sender.FocusedNode, 0]; + end; +end; + +procedure TMainForm.VirtualStringTree1DragOver(Sender: TBaseVirtualTree; + Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; + Mode: TDropMode; var Effect: Integer; var Accept: Boolean); +begin + Accept := (Sender = VirtualStringTree1) or (Source = ListBox1); +end; + +procedure TMainForm.VirtualStringTree1GetNodeDataSize(Sender: TBaseVirtualTree; + var NodeDataSize: Integer); +begin + NodeDataSize := SizeOf(TNodeData); +end; + +end. + diff --git a/components/virtualtreeview-new/branches/4.8/demos/dragdrop/vtvdragdrop.lpi b/components/virtualtreeview-new/branches/4.8/demos/dragdrop/vtvdragdrop.lpi new file mode 100644 index 000000000..463e49b2e --- /dev/null +++ b/components/virtualtreeview-new/branches/4.8/demos/dragdrop/vtvdragdrop.lpi @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/components/virtualtreeview-new/branches/4.8/demos/dragdrop/vtvdragdrop.lpr b/components/virtualtreeview-new/branches/4.8/demos/dragdrop/vtvdragdrop.lpr new file mode 100644 index 000000000..244eed5dd --- /dev/null +++ b/components/virtualtreeview-new/branches/4.8/demos/dragdrop/vtvdragdrop.lpr @@ -0,0 +1,21 @@ +program vtvdragdrop; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, fMain, virtualtreeview_package + { you can add units after this }; + +{$R *.res} + +begin + RequireDerivedFormResource := True; + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. +