AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Drag'n Drop aus beliebigen anderen Formular
Thema durchsuchen
Ansicht
Themen-Optionen

Drag'n Drop aus beliebigen anderen Formular

Ein Thema von Maja Jessica · begonnen am 19. Okt 2006 · letzter Beitrag vom 19. Okt 2006
Antwort Antwort
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#1

Drag'n Drop aus beliebigen anderen Formular

  Alt 19. Okt 2006, 13:16
Hallo

ich versuche mich gerade an Drag'n Drop, welches, durch die die Suche in diesem Forum, soweit auch schon im Groben funktioniert.
Jetzt möchte ich aber aus einem anderen beliebigen Formular "ziehen" und im Hauptformular "ablegen".

Ich habe Form1 und Form2, jeweils mit einer ListBox. Aus Form2.ListBox1 kann ich ein Item auf Form1.ListBox1 verschieben.
Jetzt möchte ich aber nicht nur von Form2.ListBox1 nach Form1.ListBox1 ziehen sondern aus einer x-beliebigen Form.ListBox nach Form1.ListBox. Dabei klemmt es bei mir mit der Schreibweise, wie ich der DragDropRoutine der Form1 verkünde, woher, also von welcher Form/ListBox, das Item kommt.

Hier mein Ansatz, mit der 'statischen' Einbindung von Form1/Form2-ListBox.

Delphi-Quellcode:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Source is TListBox then
    Accept := True;
  else
    Accept := False
end;

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  ListBox1.Items.Add(Form2.ListBox1.Items[Form2.ListBox1.itemindex]);
  Form2.ListBox1.Items.Delete(Form2.ListBox1.itemindex);
end;
Hm, aus der 'Source' kann ich erkennen von welchen Objekt das Drag ausging ...
Woher weis ich aber von welchen Formular? Sender?

Hat jemand eine Idee?

Danke und Gruß, MJ
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Drag'n Drop aus beliebigen anderen Formular

  Alt 19. Okt 2006, 13:38
Hallo Maja Jessica,

in der Unit Forms gibt es - zumindest bei Delphi 6 - die Funktion Delphi-Referenz durchsuchenGetParentForm. Sie liefert zu einem Control das Formular, auf dem sich das übergebene Control befindet.

Beim DragDrop-Ereignis gibt Sender den Auslöser der Nachricht an (in deinem Fall die empfangende Listbox). In Source steht der Ursprung der Daten (in deinem Fall die Listbox mit den Quelldaten).


Gruß Hawkeye
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#3

Re: Drag'n Drop aus beliebigen anderen Formular

  Alt 19. Okt 2006, 14:21
Aha.

GetParentForm gibt es auch schon unter Delphi4
Funktioniert auch, testweise mit
ShowMessage(GetParentForm(ListBox1).Caption); Nur bringt es mich nicht wirklich weiter, weil, wenn ich es in Form1 anwende, logischweise immer Form1 als Parent der ListBox1 liefert.

Ob ich den Umweg über "welche Form ist gerade aktiv" gehen muss?

*grübel*

Danke für die Hilfe

MJ
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Drag'n Drop aus beliebigen anderen Formular

  Alt 19. Okt 2006, 15:40
Eigentlich solltest du mit Sender und Source Zugang zu allen Informationen haben:

Delphi-Quellcode:
procedure TForm1.ListBox1DragDrop (Sender, Source: TObject; X, Y: Integer);
var
  SourceBox, TargetBox : TListBox;
begin
  if ((Sender is TListBox) and (Source is TListBox)) then
    begin
      SourceBox := TListBox(Source); // da kommen die Daten her
      TargetBox := TListBox(Sender); // da sollen sie hin
      ShowMessage('Source: ' + SourceBox.Name + ', Form: '
                             + GetParentForm(SourceBox).Caption
                             + #13#10 +
                  'Target: ' + TargetBox.Name + ', Form: '
                             + GetParentForm(TargetBox).Caption);
    end;
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#5

Re: Drag'n Drop aus beliebigen anderen Formular

  Alt 19. Okt 2006, 16:26
Hi

Ja Prima, klappt wunderhübsch

Delphi-Quellcode:
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  SourceBox, TargetBox : TListBox;
begin
  if ((Sender is TListBox) and (Source is TListBox)) then
  begin
    SourceBox := TListBox(Source); // da kommen die Daten her
    TargetBox := TListBox(Sender); // da sollen sie hin
    TargetBox.Items.Add(SourceBox.Items[SourceBox.ItemIndex]);
    SourceBox.Items.Delete(SourceBox.ItemIndex);
  end;
end;
So der grobe Ansatz (frei kopiert und angepasst), natürlich fehlen noch diverse Prüfungen etc.
Und ich hatte mich in den Gedanken verrannt ich müsse die Quellform und die ListBox auf der Quellform beide über ihre Namen ansprechen.
Auf den einfacheren Weg, SourceBox := TListBox(Source), der alle benötigten Informationen mitliefert, bin ich natürlich nicht gekommen.

Herzlichen Dank nochmal!

MJ
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz