Вверх ↑
Этот топик читают: Гость
Ответов: 1263
Рейтинг: 47
#1: 2023-03-24 03:43:17 ЛС | профиль | цитата
При применении компонента MoveWindow нарушается работа события onMouseUp, как я понял он перехватывает оконные сообщения. Нет ли способа вернуть эти события при его применении?


Add(MainForm,2953706,21,105)
{
Point(Handle)
}
Add(PaintBox,12465343,154,105)
{
Width=735
Height=781
Align=5
Color=16777215
WinStyle=1
ColorSp=0
ClearBeforeDraw=0
Point(onMouseDown)
Point(onMouseUp)
link(onMouseDown,945688:doMove,[(233,118)(233,195)])
link(onMouseUp,16593087:doMessage,[])
}
Add(Message,16593087,273,119)
{
}
Add(MoveWindow,945688,280,189)
{
link(Handle,2953706:Handle,[(286,163)(27,163)])
}

карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
vip
#1.1контекстная реклама от партнеров
Ответов: 2193
Рейтинг: 673
#2: 2023-03-25 20:27:55 ЛС | профиль | цитата
Чем такой вариант плох:

Add(MainForm,2953706,504,189)
{
Point(Handle)
}
Add(PaintBox,12465343,434,224)
{
Width=735
Height=781
Align=5
Color=16777215
WinStyle=1
ColorSp=0
ClearBeforeDraw=0
Point(onMouseDown)
link(onMouseDown,7064651:doEvent1,[])
}
Add(Message,16593087,504,273)
{
}
Add(MoveWindow,945688,504,231)
{
link(Handle,2953706:Handle,[])
}
Add(Hub,7064651,476,231)
{
link(onEvent1,945688:doMove,[])
link(onEvent2,16593087:doMessage,[(497,244)(497,279)])
}
карма: 10

0
Ответов: 1263
Рейтинг: 47
#3: 2023-03-26 00:36:52 ЛС | профиль | цитата
sla8a, спасибо за ответ. Тем что мне нужно при нажатии и удерживании мыши отключать таймер, а при отпускании запускать его. И чтобы перетаскивание окна тоже работало.
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 5227
Рейтинг: 586
#4: 2023-03-26 00:55:16 ЛС | профиль | цитата
Aziz, добавь событие в конце процедуры procedure THIMoveWindow._work_doMove; и не парься.

--- Добавлено в 2023-03-26 00:57:18

можешь просто пока через Debug проверить_debug('stop');

Редактировалось 3 раз(а), последний 2023-03-26 00:58:10
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 1263
Рейтинг: 47
#5: 2023-03-26 01:53:41 ЛС | профиль | цитата
andrestudio, точно, так и сделаю, спасибо за костыль)

Редактировалось 1 раз(а), последний 2023-03-26 01:54:30
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 685
Рейтинг: 142
#6: 2023-03-26 06:32:40 ЛС | профиль | цитата
Aziz писал(а):
мне нужно при нажатии и удерживании мыши отключать таймер, а при отпускании запускать его. И чтобы перетаскивание окна тоже работало.


Add(MainForm,7316905,308,112)
{
Point(Handle)
}
Add(PaintBox,12465343,203,147)
{
Width=735
Height=781
Align=5
Color=16777215
WinStyle=1
ColorSp=0
ClearBeforeDraw=0
Point(onMouseDown)
link(onMouseDown,7064651:doEvent1,[])
}
Add(MoveWindow,945688,308,161)
{
link(Handle,7316905:Handle,[])
}
Add(Hub,7064651,245,154)
{
OutCount=3
link(onEvent1,13311364:doStop,[(270,160)(270,223)])
link(onEvent2,945688:doMove,[])
link(onEvent3,13311364:doTimer,[(298,174)(298,216)])
}
Add(Timer,13311364,308,210)
{
link(onTimer,14606877:doNext,[])
}
Add(CounterEx,14606877,364,210)
{
link(onNext,7316905:doCaption,[(408,216)(408,100)(298,100)(298,118)])
}

карма: 15

0
Ответов: 5227
Рейтинг: 586
#7: 2023-03-26 08:17:48 ЛС | профиль | цитата
Aziz писал(а):
спасибо за костыль)

Какой же это костыль? Это скорей всего недоработка элемента. По идее событий должно быть 2. (со скрытыми точками) onStartMove и onStopMove соответственно вызываемые в начале процедуры и в конце процедуры. И тогда всякие велосипеды не понадобились бы
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 284
Рейтинг: 23
#8: 2023-03-26 09:27:32 ЛС | профиль | цитата
andrestudio писал(а):
Какой же это костыль? Это скорей всего недоработка элемента.

Согласен с вами.
карма: 2
0
Ответов: 1263
Рейтинг: 47
#9: 2023-03-26 14:50:23 ЛС | профиль | цитата
andrestudio, ну так то да, согласен. Просто я имел в виду это если делать из стандартного компонента нестандартный. И вообще все подобные "заплатки" кода не включенные в репозиторий по каким-то, возможно весомым причинам..
А у вас не недоработка, а доработка )

--- Добавлено в 2023-03-26 14:56:58

Все заработало как надо. Вот поправленный компоент:
Ini:

[About]
Version=1.0
Author=Dilma

[Type]
Class=Element
Info=Перетаскивание окна мышкой за любое место

[Methods]
doMove=Начинает операцию перетаскивания|1|
Handle=Определяет идентификатор окна, которое нужно перетащить|4|1
*onStartMove=Событие происходит при начале перетаскивания|2|
*onStopMove=Событие происходит при окончании перетаскивания|2|

Pas:

unit hiMoveWindow;

interface

uses Kol,Share,Windows,Messages,Debug;

type
THIMoveWindow = class(TDebug)
private
public
_data_Handle:THI_Event;

_event_onStartMove:THI_Event; // @ andrestudio mod 26.3.2023
_event_onStopMove:THI_Event; // @ andrestudio mod 26.3.2023

procedure _work_doMove(var _Data:TData; Index:word);
end;

implementation

procedure THIMoveWindow._work_doMove;
var wnd:HWND;
begin
_hi_onEvent(_event_onStartMove);
wnd := ReadInteger(_Data,_data_Handle,0);
ReleaseCapture;
SendMessage(wnd,WM_SYSCOMMAND, $F012, 0);
_hi_onEvent(_event_onStopMove);
end;

end.


Редактировалось 3 раз(а), последний 2023-03-26 14:56:58
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 2193
Рейтинг: 673
#10: 2023-03-26 16:51:48 ЛС | профиль | цитата
Aziz, и чем отличается от этого:
Add(MainForm,5043770,406,56)
{
Point(Handle)
}
Add(PaintBox,12465343,336,84)
{
Width=735
Height=781
Align=5
Color=16777215
WinStyle=1
ColorSp=0
ClearBeforeDraw=0
Point(onMouseDown)
link(onMouseDown,7064651:doEvent1,[])
}
Add(MoveWindow,945688,406,98)
{
link(Handle,5043770:Handle,[])
}
Add(Hub,7064651,378,91)
{
OutCount=3
link(onEvent2,945688:doMove,[])
}
Нужно событие перед перетаскиванием? Hub его предоставляет. Нужно событие после перетаскивания? И снова Hub его предоставляет.

Редактировалось 1 раз(а), последний 2023-03-26 16:51:58
карма: 10

0
Ответов: 1263
Рейтинг: 47
#11: 2023-03-27 01:20:13 ЛС | профиль | цитата
sla8a, уже ответил же:
Aziz писал(а):
Тем что мне нужно при нажатии и удерживании мыши отключать таймер, а при отпускании запускать его. И чтобы перетаскивание окна тоже работало.

Или в твоей схеме это возможно? Покажи плиз, а то в упор не вижу или не врубаюсь..

Редактировалось 1 раз(а), последний 2023-03-27 01:21:18
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 685
Рейтинг: 142
#12: 2023-03-27 06:12:46 ЛС | профиль | цитата
Aziz писал(а):
Покажи плиз, а то в упор не вижу или не врубаюсь..

Я уже приводил схему выше. если непонятно, тогда такой вариант.
Пока перемещаешь форму счётчик остановлен.

Add(MainForm,7316905,378,196)
{
Point(Handle)
}
Add(PaintBox,12465343,259,231)
{
Width=735
Height=781
Align=5
Color=16777215
WinStyle=1
ColorSp=0
ClearBeforeDraw=0
Point(onMouseDown)
link(onBeforeDraw,7349550:doDraw,[(298,237)(298,363)])
link(onMouseDown,7064651:doEvent1,[])
}
Add(MoveWindow,945688,378,245)
{
link(Handle,7316905:Handle,[])
}
Add(Hub,7064651,315,238)
{
OutCount=3
link(onEvent1,13311364:doStop,[(340,244)(340,307)])
link(onEvent2,945688:doMove,[])
link(onEvent3,13311364:doTimer,[(368,258)(368,300)])
}
Add(Timer,13311364,378,294)
{
link(onTimer,14606877:doNext,[])
}
Add(CounterEx,14606877,434,294)
{
link(onNext,12465343:doRefresh,[(496,300)(496,428)(249,428)(249,237)])
}
Add(Img_Text,7349550,427,357)
{
X=175
Y=70
Font=[MS Sans Serif,50,0,0,1]
link(Bitmap,12465343:Bitmap,[(433,348)(265,348)])
link(Text,14606877:Count,[])
}

карма: 15

0
Ответов: 490
Рейтинг: 162
#13: 2023-03-27 09:32:46 ЛС | профиль | цитата
Gunta,
Gunta писал(а):
Пока перемещаешь форму счётчик остановлен
Возможно Aziz перемещает за шапку. у меня при перемещении за шапку счётчик не останавливается Win 11.
карма: 4

0
Ответов: 1263
Рейтинг: 47
#14: 2023-03-27 12:39:31 ЛС | профиль | цитата
Gunta, sla8a, упс) Теперь дошло) Спасибо! Туплю однако(.. Яркий пример ИНЕРЦИОННОСТИ мышления.. Это не я, это все ковид виноват)) В общем, программист из меня уже никакой.. Я все искал у вас раздельные события после отпускания мыши. А вы применили разделение по времени одного события после нажатия.
Да, так тоже наверное получится. Счас проверю... Но нет, чето в моей схеме нужно именно отдельное событие. Через просто хаб не работает. Видимо, временная задержка нужна. Там вращаю калейдоскоп мышью за круглую его форму. При начале вращения останавливается таймер, затем по дельте направления вращения определяется его направление и скорость, из этого извлекается инфа о направлении счета счетчика и его шаге. Затем после отпускания мыши, таймер вновь запускается через триггер. В итоге калейдоскоп меняет направление вращения и его скорость в зависимости от силы с которой его крутнули. В общем пока меняет направление только через модификацию компонента..

--- Добавлено в 2023-03-27 13:04:35

Еще раз проверил - через хаб работает, но не так хорошо. Просто при вращении формы мышью если таймер автовращения формы не остановить то он начинает драться с мышью. И вращается всегда в одну сторону.

Редактировалось 2 раз(а), последний 2023-03-27 13:04:35
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 685
Рейтинг: 142
#15: 2023-03-27 13:17:10 ЛС | профиль | цитата
Aziz писал(а):
Просто при вращении формы мышью если таймер автовращения формы не остановить то он начинает драться с мышью. И вращается всегда в одну сторону.

А такой вариант. Просто медленно двигать мышью вправо-лево для изменеия врашения.
https://forum.hiasm.com/getfile/39586

Так даже веселей
Add(CounterEx,9911111,224,273)
{
Max=359
Point(onThroughMax)
Point(onThroughMin)
Point(doPrev)
Point(doStep)
Point(doMax)
Point(doDirect)
link(onNext,12465343:doRefresh,[])
}
Add(MainForm,12061819,350,147)
{
@Hint=#8:3.3.2023|
Width=500
Height=499
Color=16777215
Ctl3D=0
Caption="Img"
BorderStyle=0
DragForm=0
Point(Handle)
Point(onKeyDown)
link(onCreate,11240625:doColor,[])
link(onKeyDown,3448284:doCase,[(389,174)(389,139)(298,139)(298,167)])
}
Add(Timer,4020990,154,273)
{
Interval=33
Point(doInterval)
link(onTimer,9911111:doNext,[])
}
Add(WinTools,8023775,448,133)
{
Point(doTransparentColor)
link(Handle,9629725:Var2,[])
}
Add(SelectColor,11240625,406,161)
{
Color=16777215
link(onColor,8023775:doTransparentColor,[])
}
Add(MoveWindow,945688,483,308)
{
link(Handle,9629725:Var3,[(489,124)])
}
Add(GetDataEx,9629725,448,119)
{
Angle=3
link(Data,12061819:Handle,[(399,124)(399,189)(356,189)])
}
Add(Case,3448284,308,161)
{
Value=Integer(27)
link(onTrue,12061819:doClose,[])
}
Add(PaintBox,12465343,280,273)
{
Left=615
Top=245
Align=5
Color=16777215
ClearBeforeDraw=0
Point(onMouseDown)
Point(onMouseMove)
Point(MouseX)
link(onBeforeDraw,4757424:doDraw,[])
link(onMouseDown,945688:doMove,[(393,286)(393,314)])
link(onMouseMove,15574220:doCalcDelta,[(319,293)(319,328)(277,328)(277,349)])
}
Add(Img_Bmp,4757424,399,273)
{
TransparentColor=16777215
Point(Transform)
link(Bitmap,12465343:Bitmap,[(405,262)(388,262)(388,317)(286,317)])
link(SourceBitmap,359550:Bitmap,[])
link(Transform,3452604:Transform,[(419,265)(447,265)])
}
Add(Img_UseRotate,3452604,441,217)
{
link(Angle,9911111:Count,[(454,208)(141,208)(141,326)(230,326)])
}
Add(SampleDelta,15574220,287,343)
{
link(onCalcDelta,9911111:doStep,[(326,349)(326,335)(214,335)(214,293)])
link(Data,12465343:MouseX,[])
}
Add(Bitmap,359550,406,224)
{
@Hint=#18:Вставить картинку!|
FillColor=16777215
AddHint(-141,10,114,13,@Hint)
}
Только вставь свою картинку

Редактировалось 2 раз(а), последний 2023-03-27 13:28:47
карма: 15

0
файлы: 1form_rotations 4.zip [30.9KB] [149]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)