घर
Top.Mail.Ru Yandeks.Metrika
मंच: "शुरुआती";
वर्तमान संग्रह: 2018.11.04;
डाउनलोड करें: [xml.tar.bz2];

नीचे

TTreeView पर सवाल। इसी तरह की शाखाएँ खोजें


Drowsy ©   (2016-09-06 20:15) [0]

SourceIbXTreeView - потомок TTreeView.

// Переносим SourceIbXTreeView из основной формы в форму ввода.

     SavedOwner :=  SourceIbXTreeView.Owner;
     SavedOwner.RemoveComponent(SourceIbXTreeView);
     F_objred.InsertComponent(SourceIbXTreeView);

     SourceIbXTreeView.Parent := F_objred.Panel5;

====>

Вот здесь (при смене парента), вызывается удаление всех нодов.
У обработчик удаления выглядит так :

procedure TIBXTreeView_Pure.DelNode(Sender: TObject; Node: TTreeNode);
Var SpecialData : TItemRec;
begin
 if Assigned(Node) then
   if Assigned(Node.Data) then
   begin
     SpecialData:=Node.Data;
     SpecialData.Free;
     SpecialData:=nil;
     Node.Data:=nil;
==> Вот здесь не происходит обнуления Node.Data
   end;

end;


2 प्रश्न:
1) почему при смене парента удаляются ноды?
2) почему не обнуляются Node.Data?

धन्यवाद.




Drowsy ©   (2016-09-15 02:04) [1]

?



iop ©   (2016-09-15 10:59) [2]

2 प्रश्न:
1) почему при смене парента удаляются ноды?
2) почему не обнуляются Node.Data?


1. при смене парента никакие ноды не удаляются.
2. потому что у тебя еретический дизайн программы



Drowsy ©   (2016-09-20 03:37) [3]


> 1. при смене парента никакие ноды не удаляются.
> 2. потому что у тебя еретический дизайн программы




На форме 2 панели и кнопка На первой панели дерево. По кнопке перемещаю дерево на другую панель. При смене парента, вызывается событие удаление нодов.

unit UnitTmp;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type

 TForm1 = class(TForm)

   Panel1: TPanel;

   TreeView1: TTreeView;

   Panel2: TPanel;

   Button2: TButton;

   procedure Button2Click(Sender: TObject);

   procedure TreeView1Deletion(Sender: TObject; Node: TTreeNode);

 private

   { Private declarations }

 public

   { Public declarations }

 end;



var

 Form1: TForm1;

implementation

{$R *.dfm}





procedure TForm1.Button2Click(Sender: TObject);

var TmpTree : TTreeView;

begin

 TmpTree := TreeView1;

 TreeView1.Owner.RemoveComponent(TreeView1);

 Panel2.InsertComponent(TmpTree);

 TmpTree.Parent := Panel2;  // <- здесь происходит вызов  TreeView1Deletion для всех узлов дерева.

end;



procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);

begin

// OnDeletion – Генерируется при удалении Node дерева для каждого удаляемого Node.

// Параметр “Node” содержит Node, который удаляется.

// Таким образом, с помощью данного события удобно, к примеру,

// перед удалением Node разрушать связанные с ним данные,

// если таковые содержатся в его свойстве Data, и т.д.

end;



end.




iop ©   (2016-09-20 09:03) [4]

при смене парента никакие ноды не удаляются.



iop ©   (2016-09-20 09:06) [5]

TForm1.Button1Click(Sender : TObject);
f : TFotm;
शुरू करना
f := TForm2.Create(Application);
TreeView1.Parent := f;
अंत;

тыцнешь в кнопку сто раз - сто раз тривью сменит парента и не потеряет ни одного нода.
хотя можешь тыцнуть не сто, а тысячу раз.



Drowsy ©   (2016-09-20 10:04) [6]


> iop © (20.09.16 09: 06) [5]


тыкнул сто, потом тысячу.
теперь ты :

создай событие  Tree.onDeletion и поставь в нём точку остановки.


procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin

// OnDeletion – Генерируется при удалении Node дерева для каждого удаляемого Node.

// Параметр “Node” содержит Node, который удаляется.

// Таким образом, с помощью данного события удобно, к примеру,

// перед удалением Node разрушать связанные с ним данные,

// если таковые содержатся в его свойстве Data, и т.д.

end;



iop ©   (2016-09-20 10:05) [7]

еще раз для погромистов:
при смене парента никакие узлы в тривью не удаляются.



Drowsy ©   (2016-09-20 19:53) [8]


> iop © (20.09.16 10: 05) [7]

Если определено событие Tree.onDeletion, то при смене парента, оно вызывается. Согласен?



iop ©   (2016-09-20 20:57) [9]

при смене парента
событие вызывается,
ноды не удаляются.



iop ©   (2016-09-20 21:11) [10]

да и вызывается при смене парента оно не везде.

в ХЕ8 никакого OnDeletion при смене парента не вызывается вообще.

TTVExpandedEvent is used to respond to notifications of events that occur to the nodes of a tree view control. It is a सामान्य event handler for various events that notify the tree view of something that happened to a node.

Sender is the tree-view control that contains the node that is the focus of the notification.

Node is the item that has been विस्तारित, ढह, हटाए गए, or which is about to be drawn.

т.е. в ранних версиях возможно при любом чихе в дереве вызывались скопом все обработчики типа TTVExpandedEvent вне зависимости от того что там реально произошло.



पन्ने: 1 पूरी शाखा

मंच: "शुरुआती";
वर्तमान संग्रह: 2018.11.04;
डाउनलोड करें: [xml.tar.bz2];

ऊपर









मेमोरी: 0.6 एमबी
समय: 0.023 c
2-1473936376
lewka
2016-09-15 13:46
2018.11.04
तृतीय-पक्ष अनुप्रयोगों के लिए स्थानांतरण कीस्ट्रोक्स


2-1474184193
एलेक्स सेरोव
2016-09-18 10:36
2018.11.04
पासवर्ड के तहत एक्सेल टेबल कैसे खोलें?


2-1474009068
उपयोगकर्ता
2016-09-16 09:57
2018.11.04
HTML फॉर्म भरना


2-1474206922
KropotkinGosha
2016-09-18 16:55
2018.11.04
फ़ंक्शन में कोड निष्पादित नहीं किया गया है


2-1473404951
Valya
2016-09-09 10:09
2018.11.04
संकेत





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский