GetMem(lpszFile, SizeName+1);
DragQueryFile(hDrop, i, lpszFile, SizeName+1);
lb.Items.Add(lpszFile);
FreeMem(lpszFile, SizeName+1);
end;
DragFinish(hDrop);
end;
procedureTForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle,True);
end;
procedureTForm1.Button1Click(Sender: TObject);
begin
lb.Items.Clear;
end;
procedureTForm1.Button2Click(Sender: TObject);
begin
ShellAbout(Handle, 'Anton Saburov', 'APSystems', 0);
end;
end.
Как програмным путем задавать координаты ярлыкам на рабочем столе?
Рабочий стол перекрыт сверху компонентом ListView. Вам просто необходимо взять хэндл этого органа управления. Пример:
functionGetDesktopListViewHandle: THandle;
varS: String;
begin
Result := FindWindow('ProgMan', nil);
Result := GetWindow(Result, GW_CHILD);
Result := GetWindow(Result, GW_CHILD);
SetLength(S, 40);
GetClassName(Result, PChar(S), 39);
ifPChar(S) <> 'SysListView32' thenResult := 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: ssa_sss@mail.ru
Nomadicдополняет:
К примеру, следующая строка кода:
SendMessage(GetDesktopListViewHandle, LVM_ALIGN, LVA_ALIGNLEFT, 0);
разместит иконки рабочего стола по левой стороне рабочего стола Windows.
Как я могу использовать анимированный курсор?
Из советов Nomadic'a:
Сперва Вы должны взять хэндл курсора Windows и присвоить его одному из элементов массива Cursors обьекта Screen.
Предопределенные курсоры имеют отрицательный индекс, а определенные пользователем (Вами) курсоры получают положительные индексы.
Ниже пример формы, использующей анимированный курсор:
procedureTForm1.Button1Click(Sender: TObject);
varh: THandle;
begin
h:= LoadImage(0, 'C:\TheWall\Magic.ani', IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE orLR_LOADFROMFILE);
ifh = 0 thenShowMessage('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советует:
Пример из серии "Что можно сделать с рабочим столом". В общем, это обычный трюк с кнопкой "Пуск" (Start).
Совместимость: все версии Delphi
{ объявляем глобальные переменные }
var
Form1: TForm1;
StartButton: hWnd;
OldBitmap: THandle;
NewImage: TPicture;
{ добавляем следующий код в событие формы OnCreate }
procedureTForm1.FormCreate(Sender: TObject);
begin
NewImage := TPicture.create;
NewImage.LoadFromFile('C:\Windows\Circles.BMP');
StartButton := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil);
OldBitmap := SendMessage(StartButton, BM_SetImage, 0, NewImage.Bitmap.Handle);
end;
{ Событие OnDestroy }
procedureTForm1.FormDestroy(Sender: TObject);
begin
SendMessage(StartButton, BM_SetImage, 0, OldBitmap);
NewImage.Free;
end;
Как программно заменить обои на рабочем столе? III
Igor Nikolaev aKa The Spriteсоветует:
programwallpapr;
usesRegistry, WinProcs;
procedureSetWallpaper(sWallpaperBMPPath: String; bTile: boolean);
varreg : TRegIniFile;
begin
// Изменяем ключи реестра
// HKEY_CURRENT_USER
// Control Panel\Desktop
// TileWallpaper (REG_SZ)
// Wallpaper (REG_SZ)
reg := TRegIniFile.Create('Control Panel\Desktop');
withreg do begin
WriteString('', 'Wallpaper', sWallpaperBMPPath);
if(bTile) then begin
WriteString('', 'TileWallpaper', '1');
end else begin
WriteString('', 'TileWallpaper', '0');
end;
Читать дальше