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-12-03 - Version 1.4.11.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
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-12-03 - Version 1.4.11.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
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-12-03 - Version 1.4.11.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
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-12-03 - Version 1.4.11.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
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-12-03 - Version 1.4.11.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
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.

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.

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-12-03 - Version 1.4.11.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
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.

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

    • gahhon
      By gahhon
      While Not _Login() _Login() WEnd _Initial_Check() GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE, $GUI_CLOSE_BUTTON, $BTN_EXIT _GUIDisable($GUI_MAIN, 0, 30) _Close_Application() EndSwitch WEnd ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Password_Check ; Description ...: To check against the input with the password file ; =============================================================================================================================== Func _Password_Check() Local $IN_PASSWORD = _Metro_InputBox("Please Enter Your Password:" , 11, "", True, True) If @error Then Return SetError(1, 0, "") ElseIf $PASSWORD <> $IN_PASSWORD Then Return SetError(2, 0, "Access Denied!") Else Return True EndIf EndFunc ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Login ; Description ...: Login ; =============================================================================================================================== Func _Login() Local $FLAG_LOGIN = _Password_Check() If @error = 1 Then _Close_Application() ElseIf @error = 2 Then _Metro_MsgBox(0, "", $FLAG_LOGIN) Return False Else _Metro_MsgBox(0, "", "Access Granted!") Return True EndIf EndFunc When the application start, it will prompt for password for login.
      I entered several wrong password, it shows "Access Denied!" and re-prompt for password for login.
      Then I entered the correct one, it shows "Access Granted!" but it still re-prompt for password for login.
      Any idea what's wrong? Thanks
    • gahhon
      By gahhon
      #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=..\..\Downloads\ALlogo.ico #AutoIt3Wrapper_Compile_Both=y #AutoIt3Wrapper_UseX64=y #AutoIt3Wrapper_Res_HiDpi=y #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /rm /pe #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** I found out that a lot of sources provided by AutoIT members like what I am recently using is the Metro UDF.
      On top of it, it always written the Region of code and red color. Then it also assign some value into some variable.
      May I know, what are their use and what is the purpose of doing?
      If I remove them, will affect the application?
      Thanks
    • gahhon
      By gahhon
      I don't find any relevant topic via Google Search. Please kindly advise how to read and update data in Google SpreadSheet.
      Thanks a lot.
    • gahhon
      By gahhon
      While Not _Login() _Initial_Check() WEnd Func _Login() Local $FLAG_LOGIN = _Password_Check() If @error = 1 Then _Close_Application() ElseIf @error = 2 Then _Metro_MsgBox(0, "", $FLAG_LOGIN) Return False Else ; $FLAG_LOGIN return TRUE _Metro_MsgBox(0, "", "Access granted!") Return True EndIf EndFunc  I do have a question regarding the While Not Loop.
      According to the code I post above, While Not _Login() is similar to While _Login() = False right?
      Which mean when _Login() return False and it will execute the _Initial_Check() function, but somehow the logic is not right and I also don't understand why While Not _Login() loop is executed as expected.
      What I wanna achieve is when _Login() is not success, which mean return False then it continue loop the _Login() function until it return True
      When It return True only execute the _Initial_Check() function.
      Please kindly clarify. Thanks
    • gahhon
      By gahhon
      I would like to copy the entire folder with current directory @WorkingDir
      paste into either Program Files or Program Files (x86)
      Global Const $CUR_WA_FOLDER = @WorkingDir & "\Test Folder" Global Const $DIR_FOLDER = _ProgramFilesDir() _Initial_Check() Func _Initial_Check() If FileExists($DIR_FOLDER & "\Test Folder") = 0 Then Local $Decisions = _Metro_MsgBox(4, "", "Do you want to install Test Application?") If $Decisions = "Yes" Then DirCopy($CUR_WA_FOLDER, $DIR_FOLDER, 1) Else _Close_Application() EndIf EndIf EndFunc Func _ProgramFilesDir() Local $ProgramFilesDir Switch @OSArch Case "X32" $ProgramFilesDir = "Program Files" Case "X64" $ProgramFilesDir = "Program Files (x86)" EndSwitch Return @HomeDrive & "\" & $ProgramFilesDir EndFunc  
×