Deutsch
Wünsche und Anregungen

Vorschläge für künftige Versionen

Drag&Drop

 

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 + FREEPROFAN
Wir 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

 
XProfan X3
Website:  [...] 
Facebook:  [...] 
16.11.2015  
 




ByteAttack
mit
KompilierenMarkierenSeparieren
DEF PathFindExtension(1) ! "shlwapi","PathFindExtensionA"
DEF GetFileTitle(3) ! "COMDLG32","GetFileTitleA"

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#
 
XProfan X3
Website:  [...] 
Facebook:  [...] 
16.11.2015  
 




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 + FREEPROFAN
Wir 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...
 
XProfan X3
Website:  [...] 
Facebook:  [...] 
17.11.2015  
 




ByteAttack
soweit ich das jetzt in meinem kleinen Gehirn verstanden habe, geht daß was Du vor hast nur mit einem Rebar-Control...
 
XProfan X3
Website:  [...] 
Facebook:  [...] 
17.11.2015  
 




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 + FREEPROFAN
Wir 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&
 
XProfan X3
Website:  [...] 
Facebook:  [...] 
17.11.2015  
 




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 + FREEPROFAN
Wir 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.
 
XProfan X3
Website:  [...] 
Facebook:  [...] 
17.11.2015  
 




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 + FREEPROFAN
Wir 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  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

14.236 Betrachtungen

Unbenanntvor 0 min.
Sven Bader31.03.2023
funkheld12.12.2022
Walter11.12.2022
H.Brill12.10.2022
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie