Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 129
Gehe zum ersten neuen Beitrag Hamachi deinstallieren
Aufrufe: 58, Antworten: 5
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22.01.2011, 16:41   #1 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard drag & drop

Hallo XProfangemeinde,

ich suche nach einer Möglichkeit, aus einer geöffneten *.txt, oder eMail, oder ... , markierten Text in ein EDIT per drag & drop zu bekommen. Datei- oder Ordnernamen aus dem Explorer kann ich soweit. Aber Text ohne Strg+C und Strg+V zu übernehmen schaffe ich nicht.

Gruß Thomas
THFR ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 22.01.2011, 17:32   #2 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Dazu muss deine Quellanwendung das mal unterstützen, Notepad kann das z.B. nicht. Thunderbird oder der Profaneditor von Andreas können es. Wenn dein Edit Drop-Ereignisse aufnehmen kann sollte es egal sein ob das eine Datei aus dem Explorer oder ein Text aus einer Anwendung ist.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 22.01.2011, 18:08   #3 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Editfelder unterstützen das von Hause aus - soweit ich weiss - nicht. Da wirst du um OLE wohl nicht umhin kommen. Schau mal hier: Adding Drop Source Capabilities - Win32 Programmer's Reference
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist gerade online   Mit Zitat antworten
Alt 22.01.2011, 22:00   #4 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

Hmmm, dann bleib ich wohl beim RTF-Edit. Den Script noch etwas aufgehübscht mit Dieters RTF.pcu und Franks ListView.dll. oder hat doch noch einer eine Lösung fürs einfach EDIT.
Code:
 $H Messages.ph
 $H Windows.ph


Def GetSysColor(1) !"USER32","GetSysColor"

var Prog_Dir$ = @GetDir$("@") ' aktuelles Verzeichnis

Window 800,600
Cls GetSysColor(15)
SET("TRUECOLOR",1)
var Font&=Create("Font","MS Sans Serif",16,0,0,0,0)
SETDIALOGFONT Font&
WindowTitle "Adressen-Import per drag & drop aus einer eMail"

'var ch1&=CreateCheckBox(%hwnd,"   Daten automatisch einlesen",120,12,400,24)

CreateText(%hwnd,"Daten",10,45,90,20)
var edi&=@Create("RichEdit",%hwnd,"",120,40,560,48)

var text$ = "PassNummer;3;180;Vorname;0;200;Nachname;0;200;eMail;0;150"
var hGrid& = Create("GridBox", %hwnd, Text$, 3, 10, 100, 770, 400)
Var LV_font& = @Create("Font","Verdana",16,0,0,0,0)
SetFont hGrid&, LV_font&

var zu& = CreateButton(%hwnd,"Eintrag",700,40,80,24)
var sich& = CreateButton(%hwnd,"Speichern",700,516,80,24)

LADEN

while 1
WaitInput
  case %key=2 : BREAK
  case @Clicked(zu&): EINTRAG
  case @Clicked(sich&): SPEICHERN
Endwhile

DeleteObject font&
DeleteObject LV_font&
end

Proc LADEN
  Declare zeile$
  Assign #2,Prog_Dir$+"\\Mitglieder.csv"
  Reset #2
  If %IOResult
       MessageBox("Datei kann nicht geöffnet werden.","Hinweis",48) 
     Else
      WhileNot @EOF(#2)
        Input #2, Zeile$
        zeile$=Translate$(zeile$,";","|")
        AddString(hGrid&,Zeile$)
      EndWhile
      Close #2
  EndIf
EndProc

Proc EINTRAG
  Declare zeile$
  Zeile$ = @GetText$(edi&,0)
  zeile$=Translate$(zeile$,";","|")
  zeile$=Translate$(zeile$,",","|")
  zeile$=Translate$(zeile$," ","|")

  If (len(Zeile$,"|") > 1)
    AddString(hGrid&,Zeile$)
    DestroyWindow(edi&)
    edi&=@Create("RichEdit",%hwnd,"",120,40,560,48)
  EndIf
EndProc

PROC SPEICHERN
  Assign #2,Translate$(Prog_Dir$,"\","\\")+"\\Mitglieder.csv"
  Rewrite #2

  WhileLoop @GetCount(hGrid&)
    Text$=Translate$(@GetString$(hGrid&,(&loop-1)),"|",";")
    Print #2,Text$
  EndWhile
  Close #2
  MessageBox("Die Datei wurde gespeichert!","Hinweis",48)
Endproc
Gruß Thomas
THFR ist offline   Mit Zitat antworten
Alt 23.01.2011, 06:17   #5 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Hallo Thomas,

versuchs mal damit, da nicht direkt ins edit gedropt wird sollte eigentlich jedes Contoll laufen. Nicht getestet.

Code:
'Autor Dieter Zornow
'freeware
proc Initdragdrop
Parameters hdl&
External("SHELL32","DragAcceptFiles",hdl&,1)
endproc

Proc deinitdragdrop
parameters hdl&
External("SHELL32","DragAcceptFiles",hdl&,0)
endproc

proc Dragfiles
Parameters list&
    Clearlist
    Declare count&,Dropbereich#,dropfilename$,param$,ext$
    Dim dropbereich#,1024
      count&= External("SHELL32","DragQueryFileA",&WParam,$FFFFFFFF,Dropbereich#,1024)
      if count& = 1
      External("SHELL32","DragQueryFileA",&WParam,0,Dropbereich#,1024)
        dropfilename$ = String$(Dropbereich#,0)
        if Upper$(substr$(dropfilename$,-1,".")) = "LNK" 'falls ein link gedropt wird
        dropfilename$ = ReadLinkPath(dropfilename$)
        endif
        Case dropfilename$ <> "":AddString dropfilename$
        else
      Whileloop 0,count&-1
        External("SHELL32","DragQueryFileA",&WParam,&loop,Dropbereich#,1024)
        dropfilename$ = String$(Dropbereich#,0)
        case dropfilename$ <> "":AddString dropfilename$
      EndWhile
      endif
      External("SHELL32","DragFinish",&WParam)
      dispose dropbereich#
      whileloop 0, %getcount
      SetText list&,gettext$(list&)+ListBoxItem$(&loop)
      endwhile
      Clearlist
endproc

'Beispiel
window 800,600

Usermessages 563
Var edit& = Create("Multiedit",%Hwnd,"",5,5,770,530)
Initdragdrop(%hwnd)

while 1
Waitinput
Case %key = 2:break
IF %Umessage = 563
Dragfiles(edit&,0) 
endif
endwhile
deinitdragdrop(%Hwnd)
end
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 23.01.2011, 12:45   #6 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

Hallo Dieter,
im Moment läuft das bei mir nicht. Keine Reaktion von der Usermessage 563 und der Curser bleibt ein Kreis mit Schägstrich. Mal sehen, ob ich im Tagesverlauf Zeit habe, den Script lauffähig zu bekommen.

Gruß Thomas
THFR ist offline   Mit Zitat antworten
Alt 23.01.2011, 12:54   #7 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Hallo Thomas,

dann versuche mal eine Datei aus dem Explorer zu dropen ob es grundsätzlich geht. Ich vermute das D&D mit markierten Wörtern funktioniert nur innerhalb der jeweiligen Anwendung also eher ein Verschieben innerhalb und nicht das Dropen in ein anderes Programm.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 23.01.2011, 15:09   #8 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

Ja Dieter, aus dem Explorer kann der Dateiname übernommen werden.
Ich glaube dieses Thema endet wie das mit dem Laufwerkstyp einer Festplatte an USB.
Über das RichEdit bekomme ich alles was zu verschieben ist und kann bei Bedarf nachgearbeitet werden.
Wenn der Textstring direkt ins Grid gezogen werden soll, muß ich halt noch mal ran.
Läuft der Script unter WIN7 ?
Code:
  
 $H Messages.ph
 $H Windows.ph
 $H RichEdit.ph

Def GetSysColor(1) !"USER32","GetSysColor"
Def @CreateWindowEx(12) ! "USER32","CreateWindowExA"
Def SetWindowLong(3) !"USER32", "SetWindowLongA"
Def GetWindowLong(2) !"USER32", "GetWindowLongA"

def SetWndSize(3) ~SetWindowPos(&(1),0,0,0,%(2),%(3),~SWP_NOMOVE | ~SWP_NOZORDER)
Def SetEditNumeric(1) SetWindowLong(@&(1),-16,  (GetWindowLong(@&(1),-16) | $2002))

var RtfDll&=usedll("riched32.dll")

var Prog_Dir$ = @GetDir$("@") ' aktuelles Verzeichnis
var a$=Chr$(13)+Chr$(10)

Windowstyle 538
Window 0,0 - 800,360
Cls GetSysColor(15)
SET("TRUECOLOR",1)
var Font&=Create("Font","MS Sans Serif",16,0,0,0,0)
SETDIALOGFONT Font&
WindowTitle "Adressen-Import per drag & drop aus einer eMail"

Declare Edi&   ' RichEdit
LOESCH

var Edi1& = @Create("Edit",%hwnd,"",10,70,179,22)
var Edi2& = @Create("Edit",%hwnd,"",190,70,199,22)
var Edi3& = @Create("Edit",%hwnd,"",390,70,199,22)
var Edi4& = @Create("Edit",%hwnd,"",590,70,149,22)
SetEditNumeric(Edi1&)
EnableWindow edi1&,0
EnableWindow edi2&,0
EnableWindow edi3&,0
EnableWindow edi4&,0

var text$ = "PassNummer;3;180;Vorname;0;200;Nachname;0;200;eMail;0;150"
var hGrid& = Create("GridBox", %hwnd, Text$, 0, 10, 104, 770, 180)
Var LV_font& = @Create("Font","Verdana",16,0,0,0,0)
SetFont hGrid&, LV_font&

text$="Datenfeld löschen"
var L_edi& = CONTROL("BUTTON",text$, $54012000,690,10,90,48, %HWnd,1, %HINSTANCE)
SetFont L_edi&, font&

text$="Daten übenehmen"
var zu& = CONTROL("BUTTON",text$, $54012000,590,10,90,48, %HWnd,1, %HINSTANCE)
SetFont zu&, font&

var OK_aend& = CreateButton(%hwnd,"+",744,70,20,24)
var OK_abbr& = CreateButton(%hwnd,"-",765,70,20,24)
@Create("Tooltip",%hwnd,OK_aend&,"Änderung übernehmen")
@Create("Tooltip",%hwnd,OK_abbr&,"Änderung abbrechen")
EnableWindow OK_abbr&,0
EnableWindow OK_aend&,0
  
var L_loes& = CreateButton(%hwnd,"markierte Zeile löschen",10,292,180,24)
var L_aend& = CreateButton(%hwnd,"markierte Zeile ändern",200,292,180,24)
var sich& = CreateButton(%hwnd,"Speichern",700,292,80,24)

LADEN

while 1
  WaitInput

  case %key=2 : BREAK
  case GetFocus(L_edi&): LOESCH
  case GetFocus(zu&): EINTRAG
  case GetFocus(sich&): SPEICHERN
  case GetFocus(L_loes&) : LV_DELETE
  case GetFocus(L_aend&) : LV_AEND

Endwhile

DeleteObject font&
DeleteObject LV_font&
destroywindow(Edi&)
destroywindow(zu&)
destroywindow(L_Edi&)
freedll rtfDll&

end

Proc LV_AEND
   WhileLoop 0,(@GetCount(hGrid&)-1)
     If GetState(hGrid&, &loop) > 0
       LV_ITEM GetString$(hGrid&,&loop),&loop
       BREAK
     EndIf
   EndWhile
   setfocus(%hwnd)
EndProc

Proc LV_ITEM
  Parameters Item$,Item%
  EnableWindow edi1&,1
  EnableWindow edi2&,1
  EnableWindow edi3&,1
  EnableWindow edi4&,1

  EnableWindow OK_abbr&,1
  EnableWindow OK_aend&,1
  SetText edi1&, Substr$(item$,1,"|")
  SetText edi2&, Substr$(item$,2,"|")
  SetText edi3&, Substr$(item$,3,"|")
  SetText edi4&, Substr$(item$,4,"|")

  While 1
    WaitInput
    If GetFocus(OK_aend&)
      SetText hGrid&, Item%, 0, trim$(GetText$(edi1&))
      SetText hGrid&, Item%, 1, trim$(GetText$(edi2&))
      SetText hGrid&, Item%, 2, trim$(GetText$(edi3&))
      SetText hGrid&, Item%, 3, trim$(GetText$(edi4&))
      BREAK
    ElseIf GetFocus(OK_abbr&)
      BREAK
    EndIf
  EndWhile
  SetText edi1&, ""
  SetText edi2&, ""
  SetText edi3&, ""
  SetText edi4&, ""
  EnableWindow OK_abbr&,0
  EnableWindow OK_aend&,0
  EnableWindow edi1&,0
  EnableWindow edi2&,0
  EnableWindow edi3&,0
  EnableWindow edi4&,0

EndProc

Proc LV_DELETE
   WhileLoop 0,(@GetCount(hGrid&)-1)
     If GetState(hGrid&, &loop) > 0
       @DeleteString (hGrid&,&loop)
       BREAK
     EndIf
   EndWhile
   setfocus(%hwnd)
EndProc

Proc LOESCH
    DestroyWindow(edi&)
    Edi&=control("RichEdit20A","",$500050c4,10,10,0,0,%hwnd,5000,0)
    ~SetWindowLong(Edi&,~GWL_EXSTYLE,0)'--Rand entfernen
    SetWndSize(Edi&,(560,83466),(48,83466))
EndProc

Proc LADEN
  Declare zeile$
  Assign #2,Prog_Dir$+"\\Mitglieder.csv"
  Reset #2
  If %IOResult
       MessageBox("Die Datei\n\nMitglieder.csv\n\nkann nicht geöffnet werden.","Hinweis",48)
     Else
      WhileNot @EOF(#2)
        Input #2, Zeile$
        zeile$=Translate$(zeile$,";","|")
        AddString(hGrid&,Zeile$)
      EndWhile
      Close #2
  EndIf
EndProc

Proc EINTRAG
  Declare zeile$
  Zeile$ = @GetText$(edi&,0)
  zeile$=Translate$(zeile$," ",";")
  zeile$=Translate$(zeile$,",",";")

  WhileLoop 100
    zeile$=Translate$(zeile$,";;",";")
  EndWhile
  zeile$=Translate$(zeile$,";","|")

  zeile$=Translate$(zeile$,a$," ")
  If (len(Zeile$,"|") > 1)
    @InsertString(hGrid&,0,Zeile$)
    LOESCH
  EndIf
EndProc

PROC SPEICHERN
  Assign #2,Translate$(Prog_Dir$,"\","\\")+"\\Mitglieder.csv"
  Rewrite #2

  WhileLoop @GetCount(hGrid&)
    Text$=Translate$(@GetString$(hGrid&,(&loop-1)),"|",";")
    Print #2,Text$
  EndWhile
  Close #2
  MessageBox("Die Datei wurde gespeichert!","Hinweis",48)
Endproc
Gruß Thomas

Geändert von THFR (24.01.2011 um 19:20 Uhr) Grund: Kleine Ergänzungen
THFR ist offline   Mit Zitat antworten
Alt 23.01.2011, 15:45   #9 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Hallo Thomas,

wenn es mit Dateien geht liegt bei einfachem Text aus einer Anwendung kein Dropereignis vor, deshalb auch keine Message 563. Vom oberen Richedit oder auch Edit etwas ins Grid zu ziehen dürfte mit ein paar Tricks, "Pseudo Drag & Drop" einfach zu realisieren sein.

Dein Script läuft unter Win 7
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 24.01.2011, 10:52   #10 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 13.02.2009
Beiträge: 19
Standard

Hi Leute!

Hier ein Beispiel, wie Profan als Drop-Ziel für Dateien ( aus Windows)
oder Text (aus WordPad, Word, IE, FF usw.) verwendet wird:
Code:
window 750,250
$H Windows.ph
usermessages 16
 
declare FORMATETC#:dim FORMATETC#,20
long FORMATETC#,4=0,1,-1,1
struct STGMEDIUM=tymed&,Value&,IUnknown&
declare STGMEDIUM#:dim STGMEDIUM#,STGMEDIUM
 
proc GetData'-------------------------------------------------GetData
parameters IFace&
var VTable&=long(IFace&,0)
return call(long(VTable&,12),IFace&,FORMATETC#,STGMEDIUM#)
endproc'-------------------------------------------------------------
 
proc Dummy'-----------------------------------------------------Dummy
return 0'--E_OK
endproc'-------------------------------------------------------------
 
proc Drop'-------------------------------------------------------Drop
parameters This&,IDataObject&,KeyState&,X&,Y&
long FORMATETC#,0=~CF_HDROP'----------------Format: DropFiles
ifnot GetData(IDataObject&)
   var Mem&=~GlobalLock(STGMEDIUM#.Value&)
   print "Datei:",stringw$(Mem&,20)
   ~GlobalUnlock(STGMEDIUM#.Value&)
   ~GlobalFree(STGMEDIUM#.Value&)
endif
long FORMATETC#,0=~CF_TEXT'-----------------Format: Text
ifnot GetData(IDataObject&)
   var Mem&=~GlobalLock(STGMEDIUM#.Value&)
   print "Text:",string$(Mem&,0)
   ~GlobalUnlock(STGMEDIUM#.Value&)
   ~GlobalFree(STGMEDIUM#.Value&)
endif
return 0'--E_OK
endproc'-------------------------------------------------------------
 
declare IDropTarget#,IDropTarget&
dim IDropTarget#,32'-----------------------IDropTarget-Interface
long IDropTarget#, 0=procaddr("Dummy",2)'--QueryInterface
long IDropTarget#, 4=procaddr("Dummy",1)'--AddRef
long IDropTarget#, 8=procaddr("Dummy",1)'--Release
long IDropTarget#,12=procaddr("Dummy",5)'--DragEnter
long IDropTarget#,16=procaddr("Dummy",5)'--DragOver
long IDropTarget#,20=procaddr("Dummy",1)'--DragLeave
long IDropTarget#,24=procaddr("Drop",5)'---Drop
long IDropTarget#,28=IDropTarget#
IDropTarget&=IDropTarget#+28
 
external("ole32","OleInitialize",0)
external("ole32","RegisterDragDrop",%hwnd,IDropTarget&)
 
while 1
   waitinput
   case %umessage=16:break
endwhile
 
external("ole32","RevokeDragDrop",%hwnd)
external("ole32","OleUninitialize")
dispose IDropTarget#,FORMATETC#,STGMEDIUM#
Details zu D&D siehe
phorum - 2 - PROFAN-Programmierung - Re: Drag&Drop Target fr URLs
phorum - 2 - PROFAN-Programmierung - Re: Drag & Drop

SeeYou
Pascal
Uwe 'Pascal' ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 24.01.2011, 11:11   #11 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Hallo Pascal,

ich habe das gerade mal mit Thunderbird getestet, geht leider nicht. weiß nicht ob es an Win 7 liegt. Mit Thunderbird kann ich in jedem Fall markierte Texte holen.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 26.01.2011, 18:10   #12 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

Thunderbird habe ich nicht. Aber unter XP keine Probleme aus vielen Anwendungen die Texte zu übernehmen. Aufpassen muß man aber bei einigen Anwendungen. Da wird der markierte Teil ausgeschnitten und nicht kopiert.
Habe mit Pascals Vorschlag noch ein wenig experementiert und die Datenübernahme vom EDIT über Grid bis zum Item geht bei mir.
Wie sieht es unter WIN 7 aus?
Im Grid Beispiel wird ein Text aufgeteilt beim Leerzeichen, Komma und Semikolon. Kommen mehrere Trennmerkmale zusammen vor -"abc,, 123b" = "abc|123b"-, wird es auf eins reduziert. Ein Wort in den freien Teil des Grids gezogen erzeugt eine neue Zeile. Wird es auf ein vorhandenes Item gezogen, wird dessen Text ersetzt.
Code:
$H Windows.ph
$H Messages.ph
$H commctrl.ph


usermessages 16

Def GetSysColor(1) !"USER32","GetSysColor"

Def WindowFromPoint(2)!"USER32","WindowFromPoint"
Def GetCursorPos(1) !"USER32","GetCursorPos"

Declare p#,h&
Dim p#,8

declare FORMATETC#:dim FORMATETC#,20
long FORMATETC#,4=0,1,-1,1
struct STGMEDIUM=tymed&,Value&,IUnknown&
declare STGMEDIUM#:dim STGMEDIUM#,STGMEDIUM

proc GetData'-------------------------------------------------GetData
  parameters IFace&
  var VTable&=long(IFace&,0)
  return call(long(VTable&,12),IFace&,FORMATETC#,STGMEDIUM#)
endproc'-------------------------------------------------------------

proc Dummy'-----------------------------------------------------Dummy
  return 0'--E_OK
endproc'-------------------------------------------------------------

proc Drop'-------------------------------------------------------Drop
  parameters This&,IDataObject&,KeyState&,X&,Y&
  
  
  long FORMATETC#,0=~CF_HDROP'----------------Format: DropFiles
  ifnot GetData(IDataObject&)
    var Mem&=~GlobalLock(STGMEDIUM#.Value&)

    INSERT stringw$(Mem&,20)
    '   print "Datei:",stringw$(Mem&,20)
    ~GlobalUnlock(STGMEDIUM#.Value&)
    ~GlobalFree(STGMEDIUM#.Value&)
  endif
  long FORMATETC#,0=~CF_TEXT'-----------------Format: Text
  ifnot GetData(IDataObject&)
    var Mem&=~GlobalLock(STGMEDIUM#.Value&)
    
    INSERT string$(Mem&,0)
    
    ~GlobalUnlock(STGMEDIUM#.Value&)
    ~GlobalFree(STGMEDIUM#.Value&)
  endif
  return 0'--E_OK
  
endproc'-------------------------------------------------------------

Proc INSERT
  Parameters Zeile$
  var a$=Chr$(13)+Chr$(10) 'Zeilenumbruch
  
  GetCursorPos(p#) ' Empfänger ist ?
  h&=WindowFromPoint(Long(p#,0),Long(p#,4))
  ~GetCursorPos(HIT#)
  ~ScreenToClient(Lb&,HIT#)
  sendmessage(Lb&,~LVM_HITTEST,0,HIT#)'---------------------Infos über Cursor in Bezug auf Lv
  sendmessage(Lb&,~LVM_SUBITEMHITTEST,0,HIT#)
  zielx&= HIT#.SubItem&
  ziely&= HIT#.Item&
  
  If h&=edi&
    SetText edi&,zeile$
  ElseIf h&=Lb&
    zeile$=Translate$(zeile$," ",";") 'Feldtrenner= Leerzeichen > werden ';'
    zeile$=Translate$(zeile$,",",";") 'Feldtrenner= Komma > werden ';'
    WhileLoop 100                     'alle vielfachen ';' auf einen reduzieren
      zeile$=Translate$(zeile$,";;",";")
    EndWhile
    zeile$=Translate$(zeile$,";","|") ' ';' für Gridbox in '|'
    zeile$=Translate$(zeile$,a$," ")  ' Zeilenumbruch entfernen 
    If (len(Zeile$,"|") > 1)          ' Anzahl der Felder > 1 
      @InsertString(Lb&,0,Zeile$)
    Else
      If ziely&=-1
        @InsertString(Lb&,0,"|||")
        SetText Lb&,0, zielx&, trim$(zeile$)
      Else
        SetText Lb&,ziely&, zielx&, trim$(zeile$)
      EndIf
    EndIf
  EndIf
EndProc'-------------------------------------------------------------

'=========================================================================

window 670,250
Cls GetSysColor(15)
var Font&=Create("Font","MS Sans Serif",16,0,0,0,0)
SETDIALOGFONT Font&

CreateText(%hwnd,"Eingabe:",10,12,90,22)
var edi&= CreateEdit(%hwnd,"",100,10,300,22)

var text$ = "PassNummer;3;150;Vorname;0;180;Nachname;0;180;eMail;0;100"
var Lb& = Create("GridBox", %hwnd, Text$, 0, 10, 44, 640, 140)

declare IDropTarget#,IDropTarget&
dim IDropTarget#,32'-----------------------IDropTarget-Interface
long IDropTarget#, 0=procaddr("Dummy",2)'--QueryInterface
long IDropTarget#, 4=procaddr("Dummy",1)'--AddRef
long IDropTarget#, 8=procaddr("Dummy",1)'--Release
long IDropTarget#,12=procaddr("Dummy",5)'--DragEnter
long IDropTarget#,16=procaddr("Dummy",5)'--DragOver
long IDropTarget#,20=procaddr("Dummy",1)'--DragLeave
long IDropTarget#,24=procaddr("Drop",5)'---Drop
long IDropTarget#,28=IDropTarget#
IDropTarget&=IDropTarget#+28

external("ole32","OleInitialize",0)
external("ole32","RegisterDragDrop",%hwnd,IDropTarget&)

declare HIT#'------LVHITTESTINFO-Struktur
struct HIT=x&,y&,Flags&,Item&,SubItem&
dim Hit#,HIT
declare ziely&,zielx&

while 1
  waitinput
  case %umessage=16:break
  
endwhile

external("ole32","RevokeDragDrop",%hwnd)
external("ole32","OleUninitialize")
dispose IDropTarget#,FORMATETC#,STGMEDIUM#,p#,hit#
DeleteObject font&
end
Da erschließen sich noch viele Mglichkeiten.
Dank an Pascal.

Gruß Thomas
THFR ist offline   Mit Zitat antworten
Alt 26.01.2011, 19:54   #13 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Hallo Thomas,

ich kann aus einem Richedit heraus ins Edit und ins Grid droppen, aber nicht vom Edit ins Grid.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 26.01.2011, 20:35   #14 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

Dank an meinen treuen Tester Dieter.
@Dieter, dass war in diesem Fall auch nicht vorgesehen.
Bisher hatte ich als "Empfänger" nur das RichEdit getestet. Es geht also auch ein normales Edit.
Die Sache könnte bei meinem Vereinsprogramm spätestens mit der Einführung von SEPA interessant werden. Wenn dann IBAN und Swift per eMail kommen könnte man sie in die entsprechenden Felder ziehen.

Gruß Thomas
THFR ist offline   Mit Zitat antworten
Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
The Drag & Drop.io 2.0.1 Paule 5.) Firefox & Thunderbird PlugIns 0 31.05.2010 16:20
virtual box? drag&drop? trustme12 Software - Allgemein 0 16.05.2007 17:27
Wandlung CD ---->MP3 (Drag&Drop) Harlekan Software - Allgemein 4 30.03.2007 11:59
Drag & Drop rumpel Windows XP 6 04.01.2007 14:48
Drag und Drop von TextBox Magier Visual Basic, Visual Basic.NET 2 23.09.2005 14:00



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:42 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2