uses CommCtrl; var i, k:Integer; XYold, XY : Array[1..100] of TPoint; CurPos:TPoint;
Сначала получаем Handle DeskTop'a:
function GetHandle: 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;
Получаем координаты иконок на столе. Как оказывается, это самое трудное. Если посмотреть код GETITEMPOSITION в CommCtrl.pas, то его повтор в Delphi
почему-то не работает. Т.е. он работает, но непонятно как:)) Поэтому делаем так:
function GetXY(hwndLV: HWND; i: Integer; var ppt: TPoint): Bool; var PointBuf : ^TPoint; begin try PointBuf := VirtualAlloc(NIL,Sizeof(TPoint), $8000000 or MEM_COMMIT, PAGE_READWRITE); Result := Bool( SendMessage(hWndLV, LVM_GETITEMPOSITION, i, Longint(PointBuf))); if Result thenbegin ppt.x := PointBuf^.x; ppt.y := PointBuf^.y; end; finally VirtualFree(PointBuf,0,MEM_RELEASE); end; end; ...
Сохраняем координаты иконок в XYold:
for k:=1 to i do GetXY(GetHandle,k-1,XYold[k]);
Иконка с индексом 0 - всегда "Мой компьютер", остальные - у кого как:)) ... А вот, как по таймеру двигать иконки туда-сюда, если подвести к ним курсор:
procedure
TForm1.Timer1Timer(Sender: TObject); var k:Integer; begin GetCu
rsorPos(CurPos); for k:=1 to i dobegin G
etXY(GetHandle,k-1,XY[k]); if (CurPos.x>XY[k].x+4) and (CurPos.xand (CurPos.y>XY[k].y+4) and (CurPos.ythenbegin SendMessage(GetHandle,LVM_SETITEMPOSITION,k-1,MakeLong(XY[k].x+Random(64)-Random(64), XY[k].y+Random(64)-Random(64))); end; end; end; ...
И, наконец, возвращаем все иконки на место перед завершением программы:
procedure TForm1.FormDestroy(Sender: TObject); var k:Integer; begin for k:=1 to i do SendMessage(GetHandle,LVM_SETITEMPOSITION,k-1,MakeLong(XYold[k].x,XYold[k].y)); end;
Может быть эти фрагменты кому-нибудь помогут:))) А моя программка до сих пор валяется на http://freesoft.kulichki.net/katalog/ufen/5003.html
Программирование серверных приложений для Microsoft Windows 2000 (+CD)
В книге Дж. Рихтера исчерпывающе описаны функции новой операционной системы Microsoft — Windows 2000, позволяющие создавать высокопроизводительные и надежные серверные приложения. Менеджер управления службами, контроль производительности и системных событий, асинхронный ввод-вывод, система безопасности и защищенное взаимодействие приложений обеспечат надежную и эффективную работу ваших приложений в качестве служб операционной системы 24 часа в сутки 7 дней в неделю. Все главы содержат примеры, написанные на C++, демонстрирующие описываемые технологии. Вы можете использовать в своих приложениях фрагменты этих программ и готовые классы C++, исходные тексты которых содержатся на прилагаемом компакт-диске. Книга состоит из 12 глав, 2 приложений и предметного указателя. Прилагаемый к книге компакт-диск содержит программное обеспечение, примеры приложений, документацию
и электронную версию книги.
Автор: Дж. Рихтер, Дж. Кларк
Хокку дня
Бушует морской простор! Далеко, до острова Садо, Стелется Млечный Путь.
Афоризмы
Надо согласиться с Вовенаргом: Если афоризм нуждается в пояснениях, значит, он неудачен....
Фраза дня
"Носорог плохо видит, но при таком весе это уже не его проблемы. " //Виктор Шендерович
Дурацкие законы (информация предоставлена сайтом kurilka.com)
В Коннектикуте (США) велосипедистам запрещено ездить со скоростью больше ста километров в час.
В городе Девон в Коннектикуте (США) запрещается ходить задом после заката солнца.
И на закуску коротенький анекдот
Если аборт - это убийство, то минет - людоедство!