Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Как при перемещении гл формы, перемешать и ее дочерние   Найти похожие ветки 

 
Layner ©   (2003-11-04 08:41) [0]

Гл. форма - обычная, дочерние появляются так
df.top:=mf.top;
df.left:=mf.left+mf.width;
df.show

Вобщем то вот и вопрос.. Заранее благодарен.


 
Zacho ©   (2003-11-04 09:14) [1]

Обрабатывать сообщение WM_WINDOWPOSCHANGING или WM_WINDOWPOSCHANGED


 
Layner ©   (2003-11-04 10:41) [2]

Zacho © (04.11.03 09:14)
Спасибо, благодаря совету нарыл массу полезной информации, например как прилипалка формы к границам раб. стола. А вот как туда ещё внедрить передвижение и дочерних форм, вместе с главной?

При передвижении должно пересчитываться

fs.Top:=mf.Top; //это дочерняя форма
fs.Left:=mf.Left-fs.Width;

А эта рабочая процедура "прилипалки"


private
procedure WMWindowPosChanging(var Message:TMessage);message
WM_WINDOWPOSCHANGING;
...
procedure Tmf.WMWindowPosChanging(var Message:TMessage);
type
PWindowPos = ^TWindowPos;
var
vp : PWindowPos;
const
xdelt = 15;
ydelt = 15;
begin
vp := PWindowPos(Message.LParam);
if abs(vp^.x) < xdelt then vp^.x := 0
else
if abs(Screen.Width - (vp^.x + width)) < xdelt then
vp^.x := Screen.Width - width;
if abs(vp^.y) < ydelt then vp^.y := 0
else
if abs(Screen.Height - (vp^.y + height)) < ydelt then
vp^.y := Screen.Height - height;
end;


 
ZEE ©   (2003-11-04 10:48) [3]

>Layner © (04.11.03 10:41) [2]
>например как прилипалка формы к границам раб. стола
не к рабочему столу, а к экрану - чтоб к рабочему столу надо найти его WORKAREA
var WorkArea:TRect;
...
SystemParametersInfo(SPI_GETWORKAREA,0,@WorkArea,0);

а потом уж "липить" к ней...

а чтоб таскать детей:
fs.Top:=vp^.x;
fs.Left:=vp^.y;


 
ZEE ©   (2003-11-04 10:49) [4]

поправка:
fs.Top:=vp^.y;
fs.Left:=vp^.x-fs.Width;


 
Layner ©   (2003-11-04 11:00) [5]

Спасибо! Код ясен теперь.
Единственно что, вылетает ошибка "в таком то модуле памяти" после компиляции. Думал на Uses, на пересравлял вверх, и после implementation, не помогает :(


 
ZEE ©   (2003-11-04 11:16) [6]


> Layner © (04.11.03 11:00) [5]
> Спасибо! Код ясен теперь.
> Единственно что, вылетает ошибка "в таком то модуле памяти"
> после компиляции. Думал на Uses, на пересравлял вверх, и
> после implementation, не помогает :(

просто WM_WINDOWPOSCHANGING главного окна срабатывает до того как было создано дочеренее поэтому при перетаскивании дочернего надо проверять создано ли уже оно...


 
Layner ©   (2003-11-04 11:29) [7]

Получилось!

........................
if Assigned(form2) then //проверка
if form2.Visible then
begin
form2.Top:=vp^.y;
form2.Left:=vp^.x-form2.Width;
end;


Но форма 2 появляется не после нажатия кнопки, а уже после кнопки и перемещения :(

procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Top:=form1.Top;
form2.Left:=form1.Left-form2.Width;
form2.Show;
end;


 
Layner ©   (2003-11-04 11:49) [8]

ZEE подскажи плз, почему форма видна не сразу после клика, а только после перемещения?


 
ZEE ©   (2003-11-04 12:18) [9]

что-то не понял вопроса :(
в чем трабл щас-то?


 
Layner ©   (2003-11-04 13:04) [10]

Кликаю Button1Click, дочерней формы нет, но фокус видимо ей передается, т.к. главная становится не активной, чуть перемещу гл форму - дочерняя всплывает..


 
ZEE ©   (2003-11-04 13:07) [11]

а вот оно что, так попробуй:
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Show;
form2.Top:=form1.Top;
form2.Left:=form1.Left-form2.Width;
end;


 
Layner ©   (2003-11-04 13:20) [12]

Так работает!!!
Все ZEE спасибо. Сам не мог додуматься :(.
Огромное спасибо!



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
1-41624
Chlavik
2003-10-25 13:58
2003.11.13
SysImageList... (Иконки)


1-41366
alex_***
2003-10-30 12:12
2003.11.13
экспорт объектов из DLL


8-41739
LIA
2003-07-09 10:14
2003.11.13
Запись звука с микрофона сразу в MP3


11-41118
gori
2003-02-20 03:28
2003.11.13
Убрать автосоздание второго окна


4-42293
frost
2003-08-22 08:58
2003.11.13
Добавление пункта в контекстное меню Windows