| |
|
|
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
|
|
|
| |
|
|
|
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 + 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... |
|
|
| |
|
|
|
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 + 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... KompilierenMarkierenSeparierenUSERMESSAGES 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 + 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.
|
|
|
| |
|
|
|
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 ▲ |
|
|
|