TImage Drop aus anderen Anwendung



  • Hallo...

    Wie kann ich ein Bild zb. aus dem Explorer auf ein TImage in meinem Form ziehen so das es dort angezeigt wird?

    C++ XE7

    Vielen Dank,
    Markus



  • Hallo,

    mit dem Windows Explorer werden immer nur Dateinamen übertragen.
    Dazu muß man auf die Windows Message WM_DROPFILES horchen:

    // in der Main-Form Klasse (Headerdatei)
    protected:
    	void __fastcall WMDropFiles(TMessage &message);
    
    BEGIN_MESSAGE_MAP
    	VCL_MESSAGE_HANDLER(WM_DROPFILES, TMessage, WMDropFiles)
    END_MESSAGE_MAP(TForm)
    
    // in der Main-Form Sourcedatei
    void __fastcall TDropFilesForm::WMDropFiles(TMessage &message)
    {
    	static char cFilename[MAXPATH];
    	HANDLE hDrop = (HANDLE)message.WParam;
    
    	unsigned int nCount = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
    
    	for(unsigned int i=0; i<nCount; i++)
    	{
    		DragQueryFile(hDrop, i, cFilename, MAXPATH);
    		// do something with cFilename
    	}
    
    	DragFinish(hDrop);
    }
    

    Edit: im Konstruktor der Form noch folgendes einfügen

    DragAcceptFiles(Handle, TRUE);
    


  • Danke..

    funktioniert leider nicht, da Imag1 kein Handle hat.

    Gruss, Markus



  • Es wird dir doch der Dateiname übergeben. Das Bild kann du doch dann mit

    Image1->Picture->LoadFromFile(cFilename);
    

    anzeigen lassen.



  • Haloo ja sowit klar nur folgendes geht nicht da es kein Handle hat.

    DragAcceptFiles(Image1->Handle, TRUE);
    DragAcceptFiles(Image2->handle, TRUE);

    lg, markus



  • DragAcceptFiles(...) will Handle vom Haupt- Form!!!



  • Hallo

    habe es jetzt so gelöst das

    DragAcceptFiles(Form1->Handle, true);
    

    und bei den Image1 - Image10
    ein "OnMouseEnter" Event ausglöst wird. So bekomme ich das Bild dann auch ins
    richtige TImage.

    Vielen Dank,
    Markus


Log in to reply