Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизКак при перемещении гл формы, перемешать и ее дочерние Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.047 c