![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Окна [D6, Win95/98, WinXP]
silenser © (2002-09-11 17:41:00)Кто подскажет как сделать склеиваемые окна, которые можно разносить и сцеплять в единое целое (как в Winampe)
Nostradamus (2002-09-13 02:03:00) [1]Я вот юнит раз для себя написал, можешь посмотреть на
http://f-soft.km.ru/vcl_r.html
Там и пример есть.
Almaz (2002-09-12 23:48:00) [2]
> Song © (11.09.02 17:44)
> См. в справке dockable windows
Dockable windows тут абсолютно не причем.
> silenser © (11.09.02 17:41)
> Кто подскажет как сделать склеиваемые окна, которые можно
> разносить и сцеплять в единое целое (как в Winampe)
Один из вариантов решения таков: вам необходимо обрабатывать сообщение WM_MOVE получаемое всеми вашими "липкими" окнами. В обрабочике анализируйте расстояние между текущим окном и другими формами и если оно меньше заданного, то "склеивайте" эти окна. Примерно так, хотя код и требует доработки:
type
TForm1 = class(TForm)
...
private
procedure WMMove(var Message: TWMMove); message WM_MOVE;
end;
...
const
Delta = 20;
procedure TForm1.WMMove(var Message: TWMMove);
var
I: Integer;
F: TForm;
begin
for I := 0 to Screen.FormCount - 1 do
begin
F := Screen.Forms[I];
if (F.Visible) and (F <> Self) then
begin
// Это сделает "липким" левый край формы
if (Abs(Left - F.Left - F.Width) < Delta) and
(Top > F.Top) and (Top < F.Top + F.Height) then
Left := F.Left + F.Width;
end;
end;
inherited;
end;
Удачи.
silenser (2002-09-12 13:52:00) [3]Извени не понял в какой справке
ничего не нашел можно подробнее
Song (2002-09-11 17:44:00) [4]См. в справке dockable windows