Drag n Drop - Wie komme ich an die Grafik ?



  • Morgen zusammen ...

    In eine meiner Form sollen Verknüpfungen, wie bspw. Firefox, via DragnDrop verlinkt werden. Nach einigen Stunden habe ich das Prinzip wohl verstanden. Probleme habe ich jedoch dabei, an das dazugehörige Icon zu kommen.

    private: System::Void iconpanel_DragEnter(System::Object^  sender, System::Windows::Forms::DragEventArgs^  e) 
    				 {
    				 if (e->Data->GetDataPresent(DataFormats::FileDrop)) e->Effect = DragDropEffects::Copy;
    				 }
    	private: System::Void iconpanel_DragDrop(System::Object^  sender, System::Windows::Forms::DragEventArgs^  e) 
    				 {				 
    				 array<String^> ^dateien = (array<String^>^)e->Data->GetData ( DataFormats::FileDrop);				 
    				 array<Object^> ^formate = e->Data->GetFormats (true);
    
    				 iconsanlegen (dateien);
    				 }
    

    Wenn ich nun eine Verknüpfung auf meine Form ziehe habe ich folgende Formate zur Verfügung:

    [0] "Shell IDList Array" System::String^
    [1] "Shell Object Offsets" System::String^
    [2] "DragImageBits" System::String^
    [3] "DragContext" System::String^
    [4] "InShellDragLoop" System::String^
    [5] "FileDrop" System::String^
    [6] "FileNameW" System::String^
    [7] "FileName" System::String^

    Versucht habe ich es via :

    private: System::Void iconpanel_DragDrop(System::Object^  sender, System::Windows::Forms::DragEventArgs^  e) 
    				 {				 
    				 array<String^>^dateien = (array<String^>^)e->Data->GetData ( DataFormats::FileDrop);				 
    				 array<Object^>^ formate = e->Data->GetFormats (true);
    
    				 System::IO::MemoryStream^ mstream = gcnew System::IO::MemoryStream ();
    				 mstream = dynamic_cast <System::IO::MemoryStream^>( e->Data->GetData ("DragImageBits", true) );
    
    				 Image^ bild = Image::FromStream (mstream);
    
    				 iconsanlegen (dateien);
    				 }
    

    Dieser Versuch scheint mir aber auch irgendwie nicht sinnvoll, denn was ist wenn ich mehrere Verlinkungen gleichzeitig setze? Also irgendwie fehlt es mir hier im Moment am Verständniss, und warte auf den AHA Effekt 🙂



  • shaun1981 schrieb:

    System::IO::MemoryStream^ mstream = dynamic_cast <System::IO::MemoryStream^>( e->Data->GetData ("DragImageBits", true) );
    
      if(mstream)
        Image^ bild = Image::FromStream (mstream);
    

    Dieser Versuch scheint mir aber auch irgendwie nicht sinnvoll, denn was ist wenn ich mehrere Verlinkungen gleichzeitig setze? Also irgendwie fehlt es mir hier im Moment am Verständniss, und warte auf den AHA Effekt 🙂

    Doch so ist es richtig. Das Bild was zu erhälst, ist das was du unter deinem Mauscurser siehst und nicht das der einzelnen Symbole. (Also Bild mit Symbolen und nach außen hin radial zunehmende Alphatransparenz)

    Die einzelnen Icon der Verknüpfungen ksnn st du dir über WinAPI holen oder über die ExtractAssociatedIcon-Methode.



  • Muss hier noch mal ansetzen:

    Warum bricht mein Programm bei diesen Zeilen die bearbeitung ab?

    private: System::Void DragDropEvent(System::Object^  sender, System::Windows::Forms::DragEventArgs^  e) 
    			 {		 
    			 array<String^>^dateien = (array<String^>^)e->Data->GetData( DataFormats::FileDrop );
    
    			 System::IO::MemoryStream^ mstream = dynamic_cast <System::IO::MemoryStream^>( e->Data->GetData ("DragImageBits", true) );
    
    			 if(mstream)
    			 System::Drawing::Image^ image = Image::FromStream (mstream); //<--- Hier wird abgebrochen
    

Anmelden zum Antworten