Mouse imlecinin o anki durumunu tespit etmeye çalışıyorum fakat bir türlü beceremedim.
Form üzerine belge bırakıyorum. Mouse taşıma modunda ise, buna göre formu şekillendirmem gerekiyor.
ApplicationEvent ile kontol etmeye çalıştım onuda beceremedim

Kod: Tümünü seç
var
P: TPoint;
begin
GetCursorPos(P);
ShowMessage('X = ' + IntToStr(P.X) + ', Y = ' + IntToStr(P.Y));
hocam bir yanlış anlaşılma durumu var, koordinatları değil, durumunu tespit etmeye çalışıyorum. bir belgeyi yada klasörü taşımak isteğimizdeki mous durumu. cursor=crDragAliZairov yazdı:İyi akşamlar. Bir zaman işime yaramıştı. Kordinatı bulur.
Kod: Tümünü seç
var P: TPoint; begin GetCursorPos(P); ShowMessage('X = ' + IntToStr(P.X) + ', Y = ' + IntToStr(P.Y));
Kod: Tümünü seç
var
cInfo: TCursorInfo;
begin
cInfo.cbSize := SizeOf(cInfo);
GetCursorInfo(cInfo);
//burada cInfo.hCursor değeri size cursor'un şekline göre farklı değerler verir
Veli Hocam GetCursorinfo yu araştırırken bahsettim konudan daha önce forumda(Burada) bahsedildiğini farkettim. o konuyuda inceledim fakat yine çözüm üretemedim.SimaWB yazdı:Cursor'un şekline göre birşeyler yapmak bana pek mantıklı gelmedi ama formun OnDragOver olayı işinize yaramıyor mu?
Ama illa öyle yapmak istirosanız:
Cursor hakkında bilgi almak için Windows'un GetCursorInfo APIsini kullanabilirsiniz.Kod: Tümünü seç
var cInfo: TCursorInfo; begin cInfo.cbSize := SizeOf(cInfo); GetCursorInfo(cInfo); //burada cInfo.hCursor değeri size cursor'un şekline göre farklı değerler verir
hocam siz böyle söylüyorsanız biraz daha tırmalamam gerekiyor demektirSimaWB yazdı:Yine de GetCursorInfo işinizi görür gibi gözüküyor
Kod: Tümünü seç
type
TForm1 = class(TForm)
Kod: Tümünü seç
type
TForm1 = class(TForm, IDropTarget)
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActiveX, ComObj, ExtCtrls, ShellApi;
type
TForm1 = class(TForm, IDropTarget) // IDropTarget için uses ActiveX ekledik.
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
// -------------------------------------------------------------------------- //
// DragDrop için eklenen IDropTarget metodları
// -------------------------------------------------------------------------- //
protected
function IDropTarget.DragEnter = DropTargetDragEnter;
function DropTargetDragEnter(const dataObj: IDataObject;
grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult;
stdcall;
function IDropTarget.DragOver = DropTargetDragOver;
function DropTargetDragOver(grfKeyState: Longint; pt: TPoint;
var dwEffect: Longint): HResult;
stdcall;
function IDropTarget.DragLeave = DropTargetDragLeave;
function DropTargetDragLeave: HResult;
stdcall;
function IDropTarget.Drop = DropTargetDrop;
function DropTargetDrop(const dataObj: IDataObject; grfKeyState:
Longint; pt: TPoint; var dwEffect: Longint): HResult; stdcall;
// -------------------------------------------------------------------------- //
// -------------------------------------------------------------------------- //
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
function TForm1.DropTargetDragEnter(const dataObj: IDataObject;
grfKeyState: Integer; pt: TPoint; var dwEffect: Integer): HResult;
begin
Panel1.Visible := True;
Panel1.Color := clGreen;
dwEffect := DROPEFFECT_COPY;
Result := S_OK;
end;
function TForm1.DropTargetDragLeave: HResult;
begin
Panel1.Visible := True;
Panel1.Color := clRed;
Result := S_OK;
end;
function TForm1.DropTargetDragOver(grfKeyState: Integer; pt: TPoint;
var dwEffect: Integer): HResult;
begin
//Panel1.Visible := False; // Diyebilirsin... Ben biraz daha renklendirdim...
dwEffect := DROPEFFECT_COPY;
Result := S_OK;
end;
function TForm1.DropTargetDrop(const dataObj: IDataObject; grfKeyState: Integer;
pt: TPoint; var dwEffect: Integer): HResult;
var
FmtEtc: TFormatEtc;
Medium: TStgMedium;
DroppedFileCount: Integer;
I: Integer;
FileNameLength: Integer;
FileName: string;
begin
FmtEtc.cfFormat := CF_HDROP;
FmtEtc.ptd := nil;
FmtEtc.dwAspect := DVASPECT_CONTENT;
FmtEtc.lindex := -1;
FmtEtc.tymed := TYMED_HGLOBAL;
OleCheck(DataObj.GetData(FmtEtc, Medium));
try
try
DroppedFileCount := DragQueryFile( // DragQueryFile için uses'a ShellApi
Medium.hGlobal, $FFFFFFFF, nil, 0
);
for I := 0 to Pred(DroppedFileCount) do
begin
FileNameLength := DragQueryFile(Medium.hGlobal, I, nil, 0);
SetLength(FileName, FileNameLength);
DragQueryFile(
Medium.hGlobal, I, PChar(FileName), FileNameLength + 1
);
// Elimizde full file name var....
Panel1.Caption := ExtractFileName( FileName );
end;
finally
DragFinish(Medium.hGlobal);
end;
finally
ReleaseStgMedium(Medium);
end;
Panel1.Visible := True;
Panel1.Color := clSilver;
Result := S_OK;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
OleInitialize(nil);
OleCheck(RegisterDragDrop(Handle, Self)); // OleCheck için uses ComObj
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
RevokeDragDrop(Handle);
OleUninitialize;
end;
end.
Kod: Tümünü seç
function TForm1.DropTargetDragEnter(const dataObj: IDataObject;
grfKeyState: Integer; pt: TPoint; var dwEffect: Integer): HResult;
begin
Panel1.Visible := False;
//Panel1.Color := clGreen;
dwEffect := DROPEFFECT_COPY;
Result := S_OK;
end;
function TForm1.DropTargetDragLeave: HResult;
begin
Panel1.Visible := True;
//Panel1.Color := clRed;
Result := S_OK;
end;
function TForm1.DropTargetDragOver(grfKeyState: Integer; pt: TPoint;
var dwEffect: Integer): HResult;
begin
//Panel1.Visible := False; // Diyebilirsin... Ben biraz daha renklendirdim...
dwEffect := DROPEFFECT_COPY;
Result := S_OK;
end;