procedure WMDropFiles(var M: TMessage); message WM_DROPFILES;
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
Var
CountFiles: integer;
SizeName : integer;
cch : integer;
Var
hDrop: integer;
Point: TPoint;
lpszFile: PChar;
{$R *.DFM}
procedure TForm1.WMDropFiles(var M: TMessage);
Var i: integer;
begin
hDrop:= M.WParam;
DragQueryPoint(hDrop, Point);
CountFiles:= DragQueryFile(hDrop, $FFFFFFFF, nil, cch);
for i:=0 to CountFiles-1 do begin
SizeName:= DragQueryFile(hDrop, i, nil, cch);
GetMem(lpszFile, SizeName+1);
DragQueryFile(hDrop, i, lpszFile, SizeName+1);
lb.Items.Add(lpszFile);
FreeMem(lpszFile, SizeName+1);
end;
DragFinish(hDrop);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle,True);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
lb.Items.Clear;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShellAbout(Handle, 'Anton Saburov', 'APSystems', 0);
end;
end.
Рабочий стол
Как програмным путем задавать координаты ярлыкам на рабочем столе?
Рабочий стол перекрыт сверху компонентом ListView. Вам просто необходимо взять хэндл этого органа управления. Пример:
function GetDesktopListViewHandle: THandle;
var S: String;
begin
Result := FindWindow('ProgMan', nil);
Result := GetWindow(Result, GW_CHILD);
Result := GetWindow(Result, GW_CHILD);
SetLength(S, 40);
GetClassName(Result, PChar(S), 39);
if PChar(S) <> 'SysListView32' then Result := 0;
end;
После того, как Вы взяли тот хэндл, Вы можете использовать API этого ListView, определенный в модуле CommCtrl, для того, чтобы манипулировать рабочим столом. Смотрите тему «LVM_xxxx messages» в оперативной справке по Win32.
К примеру, следующая строка кода:
ListView_SetItemPosition(GetDesktopListViewHandle, i, x, y); {Не забудьте в uses добавить CommCtrl}
ярлыку с индексом i, задаст координаты (x,y). К примеру Мой компьютер имеет индекс 0, т.е i:=0;
С наилучшими пожеланиями, Сергей.
E-mail: [email protected]
Nomadic дополняет:
К примеру, следующая строка кода:
SendMessage(GetDesktopListViewHandle, LVM_ALIGN, LVA_ALIGNLEFT, 0);
разместит иконки рабочего стола по левой стороне рабочего стола Windows.
Как я могу использовать анимированный курсор?
Из советов Nomadic'a:
Сперва Вы должны взять хэндл курсора Windows и присвоить его одному из элементов массива Cursors обьекта Screen.
Предопределенные курсоры имеют отрицательный индекс, а определенные пользователем (Вами) курсоры получают положительные индексы.
Ниже пример формы, использующей анимированный курсор:
procedure TForm1.Button1Click(Sender: TObject);
var h: THandle;
begin
h:= LoadImage(0, 'C:\TheWall\Magic.ani', IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE or LR_LOADFROMFILE);
if h = 0 then ShowMessage('Cursor not loaded')
else begin
Screen.Cursors[1] := h;
Form1.Cursor := 1;
end;
end;
Как узнать текущее разрешение экрана?
Из советов Nomadic'a :
Советуем ознакомиться с Help topic относительно глобального обьекта Screen типа TScreen. У этого обьекта есть свойства Width и Height.
{ Example }
begin
iScreenWidth := Screen.Width;
end;
Заодно и другие свойства могут Вас заинтересовать, например, Fonts и Cursors.
Как изменить изображение кнопки `Пуск`
The_Sprite советует: