Beste tweakers,
Voor school moeten we in Delphi een Active X control maken die via een browser moet werken. Het idée is een control te maken waarin een bestand gesleept kan worden. Vervolgens kunnen hier enkele mutaties op gedaan worden.
Ik ben begonnen met het maken van een Active X Control, redelijk basic van opzet. Mijn idee was om allereerst het droppen af te vangen alvorens ik met de rest aan de slag zou kunnen gaan.
Bovenstaande werkt perfect wanneer ik in mijn ActiveFormCreate hetvolgende aanroep:
Wanneer ik mijn ActiveX controller registreer en deze vervolgens in een applicatie ga gebruiken werkt het drag en droppen perfect.
Echter wanneer ik mijn controller Deploy voor het web en deze aanroep via IE krijg ik niet het gewenste resultaat. Het object wordt wél getoond op de pagina, maar waneer ik een bestand in het object sleep vangt IE het drop event af door het bestand wat gesleept wordt te openen.
Het lijkt erop dat IE de message gewoon ontvange en mijn controller deze niet onderschept. Heeft iemand ervaring met het onderscheppen van dit soort messages waardoor de drop gewoon op het object terecht komt?
Ik heb pogingen gedaan met javascript de events te annuleren. Het drag en droppen wordt hiermee geannuleerd, en komt ook niet bij mijn controller terecht.
Ik ben hier nu al een aantal uur mee bezig en ben nog niet tot een geschikte oplossing gekomen. Wellicht dat iemand van jullie mij hier een antwoord op kan geven?
Greetz, dip
Voor school moeten we in Delphi een Active X control maken die via een browser moet werken. Het idée is een control te maken waarin een bestand gesleept kan worden. Vervolgens kunnen hier enkele mutaties op gedaan worden.
Ik ben begonnen met het maken van een Active X Control, redelijk basic van opzet. Mijn idee was om allereerst het droppen af te vangen alvorens ik met de rest aan de slag zou kunnen gaan.
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| procedure TMyFormX.AcceptFiles( var msg : TMessage ); const cnMaxFileNameLen = 255; var i, nCount : integer; acFileName : array [0..cnMaxFileNameLen] of char; begin // hoeveel bestanden zijn er gedropped? nCount := DragQueryFile( msg.WParam, $FFFFFFFF, acFileName, cnMaxFileNameLen ); // een voor een verwerken for i := 0 to nCount-1 do begin DragQueryFile( msg.WParam, i, acFileName, cnMaxFileNameLen ); // verwerking bestand, in dit geval een alert MessageBox( Handle, acFileName, '', MB_OK ); end; // klaar DragFinish( msg.WParam ); end; |
Bovenstaande werkt perfect wanneer ik in mijn ActiveFormCreate hetvolgende aanroep:
Delphi:
1
| DragAcceptFiles( Handle, True ); |
Wanneer ik mijn ActiveX controller registreer en deze vervolgens in een applicatie ga gebruiken werkt het drag en droppen perfect.
Echter wanneer ik mijn controller Deploy voor het web en deze aanroep via IE krijg ik niet het gewenste resultaat. Het object wordt wél getoond op de pagina, maar waneer ik een bestand in het object sleep vangt IE het drop event af door het bestand wat gesleept wordt te openen.
Het lijkt erop dat IE de message gewoon ontvange en mijn controller deze niet onderschept. Heeft iemand ervaring met het onderscheppen van dit soort messages waardoor de drop gewoon op het object terecht komt?
Ik heb pogingen gedaan met javascript de events te annuleren. Het drag en droppen wordt hiermee geannuleerd, en komt ook niet bij mijn controller terecht.
JavaScript:
1
2
3
4
| document.body.ondragenter = handler; document.body.ondragover = handler; document.body.ondrop = handler; function() { return false; }; |
Ik ben hier nu al een aantal uur mee bezig en ben nog niet tot een geschikte oplossing gekomen. Wellicht dat iemand van jullie mij hier een antwoord op kan geven?
Greetz, dip
[ Voor 7% gewijzigd door dip op 15-11-2005 18:03 . Reden: typo fixt :) ]
It's scientifically known, that base improves the tase of cheezes!