AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dropfiles und der Cursor

Ein Thema von turboPASCAL · begonnen am 9. Mai 2006 · letzter Beitrag vom 10. Mai 2006
Antwort Antwort
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

Dropfiles und der Cursor

  Alt 9. Mai 2006, 10:32
Hi,

ist es möglich bei (WM)DropFiles, also dem Drag and Drop von Dateien auf ein Programm, den Cursor passend zu wechseln ?

Beispiel, mit WMDropFiles holt man eine Datei in sein Programm, nun ist das Dateiformat aber von
diesem Programm nicht untertützt und nun soll an Stelle des crDrag-Cursors der crNoDrag-Cursor
angezeigt werden (schon beim ziehen über das Programm).

Apropo wie mach WinXP das mit den Icons mit text beim Drag and Droppen ?

Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: Dropfiles und der Cursor

  Alt 10. Mai 2006, 11:01
Irgend wie muss das funktionieren, Windows kann es ja. Nqach einer suche im Netz und Luckies Tut. fand ich die Messages:

DL_MESSAGE laut MSDN -> There are no search results to display
DL_BEGINDRAG, received when an item is selected
DL_DRAGGING, received while dragging
DL_CANCELDRAG, user cancel dragging by pressing ESCAPE
DL_DROPPED, user finished dragging and dropped the item

DL_STOPCURSOR, DL_COPYCURSOR, or DL_MOVECURSOR

MSDN Referenz


Leider ist das nur für Listboxen.
Das muss man doch auch auf ein Fenster beziehen können.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Dropfiles und der Cursor

  Alt 10. Mai 2006, 11:43
Ich glaube vom SwissDelphiCenter stammt der folgende Code, der jweils eine Zuweisung des Effektes (also auch Verbot) zulässt.

Delphi-Quellcode:
function TForm1.DragEnter(const dataObj: IDataObject; grfKeyState: Integer;
  pt: TPoint; var dwEffect: Integer): HResult;
var
  Form : tagFORMATETC;
begin
  dwEffect := DROPEFFECT_COPY; //Hier iss was
  with Form do
  begin
    cfFormat := CF_TEXT;
    ptd := nil;
    dwAspect := DVASPECT_CONTENT;
    lindex := -1;
    tymed := TYMED_HGLOBAL;
  end;
  Result := dataObj.QueryGetData(Form);
end;

function TForm1.DragLeave: HResult;
begin
  Result := S_OK;
end;

function TForm1.DragOver(grfKeyState: Integer; pt: TPoint;
  var dwEffect: Integer): HResult;
begin
  dwEffect := DROPEFFECT_COPY; //Guckst du hier
  Result := S_OK;
end;

function TForm1.Drop(const dataObj: IDataObject; grfKeyState: Integer;
  pt: TPoint; var dwEffect: Integer): HResult;
var
  aFmtEtc: TFORMATETC;
  aStgMed: TSTGMEDIUM;
  pData: PChar;
begin
  {Make certain the data rendering is available}
  if (dataObj = nil) then
    raise Exception.Create('IDataObject-Pointer is not valid!');
  with aFmtEtc do
  begin
    cfFormat := CF_TEXT;
    ptd := nil;
    dwAspect := DVASPECT_CONTENT;
    lindex := -1;
    tymed := TYMED_HGLOBAL;
  end;
  {Get the data}
  OleCheck(dataObj.GetData(aFmtEtc, aStgMed));
  try
    {Lock the global memory handle to get a pointer to the data}
    pData := GlobalLock(aStgMed.hGlobal);
    ScanTextForUrls(String(pData));
  finally
    {Finished with the pointer}
    GlobalUnlock(aStgMed.hGlobal);
    {Free the memory}
    ReleaseStgMedium(aStgMed);
  end;
  Result := S_OK;
end;
Initialisiert wird das via:
Delphi-Quellcode:
OleInitialize(nil);
  {Allow window to accept drop events}
  OleCheck(RegisterDragDrop(Handle, Self));
Und das Gegenteil ist:
Delphi-Quellcode:
{Finished accepting drops}
  RevokeDragDrop(Handle);
  OleUninitialize;
Ach so, das Formular braucht noch die IDropTarget-Unterstützung ... also:
MyNiceFormWithDropDeny = class(TForm, IDropTarget)
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: Dropfiles und der Cursor

  Alt 10. Mai 2006, 13:49
Ja, das ist mal ein Anhaltspunkt! Mal schauen ob man daraus was machen kann.

Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz