Autor |
Beitrag |
TheNeon
      
Beiträge: 408
Windows
VS2010 C#
|
Verfasst: Mi 19.05.04 10:42
Welcome,
habe heute wieder was schönes herausgefunden .... neben der Showmessage-Sensation gibts auch noch was nettes bei TreeViews. Ich nehme allerdings an, dass es auf jede Komponente zutrifft:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); var Quelle: TTreeNode; begin Quelle := TreeView1.Selected; if TreeView1.GetNodeAt(x, y).Index = TreeView1.Items.Count - 1 then begin TreeView1.Selected.Delete; TreeView1.Items.Add(nil, Quelle.Text); end; end; |
Das Ergebnis ist, dass der Nachfolger wie gewollt am Ende der Liste ist, allerdings ohne Inhalt
Lösung ist die hier:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); var Quelle: TTreeNode; Text: String; begin Quelle := TreeView1.Selected; if TreeView1.GetNodeAt(x, y).Index = TreeView1.Items.Count - 1 then begin Text := Quelle.Text; TreeView1.Selected.Delete; TreeView1.Items.Add(nil, Text); end; end; |
weiß jemand wieso das so ist ?????
CU
Zuletzt bearbeitet von TheNeon am Fr 21.05.04 11:11, insgesamt 2-mal bearbeitet
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Mi 19.05.04 11:51
Könnte es sein, dass HTML1.Selected auch ohne Inhalt ist, oder ungültige, für die TreeView nicht darstellbare Zeichen enthält (UNICODE?) ??? Ich würds per Caption:="..." oder per ShowMessage mal prüfen.
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
TheNeon 
      
Beiträge: 408
Windows
VS2010 C#
|
Verfasst: Mi 19.05.04 13:13
negativ.
Alle Items sind gefüllt und dieser Versuch wurde auch mit derselben Liste als auch mit denselben Items gemacht.
Showmessage beim ersten Versuch ergab, dass Quelle.Text leer ist. Aber wieso, wenn sie doch eigentlich Inhalt drin hat 
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Mi 19.05.04 14:17
Also bei mir funktioniert das unter Delphi6:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer); var Quelle: TTreeNode; begin Quelle := TreeView1.Selected; if TreeView2.GetNodeAt(x, y).Index = TreeView2.Items.Count - 1 then begin TreeView2.Selected.Delete; TreeView2.Items.Add(nil, Quelle.Text); end; end; | TreeView1 und TreeView2 sind beides Treeviews, beide müssen mindestens eine Node haben und vor dem Dragging muss ich in TreeView2 eine Node per Klick auswählen, aber das hängt nicht mit dem Problem zusammen, daß angeblich ein leerer Node erzeugt wird.
Wenn dein HTML1 auch vom Typ TTreeView ist, müsste das eigentlich funktionieren (nur daß er bei mir TreeView1 heißt und dein TreeView1 bei mir TreeView2)...
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
TheNeon 
      
Beiträge: 408
Windows
VS2010 C#
|
Verfasst: Mi 19.05.04 15:36
 oops, mein Fehler ........ war wohl in gedanken  statt HTML1 muss es natürlich TreeView1 heißen.
sry
...habs oben nochmal korrigiert 
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Mi 19.05.04 22:17
Also klappt's jetzt?
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
TheNeon 
      
Beiträge: 408
Windows
VS2010 C#
|
Verfasst: Do 20.05.04 07:47
negativ, hatte mich nur hier beim Abtippen vertan.
Das Phänomen besteht immernoch......
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Do 20.05.04 08:45
Titel: Re: Delphi-Phänomen die x-te
TheNeon hat folgendes geschrieben: | Ich nehme allerdings an, dass es auf jede Komponente zutrifft: |
Was zu hoffen wäre ....
Delphi-Quelltext 1:
| Quelle := TreeView1.Selected; |
Damit wird Quelle nicht zur Kopie des selektierten Nodes, sondern Quelle zeigt anschliessend nur auf den Selektierten.
Delphi-Quelltext 1:
| TreeView1.Selected.Delete; |
Hier löscht du den Selektierten. Quelle zeigt damit ins Nirwana.
Delphi-Quelltext 1:
| TreeView1.Items.Add(nil, Quelle.Text); |
Da Quelle ins Nirwana zeigt, hat es keinen (definierten) Text mehr.
Somit ist es normal, dass kein (definierter) Text übergeben wird. Wenn der Text, wie in deinem Lösungsvorschlag, vor Löschung des Selektierten noch zwischengespeichert (sprich gerettet) wird, bleibt er natürlich verfügbar.
Das Beispiel von tommie-lie funktioniert deshalb, weil dort Quelle (ebenfalls) auf ein Node des TreeView 1 zeigt, während in TreeView 2 gelöscht wird. Dort "überlebt" also der Node (in TreeView1), auf den Quelle zeigt. Deshalb bleibt da auch Quelle.Text verfügbar.
|
|
TheNeon 
      
Beiträge: 408
Windows
VS2010 C#
|
Verfasst: Do 20.05.04 09:53
Titel: Re: Delphi-Phänomen die x-te
IngoD7 hat folgendes geschrieben: | TheNeon hat folgendes geschrieben: | Ich nehme allerdings an, dass es auf jede Komponente zutrifft: |
Was zu hoffen wäre ....
Delphi-Quelltext 1:
| Quelle := TreeView1.Selected; |
Damit wird Quelle nicht zur Kopie des selektierten Nodes, sondern Quelle zeigt anschliessend nur auf den Selektierten.
Delphi-Quelltext 1:
| TreeView1.Selected.Delete; |
Hier löscht du den Selektierten. Quelle zeigt damit ins Nirwana.
Delphi-Quelltext 1:
| TreeView1.Items.Add(nil, Quelle.Text); |
Da Quelle ins Nirwana zeigt, hat es keinen (definierten) Text mehr.
Somit ist es normal, dass kein (definierter) Text übergeben wird. Wenn der Text, wie in deinem Lösungsvorschlag, vor Löschung des Selektierten noch zwischengespeichert (sprich gerettet) wird, bleibt er natürlich verfügbar.
Das Beispiel von tommie-lie funktioniert deshalb, weil dort Quelle (ebenfalls) auf ein Node des TreeView1 zeigt, während in TreeView2 gelöscht wird. Dort "überlebt" also der Node (in TreeView1), auf den Quelle zeigt. Deshalb bleibt da auch Quelle.Text verfügbar. |
 Big Thx
hatte eigentlich angenommen, dass er den TreeNode kopiert und nicht nur auf ihn verweist  .... das erklärt natürlich einiges
Danke allen für die Antworten
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Do 20.05.04 15:30
Mist, das wäre mein nächster Vorschlag gewesen.
Mich hat die Benennung irritiert
Als Modem-User hat man doch nur Nachteile... und wenn man dann noch lange schläft weil Feiertag ist...
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Do 20.05.04 22:42
Titel: Re: Delphi-Phänomen die x-te
TheNeon hat folgendes geschrieben: | hatte eigentlich angenommen, dass er den TreeNode kopiert und nicht nur auf ihn verweist .... das erklärt natürlich einiges |
In solchen Fällen immer daran denken: Objekte sind nur Referenzen! Daher werden in solchen Fällen immer nur Referenzen und nie Objekte kopiert!!
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
TheNeon 
      
Beiträge: 408
Windows
VS2010 C#
|
Verfasst: Fr 21.05.04 11:10
 also bisher dachte ich, dass die Objekte komplett kopiert werden, denn wozu gibts denn z.B. Zeiger?! ...dachte die sind dann für die Referenzen zuständig
Na jut, danke, dass ihr mich des besseren belehrt habt. 
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Fr 21.05.04 11:23
Referenzen = Zeiger
Daher werden eben nur die Zeiger/Referenzen auf die Objekte kopiert und nicht das was hinter den Zeigern steckt - das Objekt selbst...
Für das kopieren von Objekten gibt es die Methode Assign().
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
TheNeon 
      
Beiträge: 408
Windows
VS2010 C#
|
Verfasst: Fr 21.05.04 11:34
mensch ....... hier lernt man ja mit jedem Beitrag was neues
aha aha ........ Assign() also .... und ich frage mich wozu das Teil dient
BIG THX @ ALL
|
|