Autor Beitrag
TheNeon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: 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:

ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mi 19.05.04 14:17 
Also bei mir funktioniert das unter Delphi6:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Mi 19.05.04 15:36 
:shock: oops, mein Fehler ........ war wohl in gedanken :D statt HTML1 muss es natürlich TreeView1 heißen.

sry :roll:



...habs oben nochmal korrigiert :?
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Do 20.05.04 07:47 
negativ, hatte mich nur hier beim Abtippen vertan.
Das Phänomen besteht immernoch......
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: 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 ....

ausblenden Delphi-Quelltext
1:
Quelle := TreeView1.Selected;					

Damit wird Quelle nicht zur Kopie des selektierten Nodes, sondern Quelle zeigt anschliessend nur auf den Selektierten.

ausblenden Delphi-Quelltext
1:
TreeView1.Selected.Delete;					

Hier löscht du den Selektierten. Quelle zeigt damit ins Nirwana.

ausblenden 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.
TheNeon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: 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 ....

ausblenden Delphi-Quelltext
1:
Quelle := TreeView1.Selected;					

Damit wird Quelle nicht zur Kopie des selektierten Nodes, sondern Quelle zeigt anschliessend nur auf den Selektierten.

ausblenden Delphi-Quelltext
1:
TreeView1.Selected.Delete;					

Hier löscht du den Selektierten. Quelle zeigt damit ins Nirwana.

ausblenden 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.


:idea: Big Thx :idea:

hatte eigentlich angenommen, dass er den TreeNode kopiert und nicht nur auf ihn verweist :roll: .... das erklärt natürlich einiges :wink:

Danke allen für die Antworten
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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 :roll: .... das erklärt natürlich einiges :wink:

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Fr 21.05.04 11:10 
:roll: 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. :D
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Fr 21.05.04 11:34 
mensch ....... hier lernt man ja mit jedem Beitrag was neues :D

aha aha ........ Assign() also .... und ich frage mich wozu das Teil dient :roll:


BIG THX @ ALL