Hallo.
Kennt jemannd die Windoweventkonstante für:
"Drag gestartet" bzw. "Drag im Gange" ?
Wenn ich eine Drag&Drop operation gestartet habe,
z.B. von einem Windowobjekt zu einem PB- Objekt,
liefert PB erst ein neues Event , wenn ich die Operation beendet habe.
Also bei "Drop" on Gadget oder Window.
Window selber liefert anscheinend die Nummer 1024 zurück.
Könnt ihr helfen?
Danke:
Bernd
Konstante - Drag gestartet
Konstante - Drag gestartet
PB 5.31 (x86) & (x64) Win10
Re: Konstante - Drag gestartet
Hier noch ein kurzes Prg zur Veranschaulichung:
Bernd
Code: Alles auswählen
; Gadgets
Enumeration
#anzeige
EndEnumeration
Global gadgstart = #PB_Compiler_EnumerationValue
Global NewList id()
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(id.i, txt.s, col.i)
If Not IsGadget(id):ProcedureReturn 0:EndIf
StartDrawing(CanvasOutput(id))
Box(0,0,GadgetWidth(id),GadgetHeight(id),col)
x = (GadgetWidth(id) - TextWidth(txt)) /2
y = (GadgetHeight(id) - TextHeight(txt)) /2
DrawText(x,y,txt,0,col)
StopDrawing()
EndProcedure
OpenWindow(0,0,0,200,300,"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
For i = 0 To 4
AddElement(id())
id() = gadgstart + i
CanvasGadget(id(), 10, 10 + i * 40, 160, 24)
EnableGadgetDrop(ID(), #PB_Drop_Text | #PB_Drop_Files, #PB_Drag_Copy)
Next
CanvasGadget(#anzeige, 10, 10 + i * 40, 160, 24)
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()
draw(#anzeige, "EventType() = " +Str(EventType()), RGB(255,255,255))
Select EventType()
Case #PB_EventType_MouseLeave
draw(id(), "", RGB(255,255,255))
id_alt=-1
Case #PB_EventType_MouseEnter
draw(id(), "Betreten", RGB(0,255,0))
Case #PB_EventType_DragStart
draw(id(), "Drag gestartet", RGB(0,255,0))
Default
EndSelect
Break
EndIf
Next
Case 1024 ; Drag am Laufen
ForEach id()
If GadgetUnterMaus(id())
If id_alt <> id()
draw(id_alt, "", RGB(255,255,255))
draw(id(), "Drag läuft", RGB(175, 238, 238))
id_alt = id()
Break
EndIf
EndIf
Next
Case #PB_Event_GadgetDrop
ForEach id()
If EventGadget() = id()
If EventDropType() = #PB_Drop_Files
draw(id(), EventDropFiles(), RGB(0,255,0))
draw(#anzeige, "DropOnGadget", RGB(255,255,255))
EndIf
;id_alt=-1
Break
EndIf
Next
Default
;DragOverId_alt=-1
EndSelect
Until ende
Zuletzt geändert von BSP am 27.04.2013 22:55, insgesamt 1-mal geändert.
PB 5.31 (x86) & (x64) Win10
Re: Konstante - Drag gestartet
Hallo Andesdaf.
Nein, Dein Tip hilft leieder nicht,
weil es die Konstante in PB (5.11) nicht gibt.
Ich habe mein Prg oben noch mal erweitert.
Fahrt Ihr mit der Maus über das Fenster, reagiert
"WaitWindowEvent()"
mit verschiedenen möglichkeiten.
Zieht nun mal ein Desktopobjekt über das Fenster.
Wenn Ihr damit über ein Empfangsbereites Gadget fahrt, liefert
"WaitWindowEvent()" die Werte 1024 und 0 zurück.
Hintergrund meines Themas:
Ich möchte gerne, das mein Prg auch bei einer von Windows kommenden Drag/Drop Operation reagiert.
Z.B. und die Objekte zu Markieren, über der sich die Maus gerade befindet.
Na, ja. Reagiere ich auf das Event 1024, scheint es ja zu funktionieren.
Gruß & Dank:
Bernd
Nein, Dein Tip hilft leieder nicht,
weil es die Konstante in PB (5.11) nicht gibt.
Ich habe mein Prg oben noch mal erweitert.
Fahrt Ihr mit der Maus über das Fenster, reagiert
"WaitWindowEvent()"
mit verschiedenen möglichkeiten.
Zieht nun mal ein Desktopobjekt über das Fenster.
Wenn Ihr damit über ein Empfangsbereites Gadget fahrt, liefert
"WaitWindowEvent()" die Werte 1024 und 0 zurück.
Hintergrund meines Themas:
Ich möchte gerne, das mein Prg auch bei einer von Windows kommenden Drag/Drop Operation reagiert.
Z.B. und die Objekte zu Markieren, über der sich die Maus gerade befindet.
Na, ja. Reagiere ich auf das Event 1024, scheint es ja zu funktionieren.
Gruß & Dank:
Bernd
PB 5.31 (x86) & (x64) Win10
Re: Konstante - Drag gestartet
Andesdaf meinte sicherlich #PB_EventType_DragStartBSP hat geschrieben:Hallo Andesdaf.
Nein, Dein Tip hilft leieder nicht,
weil es die Konstante in PB (5.11) nicht gibt.
Grüße ... Kiffi
a²+b²=mc²
Re: Konstante - Drag gestartet
Schau dir SetDropCallback() an: http://www.purebasic.com/german/documen ... lback.html
Re: Konstante - Drag gestartet
Hallo.
@Kiffi
"#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
@Kiffi
In meinem oben erweitertem Beispiel verwende ich die KonstanteBSP 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
"#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
PB 5.31 (x86) & (x64) Win10