Вверх ↑
Этот топик читают: Гость
Ответов: 537
Рейтинг: 14
#1: 2019-06-28 17:34:11 ЛС | профиль | цитата
Нужно сделать, чтобы когда тащишь мыхой основное окно за ним следовало и дочернее. Есть в форма для привязки позиции, а как сделать так, пользователь соединил две формы по горизонтале и когда тащить мышкой за заголовок главного окна, за ним следовало и дочернее. Без излишеств, нужно просто две формы рядом всегда держать
Add(MainForm,2953706,84,308)
{
Point(PHandle)
}
Add(ChildFormEx,13250501,175,301)
{
}
BEGIN_SDK
Add(EditMultiEx,2415256,21,21)
{
VarCount=#7:PHandle|
link(PHandle,2650935:PHandle,[(27,179)(41,179)])
}
Add(MainForm,2650935,35,105)
{
Left=35
Top=105
Point(PHandle)
}
END_SDK
Add(InlineCode,2897066,175,392)
{
@Hint=#15:Прилипание окна|
WorkPoints=#6:doInit|
DataPoints=#7:PHandle|7:Seizure|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|42:uses Windows, Kol, Share, Messages, Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|23: sSeizure: integer;|9: public|24: PHandle: THI_Event;|24: Seizure: THI_Event;|53: procedure doInit(var _Data: TData; Index: word);|5: end;|0:|14:implementation|0:|82:function WndProcMove(Sender: PControl; var Msg: TMsg; var Rslt: Integer): Boolean;|3:var|22: fClass: THiAsmClass;|11: n: TRect;|5:begin|18: Result := FALSE;|36: fClass := THiAsmClass(Sender.Tag);|16: with fClass do|7: begin|23: case Msg.message of|14: WM_MOVE:|11: begin|56: SystemParametersInfo(SPI_GETWORKAREA, 0, @n, 0);|50: if (Sender.Left <= n.left + sSeizure) then|31: Sender.Left := n.left|71: else if (Sender.Left + Sender.Width >= n.right - sSeizure) then|48: Sender.Left := n.right - Sender.Width;|48: if (Sender.Top <= n.Top + sSeizure) then|29: Sender.Top := n.top|72: else if (Sender.Top + Sender.Height >= n.bottom - sSeizure) then|49: Sender.Top := n.bottom - Sender.Height;|10: end;|8: end;|6: end;|4:end;|0:|29:procedure THiAsmClass.doInit;|3:var|21: sControl: PControl;|5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|39: sSeizure := ToIntegerEvent(Seizure); |38: if not Assigned(sControl) then exit;|32: sControl.Tag := LongInt(Self);|35: sControl.AttachProc(WndProcMove);|4:end;|0:|4:end.|
link(Seizure,15097383:Text,[])
AddHint(48,10,104,13,@Hint)
}
Add(VisualStrings,15097383,182,357)
{
Lines=#1:5|
}


Редактировалось 3 раз(а), последний 2019-06-28 19:24:36
карма: 4

0
vip
#1.1контекстная реклама от партнеров
Ответов: 5227
Рейтинг: 586
#2: 2019-06-28 19:47:15 ЛС | профиль | цитата
хиасмянский вариант

Add(MainForm,6920479,245,161)
{
Position=1
Point(onMove)
Point(Left)
Point(Width)
Point(Top)
link(onCreate,3095501:doWork1,[(293,181)])
link(onMove,3095501:doWork2,[])
}
Add(ChildFormEx,13250501,336,154)
{
}
BEGIN_SDK
Add(EditMultiEx,2415256,21,21)
{
VarCount=#7:PHandle|6:Handle|
link(PHandle,2650935:PHandle,[(27,179)(41,179)])
link(Handle,2650935:Handle,[(34,179)(48,179)])
}
Add(MainForm,2650935,35,105)
{
Left=35
Top=105
Point(PHandle)
Point(Handle)
}
END_SDK
Add(PosWindow,8409252,343,224)
{
link(Handle,13250501:Handle,[])
}
Add(Math,15498193,245,224)
{
link(onResult,8409252:doLeft,[])
link(Op1,6920479:Left,[])
link(Op2,6920479:Width,[])
}
Add(Hub,13504025,175,224)
{
link(onEvent1,15498193:doOperation,[])
link(onEvent2,11288068:doData,[(224,237)(224,272)])
}
Add(HubEx,3095501,289,182)
{
Angle=1
link(onEvent,13504025:doEvent1,[(293,205)(163,205)(163,230)])
}
Add(DoData,11288068,259,266)
{
link(onEventData,8409252:doTop,[(298,272)(298,237)])
link(Data,6920479:Top,[])
}

карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
1
Голосовали:Sersey
Ответов: 263
Рейтинг: 18
#3: 2019-06-29 06:50:51 ЛС | профиль | цитата
А вот так еще проще

Add(MainForm,6920479,133,84)
{
Name="1"
Caption="Родитель"
Position=1
}
Add(ChildFormEx,13250501,203,84)
{
}
BEGIN_SDK
Add(EditMultiEx,2415256,21,21)
{
}
Add(MainForm,2650935,154,77)
{
Left=35
Top=105
Caption="Дочка"
ShiftLeft=400
FormFastening="parent.1"
}
END_SDK

карма: 3

1
Голосовали:andrestudio
Ответов: 8886
Рейтинг: 823
#4: 2019-06-29 09:23:07 ЛС | профиль | цитата
Ну тогда надо по полной использовать


Add(MainForm,6920479,420,56)
{
Name="MyForm"
Caption="Родитель"
Position=1
Point(Width)
Point(onResize)
Point(Height)
link(onResize,3201467:doString,[(459,83)(459,97)(410,97)(410,111)])
}
Add(ChildFormEx,13250501,469,105)
{
}
BEGIN_SDK
Add(EditMultiEx,2415256,21,21)
{
WorkCount=#8:doResize|
link(doResize,6408210:doSplit,[(83,27)(83,111)])
}
Add(MainForm,2650935,154,77)
{
Left=35
Top=105
Caption="Дочка"
ShiftLeft=400
FormFastening="parent.MyForm"
Point(doShiftLeft)
Point(doHeight)
}
Add(MultiStrData,6408210,98,105)
{
link(onPart1,2650935:doShiftLeft,[])
link(onPart2,2650935:doHeight,[])
}
END_SDK
Add(FormatStr,3201467,420,105)
{
Mask="%1;%2"
link(onFString,13250501:doResize,[])
link(Str1,6920479:Width,[])
link(Str2,6920479:Height,[])
}

карма: 19

1
Голосовали:Sersey
Ответов: 537
Рейтинг: 14
#5: 2019-06-29 09:59:22 ЛС | профиль | цитата
Сделал по схеме fox-video. Млин, я бы не догадался

Редактировалось 1 раз(а), последний 2019-06-29 11:11:50
карма: 4

0
Ответов: 537
Рейтинг: 14
#6: 2019-06-29 11:08:51 ЛС | профиль | цитата
Леонид писал(а):
Леонид

Не подошел, выше подошел
карма: 4

0
Ответов: 537
Рейтинг: 14
#7: 2019-06-29 18:55:13 ЛС | профиль | цитата
Хорошо, привязал, если нужно чтобы два окна при загрузке ставали на место, свойство SavePosName, я сделал только для дочернего окна, если сделать и основного и дочернего, то схема от andrestudio такое творит, если первый раз запустить, то нормаль, а второй и т.д. капец. Всему виной свойство SavePosName основной формы
карма: 4

0
7
Сообщение
...
Прикрепленные файлы
(файлы не залиты)