|  |  | 
|  | 
|  | 
|  H.Brill
 | | Da man ohne Drag&Drop im PC-Alltag fast nicht mehr auskommt, sollte dieses auch in XProfan (X3)
 unbedingt integriert werden. Sowohl innerhalb des eigenen
 Profanfenster + Controls (Listboxen usw.)als auch von Fremdprogrammen gedragte Dateien usw.
 
 Zumindest 3 Formate wären mir da wichtig :
 Texte, Dateien und Bilder.
 
 Vielleicht kann Roland da ja was einsteiger bzw. User-
 freundliches basteln. Mit den entsprechenden API-
 Funktionen und den CallBack-Funktionen von XProfan
 dürfte sowas machbar sein.
 | 
 | 
|  | 
|  | | Benutze   XPROFAN X3 + FREEPROFANWir sind die XProfaner.
 Sie werden von uns assimiliert.
 Widerstand ist zwecklos!
 Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
 
 Was die Borg können, können wir schon lange.
 | 16.11.2015  ▲ | 
 | 
|  | 
| 
 
 
 | 
|  | 
|  ByteAttack
 | | Geht doch schon eigentlich relativ einfach... KompilierenMarkierenSeparieren
  $H windows.ph
 $H messages.ph
Def DragAcceptFiles(2) !"SHELL32","DragAcceptFiles"
Def DragFinish(1) !"SHELL32","DragFinish"
Def DragQueryFile(4) !"SHELL32","DragQueryFileA"
Declare Anzahl&,Zähler&,PFilename#
Windowstyle 31
Windowtitle "Listbox mit File Drag and Drop"' Nicht zu verwechseln mit Plug&Pray
Window 0,0-640,440
var Filelistbox&=Create("ListBox",%hwnd,"",20,20,500,300)
DragAcceptFiles(FileListbox&,1)
Usermessages ~wm_close,563' 563 <---- Drag&Drop
WhileNot (%Umessage = ~wm_close) & (&uWnd = %hWnd)
    WaitInput
    IF %UMESSAGE=563' DragDrop Ereignis
        DIM PFilename#,1024
        ANZAHL&=DragQueryFile(&UWParam,$FFFFFFFF,PFilename#,1024)
        Usecursor 2
        While Zähler&<Anzahl&
            Clear PFilename#
            DragQueryFile(&UWParam,Zähler&,PFilename#,1024)
            AddString(FileListbox&,String$(PFilename#,0))
            Inc ZÄHLER&
        EndWhile
        Usecursor 0
        Dispose PFilename#
        DragFinish(&UWParam)
    Endif
EndWhile
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  ByteAttack
 | | mit KompilierenMarkierenSeparieren
 kannst Du dann die Dateien ganz einfach ermitteln, welcher Typ das ist.
 
 Beispiel:
 KompilierenMarkierenSeparieren
  $H windows.ph
 $H messages.ph
 $H shellapi.ph
Usermessages ~wm_close,563' 563 <---- Drag&Drop
DEF PathFindExtension(1) ! "shlwapi","PathFindExtensionA"
DEF GetFileTitle(3) ! "COMDLG32","GetFileTitleA"
Declare PFilename#,ext#
DIM PFilename#,1024
Dim ext#,20
Proc DateiSplit
    Parameters Datei$
    ' Nur Datei
    var NurDatei$=Space$(1024)
    GetFileTitle(Addr(Datei$), Addr(NurDatei$), Len(NurDatei$))
    NurDatei$=Trim$(NurDatei$)
    ' Extension
    Clear ext#
    ext# = PathFindExtension(addr(Datei$))
    var ext$ = string$(ext#,0)
    ' Nur Pfad
    var NurPfad$=left$(Datei$,len(Datei$)-len(NurDatei$))
    AddString(Filelistbox&,NurDatei$+"|"+NurPfad$+"|"+ext$)
EndProc
Proc DragDrop
    Clear PFilename#
    var ANZAHL&=~DragQueryFile(&UWParam,$FFFFFFFF,PFilename#,1024)
    var Zähler&=0
    Usecursor 2
    While Zähler&<Anzahl&
        Clear PFilename#
        ~DragQueryFile(&UWParam,Zähler&,PFilename#,1024)
        DateiSplit String$(PFilename#,0)
        Inc ZÄHLER&
    EndWhile
    Usecursor 0
    ~DragFinish(&UWParam)
EndProc
Windowstyle 24
Windowtitle "Drag and Drop"
Window ((%maxX/2)-260),((%maxY/2)-175)-520,350
Cls ~GetSysColor(15)
var listdef$="Datei;0;100;Pfad;0;310;Endung;0;60"
var Filelistbox&=Create("GridBox",%hwnd,listdef$,0,5,5,500,300)
~DragAcceptFiles(%hwnd,1)
WhileNot (%Umessage = ~wm_close) & (&uWnd = %hWnd)
    WaitInput
    If %UMESSAGE=563' DragDrop Ereignis
        DragDrop
    Endif
EndWhile
Dispose PFilename#
dispose ext#
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  H.Brill
 | | Danke, Ich meinte jetzt eher, daß die Aktionen (Drag
 und Drop) im eigenen Programm stattfinden.
 Also z.B. Text von einer Listbox zur anderen
 oder auch Bilder und Buttons auf ein Static.
 
 Ich möchte gerne Bilder, die in einer Toolbar
 mittels ImageList angezeigt werden, auf ein
 Static - Control kopieren.
 | 
 | 
|  | 
|  | | Benutze   XPROFAN X3 + FREEPROFANWir sind die XProfaner.
 Sie werden von uns assimiliert.
 Widerstand ist zwecklos!
 Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
 
 Was die Borg können, können wir schon lange.
 | 17.11.2015  ▲ | 
 | 
|  | 
| 
 
 
 | 
|  | 
|  ByteAttack
 | | Das ist aber schon heftig... Man kann die commctrl.ph nutzen um z.B.
 KompilierenMarkierenSeparieren
 für die Imageliste zu nutzen, Aber in wie weit man das für eine Toolbar nutzen kann, entzieht sich mir gerade. Ich setzt mich mal ran...
  | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  ByteAttack
 | | soweit ich das jetzt in meinem kleinen Gehirn verstanden habe, geht daß was Du vor hast nur mit einem Rebar-Control... | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  H.Brill
 | | Naja, ich dachte an sowas, wie es die meisten IDE's mit einem Visualdesigner anbieten, z.B.
 VisualBasic. Dort kann man ja auch einen Button
 anfassen und in das Gitter platzieren.
 
 Für meine Zwecke will ich auch so eine Bitmap
 oder Icon anfassen können und in ein Static mit
 einem Gitter punktgenau plazieren können.
 
 zum Thema Toolbar :
 Die Nummer des Icons in der ImageList bekommt
 man ja leicht, wenn man von %MenuItem z.B. 2000
 abzieht, falls die Menüpunkte bei @Create("Toolbar",...)
 ab 2000 beginnen. Also soweit bin ich schon. Mir fehlt
 nur noch der grafische Effekt von Drag&Drop.
 
 PS: Da Drag&Drop laut API auch benutzerdefinierte
 Daten aktzeptiert, könnte evtl. sowas möglich sein.
 Bin halt leider nicht so der Experte in Sachen API.
 (das mit der Usermessage 563 hatte ich auch noch
 nicht gewußt).
 | 
 | 
|  | 
|  | | Benutze   XPROFAN X3 + FREEPROFANWir sind die XProfaner.
 Sie werden von uns assimiliert.
 Widerstand ist zwecklos!
 Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
 
 Was die Borg können, können wir schon lange.
 | 17.11.2015  ▲ | 
 | 
|  | 
| 
 
 
 | 
|  | 
|  ByteAttack
 | | Ich hab da noch einen etwas älteren Code, vielleicht hilft der Dir ja... KompilierenMarkierenSeparieren
 USERMESSAGES 16
 $H Windows.ph
 $H Commctrl.ph
'################ Globale Variablen
var Bild&=create("hPic", 0, "TOOLBAR32")
var IcoList& = create("ImageList",32,32,Bild&,rgb(192,192,192))
var AnzIcon%=73
var Zeilengrenze%=5
Declare EndeY%,IstNeuX%,px%,py%,Temp$,MX%,MY%,GI%
Proc UpdateWindow
    Case width(%hwnd,1)<800:SetWindowPos %hwnd=%WinLeft,%WinTop-800,height(%hwnd,1);0
    Case height(%hwnd,1)<600:SetWindowPos %hwnd=%WinLeft,%WinTop-width(%hwnd,1),600;0
    TB_AufBau
EndProc
'################################################################################################################# Toolbar aufbauen
'###################################################################################################
Proc TB_AufBau
    Declare WL%
    ClearList GB&
    UsePen 0,1,~GetSysColor(15)
    UseBrush 1,~GetSysColor(15)
    Rectangle 0,0-%maxX,42
    UsePen 0,1,~GetSysColor(22)
    Line 0,42-%maxX,42
    var AnzProZeile%=width(%hwnd)/39
    if AnzIcon%<AnzProZeile%
        WL%=AnzIcon%
    else
        WL%=AnzProZeile%
    endif
    var IcoX%=3
    var IcoIdx%=0
    WhileLoop WL%
        DrawIcon IcoList&,IcoIdx%,IcoX%,4
        AddString(GB&,Str$(IcoX%)+"|"+"4"+"|"+Str$(IcoIdx%))
        IcoX%=IcoX%+39
        Inc IcoIdx%
    EndWhile
EndProc
Proc DragDrop
    While %mousepressed'--Maustaste wird gehalten
        UseExtCursor %hinstance, "DRUCKER"
        ~ImageList_DragMove(%mousex,%mousey)
    EndWhile
    WindowTitle "iconIndex: "+Str$(GI%)+" - "+Str$(%mousex)+"|"+Str$(%mousey)
EndProc
Proc DrawRaster
    Parameters Rasterweite%
    UsePen 0,1,0
    UseBrush 1,0
    var rx%=Rasterweite%
    var ry%=Rasterweite%+60
    WhileNot ry%>=%maxY
        WhileNot rx%>=%maxX
            SetPixel rx%,ry%,0
            rx%=rx%+Rasterweite%
        EndWhile
        rx%=Rasterweite%
        ry%=ry%+Rasterweite%
    EndWhile
EndProc
'###################### HAUPTFENSTER
WindowStyle 31
WindowTitle "ToolBarTool V 1.01"
Window %maxX+5,5 - 800,600
Cls ~GetSysColor(16)
UseFont "Verdana",16,0,0,0,0
var font&=Create("Font","Verdana",16,0,0,0,0)
SetDialogFont 1
var GB&=Create("Grid",3,0)
var GBNeu&=Create("Grid",3,0)
DrawRaster 10
UpdateWindow
SetWindowPos %hwnd=((%maxX/2)-400),((%maxY/2)-300)-800,600;0
var xOff&=~GetSystemMetrics(32)'-------Dicke des Fensterrandes
var yOff&=~GetSystemMetrics(4)+xOff&'--Höhe der Titelleiste + Fensterrand
' ################ HAUPTSCHLEIFE
WhileNot %Umessage=16
    WaitInput
    If %Key=4
        UpdateWindow
    EndIf
    WhileLoop 0, GetCount(GB&)-1
        Temp$=GetString$(GB&,&loop)
        MX%=val(SubStr$(Temp$,1,"|"))
        MY%=val(SubStr$(Temp$,2,"|"))
        if Mouse(MX%,MY%-MX%+32,MY%+32)
            GI%=val(SubStr$(Temp$,3,"|"))
            ~ImageList_BeginDrag(IcoList&,GI%,(%mousex-xOff&-MX%),(%mousey-yOff&-MY%))
            ~ImageList_DragEnter(%hwnd,%mousex,%mousey)
            DragDrop
            ~ImageList_EndDrag()
            UseCursor 0
        endif
    EndWhile
EndWhile
deleteobject IcoList&
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  H.Brill
 | | Danke, das hilft mir sehr. KompilierenMarkierenSeparieren
 Das bringt mir dann das gewünschte Ergebnis.
 
 PS: Die Toolbar brauche ich ja nicht unbedingt.
 Ich kann die ImageListe ja auch so zeichnen.
 
 Muß mir den Code mal richtig reinziehen, damit
 ich weiß, was da abgeht.
 | 
 | 
|  | 
|  | | Benutze   XPROFAN X3 + FREEPROFANWir sind die XProfaner.
 Sie werden von uns assimiliert.
 Widerstand ist zwecklos!
 Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
 
 Was die Borg können, können wir schon lange.
 | 17.11.2015  ▲ | 
 | 
|  | 
| 
 
 
 | 
|  | 
|  ByteAttack
 | | Ja - Das ist ein älterer Code von mir. hab ihn jetzt gar nicht angepasst. 
  | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  H.Brill
 | | Jetzt muß ich nur noch erreichen, daß man unten auch die Position korrigieren kann. Man trifft ja
 nicht immer gleich ins Schwarze.
 
 Also noch ein Drag&Drop innerhalb des Rasters.
 
 Damit du verstehst, was ich meine :
 Etwa den Effekt, wie beim Windows Solitärspiel.
 Wenn man die Karte unten anhängt, rastet die
 unten ein, wenn man eine etwaige Postion
 erreicht hat.
 | 
 | 
|  | 
|  | | Benutze   XPROFAN X3 + FREEPROFANWir sind die XProfaner.
 Sie werden von uns assimiliert.
 Widerstand ist zwecklos!
 Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
 
 Was die Borg können, können wir schon lange.
 | 17.11.2015  ▲ | 
 | 
|  | 
| 
 
 
 | 
|  | 
|  Jörg
 Sellmeyer
 | | Dafür dürfte dann Between(....) der richtige Kandidat sein. Wenn du die Koordinaten für dein Raster hast (in einem Array oder Grid), kannst du dann mit Between überprüfen, in welchem Raster du landest. | 
 | 
|  | 
|  | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ...  | 17.11.2015  ▲ | 
 | 
|  | 
| 
 
 
 |