Hallo.
@Kiffi
BSP hat geschrieben:
Hallo Andesdaf.
Nein, Dein Tip hilft leieder nicht,
weil es die Konstante in PB (5.11) nicht gibt.
Andesdaf meinte sicherlich #PB_EventType_DragStart
In meinem oben erweitertem Beispiel verwende ich die Konstante
"#PB_EventType_DragStart" bereits.
Ich benutze dort aber auch ein CanvasGadget.
Und das schein keine Drag- Operationen zu kennen.
Oder habe ich da schon wieder was übersehen?
(Im übersehen bin ich ja der Grösste. Schmunzel)
Dann:
Während einer laufenden Drag/Drop Op. geben PB- Events zurück:
- Bei einer Op von innerhalb des eigenem Prgs:
Nichts. Die Debugerausgabe steht still, bis ich die Maustaste wieder los lasse.
- Bei einer von aussen kommenden OP z.B. von WORD,:
1024
Der Mauszeiger ändert sich, das ist ja auch richtig.
Aber ich erhalte sonst keine weiteren Events,
um z.B. ein Feld unter der Maus zu Markieren.
Hier noch ein kleines Beispiel mit einem ImageGadget,
das den Drag- Start erkennt. Im Gegensatz zum Canvas.
Gruß:
Bernd
Code: Alles auswählen
; Gadgets
Enumeration
#anzeige
EndEnumeration
Global gadgstart = #PB_Compiler_EnumerationValue
Structure img
gadgid.i
imgid.i
EndStructure
Global NewList id.img()
Procedure GadgetUnterMaus(id)
GetWindowRect_(GadgetID(id),re.RECT)
GetCursorPos_(pt.POINT)
If PtInRect_(re, pt\y << 32 + pt\x) = 1
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure draw(gadgid.i, imgid, txt.s, col.i)
If Not IsImage(imgid):ProcedureReturn 0:EndIf
StartDrawing(ImageOutput(imgid))
Box(0,0,ImageWidth(imgid),ImageHeight(imgid),col)
x = (ImageWidth(imgid) - TextWidth(txt)) /2
y = (ImageHeight(imgid) - TextHeight(txt)) /2
DrawText(x,y,txt,0,col)
StopDrawing()
SetGadgetState(id()\gadgid, ImageID(imgid))
EndProcedure
OpenWindow(0,0,0,200,300,"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
For i = 0 To 4
AddElement(id())
id()\imgid = gadgstart + i
CreateImage(id()\imgid, 160, 24)
id()\gadgid = gadgstart + i
ImageGadget(id()\gadgid, 10, 10 + i * 40, 160, 24, ImageID(id()\imgid))
EnableGadgetDrop(id()\gadgid, #PB_Drop_Image, #PB_Drag_Copy)
draw(id()\gadgid, id()\imgid, "Feld : "+Str(i), RGB(255,255,255))
Next
id_alt=-1
Repeat
ev = WaitWindowEvent(20)
Debug ev
Select ev
Case #PB_Event_CloseWindow
ende=1
Case #PB_Event_Gadget
ForEach id()
If EventGadget() = id()\gadgid
Select EventType()
Case #PB_EventType_DragStart
DragImage(ImageID(ID()\imgid),#PB_Drag_Copy)
EndSelect
Break
EndIf
Next
Case 1024 ; Drag am Laufen
; ForEach id()
; If GadgetUnterMaus(id()\gadgid)
; If id_alt <> id()\gadgid
; draw(id_alt, "", RGB(255,255,255))
; draw(id()\imgid, "Drag läuft", RGB(175, 238, 238))
; id_alt = id()\imgid
; Break
; EndIf
; EndIf
; Next
;
Case #PB_Event_GadgetDrop
ForEach id()
If EventGadget() = id()\gadgid
If EventDropType() = #PB_Drop_Image
EventDropImage(id()\imgid)
SetGadgetState(id()\gadgid,ImageID(id()\imgid))
EndIf
Break
EndIf
Next
EndSelect
Until ende