Deutsch
Wünsche und Anregungen

Vorschläge für künftige Versionen

Drag&Drop

 
- Seite 1 -



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  
 



 
- Seite 1 -



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  
 



 
- Seite 2 -



ByteAttack
Wobei es dabei ein "Problemchen" gibt, da man nur die Mauskoordinaten zurück bekommt und nicht das von der ImageListe. Je nachdem wo man jetzt das Icon "anpackt" ist es unterschiedlich...
Hab da leider (NOCH) keine Lösung
 
XProfan X3
Website:  [...] 
Facebook:  [...] 
17.11.2015  
 




Michael
W.
Nicht in Punkten, sondern in Kachelgröße denken...

Teile alles in Quadrate ein und arbeite dann mit Intersect(). Damit könnte man dann auch Zielrähmchen setzen.

Hierhin??, oder Hierhin??? ...
 
XProfan X3
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
17.11.2015  
 




H.Brill
Danke,
zuerst muß ich dann mal das Verschieben (Move) innerhalb
des Rasters hinbekommen.
 
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.
18.11.2015  
 




ByteAttack
So. Im Beispielcode habe ich es jetzt so "gedeichselt", daß wenn man das Icon "anfässt", der Cursor einfach in die Mitte des Icons hüpft.
KompilierenMarkierenSeparieren
USERMESSAGES 16
 $H Windows.ph
 $H Commctrl.ph
 $H Messages.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%,bereich#,be#,erg&,erg2&,x&,y&,text$,b#,xneu&,ClientRect#
Dim be#,8
Dim b#,16
Dim bereich#,1024
Dim ClientRect#,16

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

        ~ImageList_DragMove(%mousex,%mousey)

    EndWhile

EndProc

Proc MausMove' Setzt den Mauszeiger immer auf die Mitte des Icons

    ~GetCursorPos(be#)
    x&=Long(be#,0)
    y&=Long(be#,4)
    ~GetWindowRect(dummy&,b#)
    xneu&= Long(b#,0)+((GI%+1)*39)-19
    ~SetCursorPos(xneu&,Long(b#,4)+20)

EndProc

Proc DrawRaster

    Parameters Rasterweite%,Rasterfarbe%
    var rx%=Rasterweite%
    var ry%=Rasterweite%+60

    WhileLoop 10' Wegen der Geschwindigkeit nur 10x und dann als Bitmap in den Speicher

        Whileloop 10

            SetPixel rx%,ry%,Rasterfarbe%
            rx%=rx%+Rasterweite%

        EndWhile

        rx%=Rasterweite%
        ry%=ry%+Rasterweite%

    EndWhile

    MCls Rasterweite%*10,Rasterweite%*10,BackGround%
    CopyBmpToMem Rasterweite%,Rasterweite%+60 - Rasterweite%*10,Rasterweite%*10 > 0,0
    rx%=Rasterweite%
    ry%=Rasterweite%+60

    WhileNot ry%>=%maxy

        WhileNot rx%>=%maxX

            MCopyBmp 0,0-Rasterweite%*10,Rasterweite%*10 > rx%,ry%;0
            rx%=rx%+Rasterweite%*10

        EndWhile

        rx%=Rasterweite%
        ry%=ry%+Rasterweite%*10

    EndWhile

EndProc

'###################### HAUPTFENSTER
WindowStyle 31
WindowTitle "Rastafari"
Window %maxX+5,5 - 800,600
var dummy&=Control("DIALOG","",$54000000,0,0,0,0,%hwnd,0,%hinstance)
var BackGround%=~GetSysColor(15)
Cls BackGround%
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 8,RGB(0,0,0)
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
MausMove

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,"|"))
            MausMove' muss leider so oft :-(
            MausMove
            MausMove
            ~ImageList_BeginDrag(IcoList&,GI%,(%mousex-xOff&-MX%),(%mousey-yOff&-MY%))
            ~ImageList_DragEnter(%hwnd,%mousex,%mousey)
            DragDrop
            ~ImageList_EndDrag()
            UseCursor 0

        endif

    EndWhile

EndWhile

Dispose b#
Dispose be#
Dispose bereich#
Dispose ClientRect#
deleteobject IcoList&

1.506 kB
Bezeichnung:Beispiel exe
Hochgeladen:18.11.2015
Ladeanzahl97
Herunterladen
4 kB
Bezeichnung:Beispielcode
Hochgeladen:18.11.2015
Ladeanzahl108
Herunterladen
 
Website:  [...] 
Facebook:  [...] 
18.11.2015  
 




ByteAttack
Jörg Sellmeyer (17.11.15)
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.


Das wäre schon ein Mega-Array.... Bei einem Raster könnte man das auch einfach berechnen...
KompilierenMarkierenSeparieren
USERMESSAGES 16
 $H Windows.ph
 $H Commctrl.ph
 $H Messages.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%,bereich#,be#,erg&,erg2&,x&,y&,text$,b#,xneu&,ClientRect#,GlobalRaster%
Dim be#,8
Dim b#,16
Dim bereich#,1024
Dim ClientRect#,16
var Ausrichten%=1' 0=Nicht am Raster ausrichten | 1=Am Raster ausrichten

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 Einrasten

    Declare DrawX%,DrawY%

    if Ausrichten%=0

        DrawIcon IcoList&,GI%,%MouseX-16,%MouseY-16
        Return 0

    else

        DrawX%=((%MouseX-16)/GlobalRaster%)
        DrawX%=DrawX%*GlobalRaster%
        DrawY%=((%MouseY-16)/GlobalRaster%)
        DrawY%=DrawY%*GlobalRaster%
        DrawIcon IcoList&,GI%,DrawX%,DrawY%

    endif

EndProc

Proc DragDrop

    While %mousepressed'--Maustaste wird gehalten

        ~ImageList_DragMove(%mousex,%mousey)

    EndWhile

EndProc

Proc MausMove' Setzt den Mauszeiger immer auf die Mitte des Icons

    ~GetCursorPos(be#)
    x&=Long(be#,0)
    y&=Long(be#,4)
    ~GetWindowRect(dummy&,b#)
    xneu&= Long(b#,0)+((GI%+1)*39)-19
    ~SetCursorPos(xneu&,Long(b#,4)+20)

EndProc

Proc DrawRaster

    Parameters Rasterweite%,Rasterfarbe%
    GlobalRaster%=Rasterweite%
    var rx%=Rasterweite%
    var ry%=Rasterweite%+60

    WhileLoop 10' Wegen der Geschwindigkeit nur 10x und dann als Bitmap in den Speicher

        Whileloop 10

            SetPixel rx%,ry%,Rasterfarbe%
            rx%=rx%+Rasterweite%

        EndWhile

        rx%=Rasterweite%
        ry%=ry%+Rasterweite%

    EndWhile

    MCls Rasterweite%*10,Rasterweite%*10,BackGround%
    CopyBmpToMem Rasterweite%,Rasterweite%+60 - Rasterweite%*10,Rasterweite%*10 > 0,0
    rx%=Rasterweite%
    ry%=Rasterweite%+60

    WhileNot ry%>=%maxy

        WhileNot rx%>=%maxX

            MCopyBmp 0,0-Rasterweite%*10,Rasterweite%*10 > rx%,ry%;0
            rx%=rx%+Rasterweite%*10

        EndWhile

        rx%=Rasterweite%
        ry%=ry%+Rasterweite%*10

    EndWhile

EndProc

'###################### HAUPTFENSTER
WindowStyle 31
WindowTitle "Rasterfari"
Window %maxX+5,5 - 800,600
var dummy&=Control("DIALOG","",$54000000,0,0,0,0,%hwnd,0,%hinstance)
var BackGround%=~GetSysColor(15)
Cls BackGround%
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 20,RGB(0,0,0)
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
MausMove

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,"|"))
            MausMove
            MausMove
            MausMove
            ~ImageList_BeginDrag(IcoList&,GI%,(%mousex-xOff&-MX%),(%mousey-yOff&-MY%))
            ~ImageList_DragEnter(%hwnd,%mousex,%mousey)
            DragDrop
            ~ImageList_EndDrag()
            UseCursor 0
            Einrasten' Nicht zu verwechseln mit Ausrasten

        endif

    EndWhile

EndWhile

Dispose b#
Dispose be#
Dispose bereich#
Dispose ClientRect#
deleteobject IcoList&

1.506 kB
Hochgeladen:18.11.2015
Ladeanzahl93
Herunterladen
 
Website:  [...] 
Facebook:  [...] 
18.11.2015  
 




Jörg
Sellmeyer
Na ja - meistens hat man ja einen bestimmten Zielbereich und nicht den ganzen Bildschirm. Und selbst der wäre bei einem 16-Pixel-Raster selbst in 1900 Auflösung locker in einem Array unterzubringen.
Letztendlich kann man es sicher auch berechnen oder die Werte einfach in einer Listbox unterbringen.

Ich würde den Cursor eher in die linke obere Ecke setzen, dann hat man die Ecke des Icons zum Zielen.
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
19.11.2015  
 




H.Brill
Ja, das klappt im Raster jetzt schon besser.
Jetzt will ich nur noch die Symbole im Raster
verschieben können.
 
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.
19.11.2015  
 




ByteAttack
Jörg Sellmeyer (19.11.15)
Na ja - meistens hat man ja einen bestimmten Zielbereich und nicht den ganzen Bildschirm. Und selbst der wäre bei einem 16-Pixel-Raster selbst in 1900 Auflösung locker in einem Array unterzubringen.
Letztendlich kann man es sicher auch berechnen oder die Werte einfach in einer Listbox unterbringen.


Kann man auch in einem bestimmten Bereich berechnen...
Ich würde nur ein Array benutzen, wo die Icons gelandet sind.

Jörg Sellmeyer (19.11.15)
Ich würde den Cursor eher in die linke obere Ecke setzen, dann hat man die Ecke des Icons zum Zielen.


Einfach in
KompilierenMarkierenSeparieren
Proc MausMove

    xneu&= Long(b#,0)+((GI%+1)*39)-35
    ~SetCursorPos(xneu&,Long(b#,4)+4)

die Werte ändern und unter
KompilierenMarkierenSeparieren
Proc Einrasten

    DrawIcon IcoList&,GI%,%MouseX,%MouseY
    ...
    DrawX%=((%MouseX)/GlobalRaster%)
    DrawY%=((%MouseY)/GlobalRaster%)

alle -16 entfernen

H.Brill (19.11.15)
Ja, das klappt im Raster jetzt schon besser.
Jetzt will ich nur noch die Symbole im Raster
verschieben können.


Ein bisschen mußt auch selber machen...
Ich hab das ganze ja nur als Beispiel erstellt! Ich hab den Code extra einfach aufgeteilt und nicht optimiert...
 
Website:  [...] 
Facebook:  [...] 
19.11.2015  
 




H.Brill
Danke nochmals.
Hab jetzt noch was von Uwe 'Pascal' Niemeier
gefunden.
Werde mich mal am Wochende durchwursteln.
 
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.
19.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.223 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