Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-42297
Sirakuz
2003-09-09 17:27
2003.11.13
Перевести SYSTEMTIME в FILETIME


8-41774
BeaviS
2003-07-13 17:31
2003.11.13
красивые формы


7-42144
INTAARI
2003-09-03 13:19
2003.11.13
Помогите разобраться с модемом


9-40758
Кен
2003-05-04 04:40
2003.11.13
GLScene Проверка коллизий между пулями и монстрами. Как сделать ?


1-41149
Денисыч
2003-11-03 13:44
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский