Jump to content
MrTheDzam

Problem with drag & drop

Recommended Posts

MrTheDzam

Hello guys :D

I have an edit, with Drop event, using @GUI_DragFile macro. I check the extension of the input file (just allow txt and ini file), if the extension is not allowed then return an error. 

But when the error display, the edit have the location of that file. ( Example: I drag the file "Example.au3" at Desktop - which have extension is not allowed - to the Edit, the error display, and the file location "C:\User\MeowMeow\Desktop\Example.au3" string is set for the edit )

How can i eliminate the file location, which is set to edit?

Help me <3 

(P.s: the edit have some text before, so i can't use GuiCtrlSetData)

Share this post


Link to post
Share on other sites
water

FileGetShortName returns the "8.3 short path+name of the path+name passed."

I think he is looking for _PathSplit which splits the filepath into drive, dir, filename and extension.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-06-01 - Version 1.4.9.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-01-27 - Version 1.3.3.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
MrTheDzam

i'm vietnamese, so it's hard to try to describe it out -~-

 

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#include "File.au3"
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 623, 442, 192, 124, -1, BitOR($WS_EX_ACCEPTFILES,$WS_EX_WINDOWEDGE))
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_DROPPED, "DropFile")
Global $Edit1 = GUICtrlCreateEdit("", 104, 48, 361, 233)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    Sleep(100)
WEnd

Func DropFile()
    Local $Dir = "", $Drive = "", $Name = "", $Extension = ""
    $Source = _PathSplit(@GUI_DragFile, $Drive, $Dir, $Name, $Extension)
    If $Source[4] <> ".txt" And $Source[4] <> ".ini" Then
        MsgBox(16 + 262144, "Message", "File not allowed!")
    Else
        GUICtrlSetData($Edit1, FileRead(@GUI_DragFile))
    EndIf
EndFunc

Func Form1Close()
    Exit
EndFunc


Example: i drag one .txt or .ini file to the GUI, which support Drag and drop. Then i drag one .au3 file to it. The error display and the problem is the location of the au3 file is printed under the content of txt (ini) file.

Thanks <3

Edited by MrTheDzam
code edit

Share this post


Link to post
Share on other sites
water

Your edit field now has two tasks. Accept the dragged filepath and display the content.
I would split this tasks. Create a small input field where the users can drag the filepath to.
If .txt or .ini then display the file content in a second edit control.
For anything else display the error message and clear the input field.
So content and filepath no longer mix in a single control.

 


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-06-01 - Version 1.4.9.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-01-27 - Version 1.3.3.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
MrTheDzam

well, i'm developing a program like notepad, and i need space for user type in, so i don't think creating a new label is helpful in this situation :( 

anyone have any other idea? :'( 

 

Share this post


Link to post
Share on other sites
water

I'm talking about something like this:

You need to d&d the file to the input field. If it is a valid file then the content is displayed in the edit field.
Advantage: You always see the filepath of the file you are currently processing.

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include "File.au3"
Opt("GUIOnEventMode", 1)
Global $sActiveFile = ""
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 623, 442, 192, 124, -1, BitOR($WS_EX_ACCEPTFILES,$WS_EX_WINDOWEDGE))
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_DROPPED, "DropFile")
Global $idInput1 = GUICtrlCreateInput("", 104, 20, 361, 20)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
Global $Edit1 = GUICtrlCreateEdit("", 104, 48, 361, 233)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    Sleep(100)
WEnd

Func DropFile()
    Local $Dir = "", $Drive = "", $Name = "", $Extension = ""
    $Source = _PathSplit(@GUI_DragFile, $Drive, $Dir, $Name, $Extension)
    If $Source[4] <> ".txt" And $Source[4] <> ".ini" Then
        MsgBox(16 + 262144, "Message", "File not allowed!")
        GUICtrlSetData($idInput1, $sActiveFile)
    Else
        $sActiveFile = @GUI_DragFile
        GUICtrlSetData($Edit1, FileRead(@GUI_DragFile))
    EndIf
EndFunc

Func Form1Close()
    Exit
EndFunc

 

Edited by water

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-06-01 - Version 1.4.9.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-01-27 - Version 1.3.3.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
MrTheDzam

Well :P you are understanding wrong what i'm asking. I'm asking how to eliminate the file location in the "idInput1" input :P

That mean (in my code) if you drag the file into the edit and the extension is not allowed, then the file location will not be set as a data of the Edit1 :D 

anyway, thanks for the answer

Edited by MrTheDzam

Share this post


Link to post
Share on other sites
water
Quote

file location will not be set as a data of the Edit1

That's exactly what my solution does.

A wrong filepath only gets displayed in Input1 while the MsgBox is active. And the filepath of a wrong file does not get mixed with the content of a correct file in Edit1.
 


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-06-01 - Version 1.4.9.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-01-27 - Version 1.3.3.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
MrTheDzam
Just now, water said:

at's exactly what my solution does.

A wrong filepath only gets displayed in Input1 while the MsgBox is active. And the filepath of a wrong file does not get mixed with the content of a correct file in Edit1.
 

i'm doing what notepad can't doing: drag and drop the file into the text editing zone. and if i set the data to "" then any existing data in there will be empty ( :( )

but if i create a new input to drag & drop file into it, then the form will no longer like notepad :( 

Share this post


Link to post
Share on other sites
water

If you change the functionality (drag & drop) why not slightly change the look by adding an input field?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-06-01 - Version 1.4.9.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-01-27 - Version 1.3.3.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
MrTheDzam

well, i'll do like you said. thanks for helping me :D 

 

- From Vietnam with love o:)

Share this post


Link to post
Share on other sites
BetaLeaf

I use $fArray=stringsplit($string,"/\") and it returns an array. The last part of the array is always the filename.fileext. if the array unbound is 5 then $fArray[5] is what I need. Do you understand?


False Positive Reporter - Mass email all anti virus vendors with an attachment of your program for fast and easy whitelisting.

PortableApps.com App Creation Wizard  - A simple GUI-based Wizard for creating PortableApps.

SoundBoard - Play any song or sound you want at the press of a hotkey.

My GitHub Page: https://github.com/BetaLeaf

Share this post


Link to post
Share on other sites
MrTheDzam
3 minutes ago, BetaLeaf said:

I use $fArray=stringsplit($string,"/\") and it returns an array. The last part of the array is always the filename.fileext. if the array unbound is 5 then $fArray[5] is what I need. Do you understand?

that is not what i asked for =~= I just need to eliminate the file location, which is set to the Edit when i drag the file have un-allowed extension to it 

you need to read my code at #4 to see my problem =~=

Edited by MrTheDzam

Share this post


Link to post
Share on other sites
BetaLeaf

I read and understand you are trying to remove the file location. If your dropped file is "C:\User\MeowMeow\Desktop\Example.au3" and you want to convert it to "Example.au3" then that's what my code will do. 


False Positive Reporter - Mass email all anti virus vendors with an attachment of your program for fast and easy whitelisting.

PortableApps.com App Creation Wizard  - A simple GUI-based Wizard for creating PortableApps.

SoundBoard - Play any song or sound you want at the press of a hotkey.

My GitHub Page: https://github.com/BetaLeaf

Share this post


Link to post
Share on other sites
MrTheDzam
2 minutes ago, BetaLeaf said:

I read and understand you are trying to remove the file location. If your dropped file is "C:\User\MeowMeow\Desktop\Example.au3" and you want to convert it to "Example.au3" then that's what my code will do. 

i don't need to convert it to "Exanple.au3". I need to remove it from the edit :D 
You have wrong idea :D anyway, thanks for help me :D 

  • Like 1

Share this post


Link to post
Share on other sites
Danyfirex

Hello. you can do this:

 

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPISys.au3>
#include <APIConstants.au3>
#include <Array.au3>
#include <WinAPIEx.au3>
#include "File.au3"

Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 623, 442, 192, 124, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_WINDOWEDGE))
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
;~ GUISetOnEvent($GUI_EVENT_DROPPED, "DropFile")
Global $Edit1 = GUICtrlCreateEdit("", 104, 48, 361, 233)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES')
#EndRegion ### END Koda GUI section ###

While 1
    Sleep(100)
WEnd

Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $lParam
    Switch $iMsg
        Case $WM_DROPFILES
            Local Const $aReturn = _WinAPI_DragQueryFileEx($wParam)
            If UBound($aReturn) Then
                Local $Dir = "", $Drive = "", $Name = "", $Extension = ""
                $Source = _PathSplit($aReturn[1], $Drive, $Dir, $Name, $Extension)
                If $Source[4] <> ".txt" And $Source[4] <> ".ini" Then
                    MsgBox(16 + 262144, "Message", "File not allowed!")
                    Return False
                EndIf
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_DROPFILES



Func Form1Close()
    Exit
EndFunc   ;==>Form1Close

Saludos

  • Like 1

Share this post


Link to post
Share on other sites
water

I'm too slow :(
That was exactly what I would have proposed next.

  • Like 1

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-06-01 - Version 1.4.9.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-01-27 - Version 1.3.3.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites
MrTheDzam

Thanks guys.

I fixed the problem by creating a new GUI (its like the upload page of MediaFire :P ), and its work great XD 

index3.png

Example

Again, thanks for helping me :D 

Edited by MrTheDzam
  • Like 1

Share this post


Link to post
Share on other sites
BetaLeaf

No problem. Sorry I didn't understand your question, OP. Glad someone was able to help you.


False Positive Reporter - Mass email all anti virus vendors with an attachment of your program for fast and easy whitelisting.

PortableApps.com App Creation Wizard  - A simple GUI-based Wizard for creating PortableApps.

SoundBoard - Play any song or sound you want at the press of a hotkey.

My GitHub Page: https://github.com/BetaLeaf

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • Zein
      By Zein
      #include "..\Include\Array.au3" #include "..\Include\File.au3" #include "..\Include\AutoItConstants.au3" Local $aRetArray Local $sFilePath = "n.csv" _FileReadToArray($sFilePath, $aRetArray, ",") ; _FileReadToArray($sFilePath, $aRetArray, $FRTA_COUNT, ",") _ArrayDisplay($aRetArray, "Original", Default, 8) The above code shows two versions of _FileReadToArray and both don't work as expected.
      The first one doesn't use the comma as a delimiter. (so I get a single column array)  I tried adding "Default" between $aRetArray and "," then it told me it had an incorrect number of parameters. 

      I looked again at the documentation:
       
      #include <File.au3> _FileReadToArray ( $sFilePath, ByRef $vReturn [, $iFlags = $FRTA_COUNT [, $sDelimiter = ""]] )
      And I with or without the flags params I should be getting a 2D array due to my file being a csv. 
      I then tried a regular flag, $FRTA_COUNT, and it tells me that I'm using a variable $FRTA_COUNT while it's not declared. Tried putting in 1 instead and it told me again, incorrect number of params. 

       
    • nooneclose
      By nooneclose
      I need to perform a subtotal in excel and I would like to automate this process using Autoit if possible like always any and all help will be greatly appreciated. 
      I can not find a good example but the two from Microsoft. Here is one of the two from msdn.microsoft.com/en-us/vba/excel-vba/articles/range-subtotal-method-excel
      I do not really understand how to translate this into AutoIt, but I gave it a try and here is what I have.
      $OpenRange      = "A1:E200" $xlSum          = -4157 $Added_Array[2] = [2, 3] $OpenRange.Subtotal("B1", $xlSum, $Added_Array, True, False, True) I just need to perform a subtotal on a range based on a header called department, and then perform a sum on the results.
    • nooneclose
      By nooneclose
      How to use _Excel_RangeSort to sort my excel file by three different headers Column A1, B1, and C1 have headers on which I want to sort by. The headers on which I want to sort are department, employee type, and name.
      I still really new to AutoIt so I do not actually know how to properly start this line or lines of code, to be honest. The example code is the best I can do.
      _Excel_RangeSort($OpenWorkbook, Default, "A1:C1", "1:1", $xlDescending, Default, $xlYes, Default, $xlSortRows) I just need to sort by those three headers in that order of department, employee type, and name, plus in descending order.
       
      any and all help would be greatly appreciated.  Thank you!
    • Eminence
      By Eminence
      Hello,
      Using SQLite, I was trying to select a specific column with having duplicate entries removed by using the DISTINCT function. 
      Local $sQuery = "SELECT DISTINCT supervisor, COUNT(DISTINCT employee_name) FROM data_db What the above snippet does is just list only one supervisor but with the total count of unique employee names in the whole database when it should be listing out all supervisor entries from the database and list the total count of employees per each supervisors. If I remove the COUNT function, it does list out all unique entries of supervisor names from the list. Attached is a screenshot of an example database as well. 
      Any help will be much appreciated. Thank you!

    • PramodR
      By PramodR
       
      I see couple of ways to import module ,  one with specifying absolute path of the file to get imported, by this logic i believe to import a specific module will be like #include <c:\modulepath\duplicatemodule.au3>
      but i see some registry changes also made in this link , can someone explain why that registry change is really required.
       
×