Главная страница
    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.47 MB
Время: 0.036 c
4-42329
waw
2003-09-03 19:11
2003.11.13
Как использовать функции NetFileGetInfo и netFileEnum


1-41526
grusty
2003-10-28 11:58
2003.11.13
Как сделать паузу во время выполнения операции...


7-42196
AnthreX
2003-08-25 02:48
2003.11.13
Hook на клавиатуру.


14-41983
Nick Denry
2003-10-19 15:18
2003.11.13
Любознательность №2.Обясните что такое nuke и принцип его работы.


3-40820
csr
2003-10-16 17:41
2003.11.13
Не удаляется файл БД!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский