Wünsche und Anregungen | | | | - 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.
|
| | | | |
| | 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 |
| | | | |
| | 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 X3System: 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. KompilierenMarkierenSeparierenUSERMESSAGES 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&
|
| | | | |
| | 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... KompilierenMarkierenSeparierenUSERMESSAGES 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&
|
| | | | |
| | 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. |
| | | | |
| | 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 die Werte ändern und unter KompilierenMarkierenSeparieren 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... |
| | | | |
| | 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 ▲ |
| |
|
AntwortenThemenoptionen | 14.229 Betrachtungen |
ThemeninformationenDieses Thema hat 4 Teilnehmer: |