Вверх ↑
Этот топик читают: Гость
Ответов: 1946
Рейтинг: 174
#1: 2025-05-12 14:22:10 ЛС | профиль | цитата
Add(LineBreak,13247232,287,483)
{
link(Out,14590082:doText2,[])
Primary=[3110373,896,217]
}
Add(LineBreak,1226700,287,490)
{
Caption="enb"
link(Out,14590082:doEnabled,[])
Primary=[15400916,623,-70]
}
Add(MainForm,10490899,112,105)
{
Width=450
Height=599
Caption="form"
BorderStyle=1
Icon=[ZIP5E07000078DAED93218CDC301045A7E80C175561EDB20B6B60A8511518181A18181852B0D0D0D0D4D0D0D0D4D0D0D03430658173E36C57DABB9C2ED5566A49276F46F6C8FEB2BF62804FF41505E40ADF9F003E03C03325B5E01B5CFB39BE3EC13F0A11C42FA292496F1899AC48EE8A9C838AEE50A71675252AAAB5E457B86A5B3DF6F632452B71CECCE95087B50C1A00AA37A8C378AEAD9D34A24294CB7C7C3112E174AC1BD5D669A0184E531097D98EB319833E94A1F56CD88E7415A9E03414A5E68D1FC63849DB58535A5D7F6C6C3E8E6E08D6B1AC436A1D54A2A4EDCAD4469DA360AB80599C3E3696A69DEB7BDFB3F1042D400FAC83A9073F40E8210D1B2384A9383096EE61EAD2566751B4AAE6AA96922751A7E9EC3BB01C5C03BE05371407C6D2355D73715CBB6E8E17021745AC614A8AFBB17463651A509C1D180B80B4374E187AF42DFA6EA3CDD35920BA35B9A04633F0778E736F2CC01A04468196A329D135E8BA3CA69AF4BA78023150DDEBBC321660097A8D7A0D9204F3209A1B6A09191ACC5EED75EE8DBDEA6CEBA96A5ABF67F1921ED93BFFCF9DB17FF2C01F36F64D3C6CEC9B78D8D8BDCE63C6FE8FBF13F8639F3FE177F3CB2E11F155BE00C079C624]
Position=1
Point(onClose)
link(onCreate,7016607:doEvent1,[])
}
Add(Button,10755425,189,378)
{
@Color=255
Left=5
Top=25
Caption="Папка:"
Point(doEnabled)
link(onClick,15281136:doBrowse,[])
AddHint(-5,38,50,13,Caption)
}
Add(Edit,3293713,371,378)
{
@Color=65365
Left=60
Top=25
Width=360
Text=""
Point(doEnabled)
}
Add(Browse,15281136,231,378)
{
Title="Выберите папку"
link(onBrowse,15084754:doWork2,[])
}
Add(Label,11523310,147,476)
{
Left=5
Top=55
Width=80
Height=17
Caption="Интервал, сек:"
}
Add(Edit,14590082,329,476)
{
@Hint=#8:Интервал|
@Color=65365
Left=95
Top=50
Text="1"
DataType=1
Point(doEnabled)
AddHint(-20,-24,64,13,@Hint)
}
Add(Button,4981340,329,938)
{
@Color=255
Left=385
Top=405
Caption="Пуск"
Point(doCaption)
link(onClick,5957564:In,[])
AddHint(1,40,40,13,Caption)
}
Add(MultiElement,4620547,1113,658)
{
@Hint=#30:Проверка, что интервал › 0 сек|
link(onEvent1,3795650:doEvent1,[])
link(Data1,9457522:Var,[])
}
BEGIN_SDK
Add(EditMulti,11804887,21,21)
{
EventCount=1
WorkCount=1
DataCount=1
link(doWork1,8068495:doCompare,[(49,27)(49,97)])
}
Add(If_else,8068495,77,91)
{
Type=1
Op2=Integer(1)
link(onTrue,10921682:doData,[])
link(onFalse,7667258:doData,[(121,104)(121,139)])
link(Op1,12319914:Var2,[])
AddHint(10,-28,21,13,Op2)
}
Add(DoData,10921682,161,91)
{
Data=Integer(1)
link(onEventData,6126865:doWork2,[])
}
Add(HubEx,6126865,210,91)
{
link(onEvent,11804887:onEvent1,[(268,97)(268,27)])
}
Add(DoData,7667258,133,133)
{
link(onEventData,6126865:doWork3,[(214,139)])
link(Data,12319914:Var3,[(139,54)])
}
Add(GetDataEx,12319914,77,49)
{
Angle=3
link(Data,11804887:Data1,[(27,54)])
}
END_SDK
Add(Switch,9965305,840,602)
{
DataOn=Integer(1)
DataOff=Integer(0)
link(onSwitch,11654124:doEvent1,[])
}
Add(IndexToChanel,14347216,924,609)
{
link(onEvent1,15641842:doEvent1,[])
link(onEvent2,10993382:doEvent1,[(978,622)(978,657)])
}
Add(Switch,4692039,924,574)
{
DataOn=String(Стоп)
DataOff=String(Пуск)
link(onSwitch,16694752:In,[])
AddHint(-48,-25,49,13,DataOn)
AddHint(15,-25,50,13,DataOff)
}
Add(Hub,11654124,889,602)
{
link(onEvent1,4692039:doSwitch,[(913,608)(913,580)])
link(onEvent2,14347216:doEvent,[])
}
Add(MultiElement,13956486,427,126)
{
@Hint=#9:антивирус|
}
BEGIN_SDK
Add(EditMulti,6738775,21,21)
{
EventCount=1
WorkCount=1
link(doWork1,10112052:doEvent1,[(35,27)(35,55)])
}
Add(Hub,10112052,49,49)
{
link(onEvent1,4155503:doData,[])
}
Add(DoData,4155503,77,49)
{
link(onEventData,2251703:doData,[(121,55)(121,62)])
}
Add(EventFromData,2251703,133,56)
{
link(onEvent,11184851:doValue,[])
}
Add(Memory,11184851,189,56)
{
link(onData,577508:doEvent,[])
}
Add(IndexToChanel,577508,238,56)
{
link(onEvent2,6738775:onEvent1,[(296,69)(296,27)])
}
END_SDK
Add(Hub,10993382,1001,651)
{
OutCount=6
link(onEvent2,4620547:doWork1,[])
link(onEvent3,13216466:In,[])
link(onEvent4,815183:In,[])
link(onEvent6,12746626:doDeferredEvent,[(1029,692)(1029,706)])
}
Add(ChanelToIndex,6138528,840,420)
{
link(onIndex,3983295:doEvent1,[])
}
Add(Hub,15641842,1001,609)
{
OutCount=3
link(onEvent1,14114077:In,[])
link(onEvent2,7983187:In,[])
}
Add(LineBreak,5675079,798,420)
{
Caption="enb"
link(Out,6138528:doWork1,[])
Primary=[815183,231,252]
}
Add(LineBreak,6109725,798,427)
{
Caption="dsb"
link(Out,6138528:doWork2,[])
Primary=[7983187,231,189]
}
Add(BitBtn,4330777,420,476)
{
@Color=255
Left=415
Top=45
Width=28
Height=28
Hint="Открыть папку"
Caption=""
Flat=1
Bitmap=[ZIP3609000078DAED94AD6FC24018C6DFC9FD07C8CD0D8921994592CC20B1C84A1469E6AA16246A69E6304B3AB104C492CE90805802A209089256204E204E4C544CDCDEA777840EB6726C9334F9A51F77EFF37EF66A37D573CAAE2A73C5940C6774A117CC7AFE524A9DB0E4FAB647E5CE57FE4B1B5A8D97989A2341E5C7982A0FE19EAFBFF8A3FB29D587317585A2F69259287222458D494A95A1C8FC953AFEAFFDEDE9271A3707BEB71629D54792CA4F73BABC0BAC7D6DF47B6BA3B7FA194F68F0EC709ECD99F657E4631B7F4ADE7AAB51C85AD3959C57A4ACF47B9C7FF79DEDA43DD8EF44A95DFC4B49BD0F6D630BF6A33736FA1EC7EF2B6D730CA8D766A60BE38F24F58FD4473CE841ED392ED46F4D64569F81D236FD23F059BFF95AACDFE63973DF04CDF97D9C2364060780BE5BD063E8633631CB3823DC99C86629E06FD354EDF9CC33450EACEF27C5FA81A9BBC733D1665D27D9FA0BF859F2BA30C43B046C138AC3FAFE0EA82DFCD5391F0FBD477F569C934C29E658A4B11FF31E91AA83FA81FA3A17B887A607A81F409DD1AB3C988B2091D9195CF40FCC8D8FBE891FBD43DE58DB8019865E86D03DAAF16C63CDE61CFD8E63F79CB0E313E3DFD1C7]
}
Add(Math,12689773,1183,658)
{
OpType=2
Op2=1000
ResultType=0
}
Add(Label,14520985,189,938)
{
Left=5
Top=405
Font=[MS Sans Serif,8,0,16711680,1]
Hint="Последний файл"
}
Add(LineBreak,6708909,147,826)
{
Caption="err"
link(Out,892831:doText,[])
Primary=[4594344,1358,385]
}
Add(Image,8945582,364,658)
{
Left=185
Top=105
Width=180
Height=180
Color=16777215
Point(ImageWidth)
Point(ImageHeight)
}
Add(ListBox,3018567,189,651)
{
@Color=65365
Left=5
Top=105
Width=170
Height=180
Point(doEnabled)
link(onClick,10350160:In,[])
}
Add(WinEnum,4438343,910,854)
{
link(onFindWindow,15506883:doEvent1,[])
}
Add(StrList,13178602,1071,861)
{
Point(doGetString)
Point(onGetString)
link(Str,16361302:Var,[])
link(onGetString,8077718:doValue,[])
}
Add(Hub,15506883,959,854)
{
link(onEvent1,1840708:In,[])
link(onEvent2,13178602:doAdd,[])
}
Add(Hub,7849285,826,833)
{
InCount=2
OutCount=4
link(onEvent1,4601123:In,[])
link(onEvent2,13297964:In,[])
link(onEvent3,4301767:In,[])
link(onEvent4,4438343:doEnum,[])
}
Add(LineBreak,14388852,147,658)
{
Caption="clr"
link(Out,3018567:doClear,[])
Primary=[4601123,707,175]
}
Add(LineBreak,8956444,1029,868)
{
Caption="clr"
link(Out,13178602:doClear,[])
Primary=[13297964,-175,-28]
}
Add(Memory,8077718,1169,868)
{
Default=Integer(0)
}
Add(LineBreak,992308,1127,875)
{
Caption="clr"
link(Out,8077718:doClear,[])
Primary=[4301767,-273,-28]
}
Add(Hub,12849438,1225,945)
{
OutCount=5
link(onEvent1,3645801:In,[])
}
Add(CounterEx,3742834,1309,1162)
{
}
Add(Hub,9390890,952,945)
{
link(onEvent1,8267535:doStopAll,[(980,951)(980,965)])
link(onEvent2,8267535:doTimer,[(980,958)(980,951)])
}
Add(ChangeMon,2591408,1309,1204)
{
Point(onNoData)
link(Data,3742834:Count,[])
link(onNoData,3394408:doNext,[])
}
Add(CounterEx,3394408,1351,1211)
{
Max=10000
Default=-1
link(onNext,3362641:doEvent1,[])
}
Add(Hub,3362641,1393,1211)
{
link(onEvent1,13769857:doStrCat,[])
}
Add(LineBreak,11634132,910,945)
{
link(Out,9390890:doEvent1,[])
Primary=[13071492,511,273]
}
Add(InfoTip,1165645,112,290)
{
Info=#9:Интерфейс|
Font=[MS Sans Serif,8,1,0,1]
Frame=2
Width=624
Height=823
Margin=3
}
Add(Hub,7016607,161,119)
{
link(onEvent2,15842707:In,[])
}
Add(LineBreak,9828772,329,392)
{
Caption="enb"
link(Out,3293713:doEnabled,[])
Primary=[5228532,581,35]
}
Add(LineBreak,5228347,329,518)
{
Caption="int"
Type=1
link(Data,14590082:Text,[])
Primary=[9457522,784,112]
}
Add(LineBreak,13537215,784,833)
{
Caption="clr"
link(Out,7849285:doEvent1,[])
Primary=[15842707,-595,-707]
}
Add(Label,9407652,147,329)
{
Left=5
Top=5
Width=293
Height=17
Font=[MS Sans Serif,8,1,16711680,1]
Caption="Выберите папку сохранения и интервал записи:"
AddHint(44,0,171,26,Caption)
}
Add(Label,14842926,147,588)
{
Left=5
Top=85
Width=157
Height=17
Font=[MS Sans Serif,8,1,16711680,1]
Caption="Выберите окно контроля:"
AddHint(44,0,145,13,Caption)
}
Add(LineBreak,10068282,147,651)
{
link(Out,3018567:doAdd,[])
Primary=[1840708,840,203]
}
Add(LineBreak,5524245,1029,903)
{
link(Out,13178602:doGetString,[])
Primary=[10350160,-798,-245]
}
Add(LineBreak,15599776,287,658)
{
Caption="img"
link(Out,16776014:doEvent1,[])
Primary=[3645801,966,287]
}
Add(LineBreak,11004329,910,896)
{
Type=1
link(Data,4438343:Handle,[])
Primary=[16361302,161,-63]
}
Add(PointHint,2231903,1939,875)
{
Width=232
Height=74
}
Add(InfoTip,10986792,749,290)
{
Info=#13:Запись в файл|
Font=[MS Sans Serif,8,1,0,1]
Frame=2
HAlign=0
Width=960
Height=466
Margin=3
}
Add(InfoTip,14002589,749,766)
{
Info=#33:Окно контроля, сравнение картинок|
Font=[MS Sans Serif,8,1,0,1]
Frame=2
HAlign=0
Width=960
Height=550
Margin=3
}
Add(LineBreak,15106429,798,602)
{
link(Out,9965305:doSwitch,[])
Primary=[5957564,-427,336]
}
Add(LineBreak,7210451,287,938)
{
link(Out,4981340:doCaption,[])
Primary=[16694752,679,-364]
}
Add(Label,892831,189,826)
{
Left=5
Top=310
Width=56
Height=17
Font=[MS Sans Serif,8,0,12632256,1]
Hint="Последний файл"
Caption="Ошибок: 0"
}
Add(StrCat,13769857,1463,1211)
{
Str1="Ошибок: "
link(onStrCat,4594344:In,[])
}
Add(Bitmap,4468478,1337,903)
{
}
Add(LineBreak,732551,364,700)
{
Caption="img1"
Type=1
link(Data,8945582:ImageBitmap,[])
Primary=[11597035,966,168]
}
Add(LineBreak,6086175,1295,903)
{
link(Out,4468478:doLoad,[])
Primary=[12368833,70,203]
}
Add(DoData,9418271,1323,1106)
{
link(onEventData,12368833:In,[])
link(Data,16157953:Var1,[(1329,894)])
}
Add(GetDataEx,16157953,1330,889)
{
link(Data,11597035:Var,[])
}
Add(Label,14162559,189,770)
{
Left=5
Top=290
Width=120
Font=[MS Sans Serif,8,1,0,1]
Caption="Items: 0"
AutoSize=1
}
Add(Timer,8267535,994,945)
{
Point(doStopAll)
Point(doInterval)
link(onTimer,8643001:doEvent1,[])
}
Add(ScreenShort,6248627,1169,945)
{
link(onCapture,12849438:doEvent1,[])
link(Handle,8077718:Value,[])
}
Add(Button,15904524,1204,1106)
{
Left=330
Top=405
link(onClick,13071492:In,[(1328,1112)(1328,1224)])
}
Add(Hub,16776014,329,658)
{
link(onEvent1,8945582:doClear,[])
link(onEvent2,8945582:doLoad,[(353,671)(353,664)])
}
Add(LineBreak,8860536,1295,910)
{
Caption="clr"
link(Out,4468478:doClear,[])
Primary=[2953564,-42,49]
}
Add(Button,14737421,490,378)
{
@Color=255
Left=420
Top=25
Width=20
Hint="Очистить"
Caption="Х"
Point(doEnabled)
link(onClick,10249621:In,[])
AddHint(-5,40,62,13,Hint)
}
Add(HubEx,15084754,350,378)
{
link(onEvent,3293713:doText,[])
}
Add(LineBreak,1038891,315,371)
{
link(Out,15084754:doWork1,[(354,377)])
Primary=[10249621,217,7]
}
Add(Label,14891691,301,770)
{
Left=130
Top=290
Width=165
Font=[MS Sans Serif,8,1,0,1]
Caption="Changed items: 0"
AutoSize=1
}
Add(Label,9300362,420,770)
{
Left=300
Top=290
Width=120
Font=[MS Sans Serif,8,1,0,1]
Caption="Variability: 0.00%"
AutoSize=1
}
Add(StrCat,9539324,1435,952)
{
Str1="Items: "
link(onStrCat,6799431:In,[])
}
Add(StrCat,13434844,1435,994)
{
Str1="Changed items: "
link(onStrCat,11360164:In,[])
}
Add(LineBreak,13490029,147,770)
{
link(Out,14162559:doText,[])
Primary=[6799431,1330,182]
}
Add(LineBreak,13796492,259,770)
{
link(Out,14891691:doText,[])
Primary=[11360164,1218,224]
}
Add(LineBreak,6872136,378,770)
{
link(Out,9300362:doText,[])
Primary=[2794289,1078,280]
}
Add(Convertor,7756272,1393,952)
{
Mode=15
link(onResult,9539324:doStrCat,[])
}
Add(Convertor,7870214,1393,994)
{
Mode=15
link(onResult,13434844:doStrCat,[])
}
Add(LineBreak,14545320,1232,651)
{
Caption="off"
Primary=[14114077,-168,-42]
}
Add(Hub,3795650,1155,658)
{
link(onEvent1,12689773:doOperation,[])
link(onEvent2,3110373:In,[(1176,671)(1176,706)])
}
Add(LineBreak,3606029,1232,644)
{
Caption="on"
Primary=[13216466,-168,21]
}
Add(Hub,3983295,882,420)
{
OutCount=5
link(onEvent1,15400916:In,[])
link(onEvent2,5228532:In,[])
link(onEvent3,7025567:In,[])
link(onEvent4,11377863:In,[])
link(onEvent5,8882459:In,[])
}
Add(LineBreak,13290395,147,693)
{
Caption="enb"
link(Out,3018567:doEnabled,[])
Primary=[7025567,763,-259]
}
Add(LineBreak,12965191,147,378)
{
Caption="enb"
link(Out,10755425:doEnabled,[])
Primary=[11377863,763,63]
}
Add(LineBreak,15694614,448,378)
{
Caption="enb"
link(Out,14737421:doEnabled,[])
Primary=[8882459,462,70]
}
Add(StrCatDelim,5142332,1414,1050)
{
Str1="Variability: "
Str2="%"
Point(Delimiter)
link(onStrCatDlm,2794289:In,[])
}
Add(Hub,7374466,1386,1043)
{
link(onEvent2,5142332:doStrCatDlm,[])
}
Add(Label,9362543,1183,1008)
{
Left=285
Top=330
Width=120
Font=[MS Sans Serif,8,1,0,1]
Caption="949749"
AutoSize=1
}
Add(Hub,8643001,1106,945)
{
link(onEvent1,12554975:doNext,[(1130,951)(1130,1014)])
link(onEvent2,6248627:doCapture,[(1144,958)(1144,951)])
}
Add(CounterEx,12554975,1141,1008)
{
link(onNext,9362543:doText,[])
}
Add(Hub,13531671,1106,707)
{
}
Add(DeferredEvent,12746626,1043,700)
{
link(onDeferredEvent,13531671:doEvent1,[(1091,706)(1091,713)])
}
Add(Hub,11989995,1113,413)
{
OutCount=3
link(onEvent1,12424543:doDeferredEvent,[])
link(onEvent2,867403:doDeferredEvent,[(1151,426)(1151,458)])
link(onEvent3,7638299:doDeferredEvent,[(1151,433)(1151,496)])
}
Add(DeferredEvent,12424543,1176,413)
{
}
Add(DeferredEvent,867403,1176,452)
{
}
Add(DeferredEvent,7638299,1176,490)
{
}
Add(Timer,10424988,266,112)
{
}
Add(Timer,14220980,273,161)
{
}
Add(Hub,4049356,1239,406)
{
OutCount=3
link(onEvent1,13904599:doDeferredEvent,[])
link(onEvent2,15495153:doDeferredEvent,[(1277,419)(1277,451)])
link(onEvent3,12663016:doDeferredEvent,[(1277,426)(1277,489)])
}
Add(DeferredEvent,13904599,1302,406)
{
}
Add(DeferredEvent,15495153,1302,445)
{
}
Add(DeferredEvent,12663016,1302,483)
{
}
Если запустить программу и до первого срабатывания таймера (в секции "Окно контроля, сравнение картинок") нажать в списке на заголовок этой программы (form), таймер тупо останавливается. Если после первого срабатывания - тоже часто останавливается. Даже если потыкать по другим заголовкам в списке.

Я никак не могу отловить ошибку: иногда такой проблемы нет, при другом запуске программы - появляется эта проблема. Иногда достаточно немного изменить схему, даже поменять передний/задний план компонентов - проблема пропадает; ставишь новые компоненты - проблема опять появляется.

Если в hiTimer.pas обработчик OnTimer изменить так:
_hi_OnEvent(_event_onTimer);
{ inc(flag);
if flag › 1 then begin
if _prop_OverCall=0 then dec(flag);
exit;
end;
repeat
if AutoStop ›= 0 then dec(AutoStop);
f := AutoStop = 0;
_hi_OnEvent(_event_onTimer);
if f then begin
flag := 0;
OnStop;
end;
if flag › 0 then dec(flag);
until flag = 0;}
, т.е. убрать все проверки flag, AutoStop и просто выдавать событие _event_onTimer, то всегда всё работает.

Обратите внимание, что к этому таймеру подключено doStopAll/doTimer. Если при такой самопроизвольной остановке вызвать эти методы, таймер снова включается. Но потом, потыкая на заголовки окон в списке, опять периодически отмечаю самопроизвольную остановку таймера.

Что вообще с ним происходит?!

Редактировалось 3 раз(а), последний 2025-05-12 14:24:30
карма: 9
0
Ответов: 4660
Рейтинг: 765
#2: 2025-05-12 19:38:48 ЛС | профиль | цитата
Попробуй поубирай Hint у всех визуальных компонентов, посмотри будет ли глюк проявляться.
карма: 26

0
Ответов: 1946
Рейтинг: 174
#3: 2025-05-12 19:46:08 ЛС | профиль | цитата
Да, то же самое.
карма: 9
0
Ответов: 2415
Рейтинг: 691
#4: 2025-05-12 19:54:23 ЛС | профиль | цитата
Да есть глюк и связан он скорее всего не с таймером, а с "скриншотером". 3042, просто смеху для тестирования предоставил ужасную. Вот схема для отлавливания ошибки:
Add(MainForm,14047676,364,189)
{
Width=576
Height=475
link(onCreate,4438343:doEnum,[])
}
Add(Timer,14741394,392,385)
{
Interval=500
OverCall=1
link(onTimer,3842519:doEvent1,[])
}
Add(WinEnum,4438343,413,203)
{
link(onFindWindow,16417546:doStrCatDlm,[])
}
Add(Image,12279222,609,322)
{
Top=125
Width=560
Height=286
Align=5
}
Add(Hub,3842519,462,385)
{
link(onEvent1,8026749:doEvent,[(500,391)(500,328)])
link(onEvent2,11512912:doEvent,[])
}
Add(Label,11295395,651,392)
{
Top=411
Width=560
Height=25
Align=4
Font=[MS Sans Serif,12,0,0,1]
AutoSize=1
AutosizeAtStart=1
Alignment=2
}
Add(MathParse,11071173,560,392)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,8651668:doStrCat,[])
}
Add(StrCat,8651668,602,392)
{
Str1="Timer: "
link(onStrCat,11295395:doText,[])
}
Add(ListBox,12831490,511,203)
{
Width=560
Height=125
Align=2
Font=[MS Sans Serif,12,0,0,1]
DataType=1
link(onClick,11955308:doSplit,[])
}
Add(ScreenShort,6248627,560,322)
{
link(onCapture,12279222:doLoad,[])
link(Handle,11955308:Part1,[])
}
Add(StrCatDelim,16417546,462,203)
{
Delimiter="|"
link(onStrCatDlm,12831490:doAdd,[])
link(Str2,4438343:Handle,[(475,176)(335,176)(335,247)(419,247)])
}
Add(MultiStrPart,11955308,560,210)
{
Char="|"
From=1
Count=1
}
Add(Debug,8026749,525,322)
{
WEName="1"
VDName=""
link(onEvent,6248627:doCapture,[])
}
Add(Debug,11512912,539,392)
{
WEName="2"
VDName=""
link(onEvent,11071173:doCalc,[])
}
Желательно тестировать на FPC получается быстрее отловить ошибку остановки таймера (выделите в списке Form).

Если отключить у Timer часть кода как указано в первом посте у 3042, то можно увидеть интересный баг. Timer не отключится, но debug 2 перестанет получать события.

Скорее всего весь фокус в ScreenShort из-за этого:
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,DC,0,0,SRCCOPY);

Редактировалось 2 раз(а), последний 2025-05-12 20:21:27
карма: 11

0
Ответов: 1946
Рейтинг: 174
#5: 2025-05-12 20:06:25 ЛС | профиль | цитата
sla8a писал(а):
связан он скорее всего не с таймером, а с "скриншотером"

В другой моей схеме нет скриншотера - и проблема с таймером тоже случается. Правда, гораздо реже, отловить её трудно, но зато если случается - программа просто после остановки таймера вылетает с ошибкой.
Всю схему приводить не буду, она громоздкая, но сам таймер, который останавливается, вот здесь:

Add(MainForm,2953706,84,84)
{
Position=1
}
Add(LineBreak,11950086,686,329)
{
Primary=[9335126,161,126]
}
Add(Debug,11006711,1036,469)
{
WEName=""
VDName="Hnd_Новой устройство"
link(Data,12340606:Handle,[(1042,457)(976,457)(976,548)(909,548)])
}
Add(Timer,9404548,721,455)
{
@Color=255
Interval=555
Point(doStopAll)
link(onTimer,12345997:doData,[])
}
Add(WinEnum,12340606,903,504)
{
link(onFindWindow,9898042:doCompare,[])
}
Add(StrMask,9898042,952,504)
{
Mask="*№1:*Новое устройство*"
link(onTrue,3343538:doEvent,[])
AddHint(-118,57,139,13,Mask)
}
Add(WinEnum,3139963,1029,490)
{
Point(doEnumChildWindows)
Point(onEnumChildWindows)
Point(ParentHandle)
link(onEnumChildWindows,15547222:doEvent1,[])
link(ParentHandle,11006711:Var,[])
}
Add(MT_MultiData,2410918,1113,504)
{
Count=3
link(onData1,7591861:doValue,[(1167,510)(1167,377)])
link(onData2,1195684:doValue,[(1199,517)(1199,433)])
link(onData3,12655600:doCompare,[])
}
Add(StrMask,12655600,1169,518)
{
Mask="*Цилиндр 1*"
link(onTrue,8665165:doEvent1,[])
AddHint(-43,43,76,13,Mask)
}
Add(Memory,1195684,1253,427)
{
}
Add(WinEnum,14196862,1246,504)
{
Point(doEnumChildWindows)
Point(onEnumChildWindows)
Point(ParentHandle)
link(onEnumChildWindows,12231873:doSeparateMT,[])
link(ParentHandle,1969951:Var2,[])
}
Add(MT_MultiData,12231873,1295,518)
{
Count=3
link(onData2,10139534:doValue,[(1377,531)(1377,461)])
link(onData3,9252605:doCompare,[])
}
Add(StrMask,9252605,1351,532)
{
Mask="*Давление, МПа*"
CaseSensitive=0
link(onTrue,689687:doEvent1,[])
AddHint(-70,43,103,13,Mask)
}
Add(Memory,10139534,1428,455)
{
}
Add(WinEnum,12197207,1484,518)
{
Point(doEnumChildWindows)
Point(onEnumChildWindows)
Point(ParentHandle)
link(onEnumChildWindows,9693248:doValue,[])
link(ParentHandle,10981643:ParentHandle,[(1497,506)(1473,506)(1473,583)(1448,583)])
}
Add(WinInfo,10981643,1428,539)
{
Point(ParentHandle)
link(onWinInfo,12197207:doEnumChildWindows,[])
link(Handle,3250456:Var2,[])
}
Add(StrMask,14001210,1582,532)
{
Mask="*EDIT*"
link(Str,2218951:Var,[])
AddHint(-7,48,48,13,Mask)
}
Add(MT_MultiMem,9693248,1533,532)
{
Count=3
link(onData,14001210:doCompare,[])
}
Add(LineBreak,8580112,1533,588)
{
Type=1
link(Data,9693248:Value1,[])
Primary=[2218951,49,-84]
}
Add(GetDataEx,3250456,1428,490)
{
link(Data,10139534:Value,[])
}
Add(LineBreak,11434118,1435,504)
{
Type=1
link(Data,3250456:Var3,[(1441,495)])
Primary=[4627593,35,140]
}
Add(GetDataEx,1969951,1253,462)
{
link(Data,1195684:Value,[])
}
Add(LineBreak,13767917,1540,581)
{
Type=1
link(Data,9693248:Value2,[])
Primary=[9443384,147,-70]
}
Add(Hub,3699844,819,455)
{
OutCount=12
link(onEvent1,9335126:In,[])
link(onEvent7,8838451:doData,[(889,503)(889,349)])
link(onEvent8,12340606:doEnum,[])
}
Add(DoData,12345997,770,455)
{
Data=String()
link(onEventData,3699844:doEvent1,[])
}
Add(Hub,15547222,1071,504)
{
link(onEvent1,13472677:doEvent,[])
}
Add(Memory,7591861,1190,371)
{
}
Add(LineBreak,6143039,1190,413)
{
Caption="cls"
Type=1
link(Data,7591861:Value,[])
Primary=[7229095,-371,203]
}
Add(LineBreak,14684287,1274,476)
{
Caption="hnd"
Type=1
link(Data,16612898:Var3,[(1280,467)])
Primary=[10136257,-413,147]
}
Add(GetDataEx,16612898,1260,462)
{
Angle=3
link(Data,1969951:Var3,[])
}
Add(ChildForm,7130770,1057,343)
{
}
BEGIN_SDK
Add(EditMulti,14591547,21,21)
{
WorkCount=1
DataCount=1
link(doWork1,8474755:doEvent,[(70,27)(70,111)])
}
Add(MainForm,6879658,238,42)
{
Left=35
Top=70
Height=313
Caption="отладка пресса"
MakeExt(Visible,,Visible)
}
Add(Memo,10329430,189,112)
{
Width=390
Height=250
ScrollBars=3
}
Add(Button,9825353,105,140)
{
Top=250
Caption="Clear"
link(onClick,10329430:doClear,[])
}
Add(CheckBox,8476138,105,63)
{
Left=60
Top=250
}
Add(IndexToChanel,8474755,105,105)
{
Point(Index)
link(onEvent2,10329430:doAdd,[])
link(Index,8476138:Checked,[])
}
END_SDK
Add(DoData,8838451,945,343)
{
Data=String(таймер)
link(onEventData,11328233:doWork2,[])
}
Add(DoData,12035896,945,357)
{
Data=String(№1 Новой устройство)
link(onEventData,8293071:doWork2,[])
}
Add(HubEx,11328233,987,343)
{
link(onEvent,13058571:doWork2,[])
}
Add(DoData,570125,945,378)
{
Data=String(цилиндр 1)
link(onEventData,7275431:doWork2,[])
}
Add(HubEx,8293071,987,357)
{
Angle=3
link(onEvent,11328233:doWork3,[])
}
Add(Hub,8665165,1218,581)
{
link(onEvent1,1031497:In,[])
link(onEvent2,14196862:doEnumChildWindows,[(1239,594)(1239,531)])
}
Add(LineBreak,8520033,903,378)
{
link(Out,570125:doData,[])
Primary=[1031497,350,203]
}
Add(Hub,689687,1400,574)
{
link(onEvent1,5497996:In,[(1424,580)(1424,594)])
link(onEvent2,10981643:doWinInfo,[(1421,587)(1421,545)])
}
Add(DoData,15592739,945,399)
{
Data=String(цилиндр 1 давление)
link(onEventData,13409399:doWork2,[])
}
Add(HubEx,7275431,987,378)
{
Angle=3
link(onEvent,8293071:doWork3,[])
}
Add(LineBreak,11337177,903,399)
{
link(Out,15592739:doData,[])
Primary=[5497996,532,189]
}
Add(DoData,10248567,945,420)
{
Data=String(цилиндр 1 давление EDIT)
link(onEventData,13409399:doWork3,[(991,426)])
}
Add(HubEx,13409399,987,399)
{
Angle=3
link(onEvent,7275431:doWork3,[])
}
Add(LineBreak,1945735,903,420)
{
link(Out,10248567:doData,[])
Primary=[2766439,756,105]
}
Add(LineBreak,2970515,679,469)
{
Caption="off"
link(Out,9404548:doStopAll,[])
Primary=[2431234,119,-91]
}
Add(LineBreak,5295872,679,455)
{
Caption="on"
link(Out,9404548:doTimer,[])
Primary=[15182845,119,-63]
}
Add(Debug,13472677,1092,504)
{
WEName="MBS_OnChild"
VDName=""
link(onEvent,2410918:doSeparateMT,[])
}
Add(Hub,10280714,770,378)
{
link(onEvent1,2431234:In,[])
link(onEvent2,15182845:In,[(791,391)(791,398)])
}
Add(Debug,3343538,1001,511)
{
WEName="MBS_Новой устройство"
VDName=""
link(onEvent,3139963:doEnumChildWindows,[])
}
Add(HubEx,9948682,1001,343)
{
link(onEvent,7130770:doWork1,[])
}
Add(Button,7005794,791,322)
{
Left=115
Top=120
link(onClick,10280714:doEvent1,[(835,328)(835,356)(758,356)(758,384)])
}
Add(HubEx,13058571,994,343)
{
link(onEvent,9948682:doWork2,[])
}
Т.е. есть сторонняя программа, поля которой я считываю по таймеру. И в какой-то момент таймер отключается, не помогает здесь даже doStopAll/doTimer. А потом программа просто вылетает.

Но на этом кусочке кода ошибка вряд ли проявится, тем более что возникает нечасто и не при каждом запуске программы. Не знаю, от чего это зависит. Просто сообщаю, что и без скриншота таймер, бывает, глючит.
карма: 9
0
Ответов: 2415
Рейтинг: 691
#6: 2025-05-12 20:16:23 ЛС | профиль | цитата
3042 писал(а):
В другой моей схеме нет скриншотера - и проблема с таймером тоже случается.

3042, давай тогда по пунктам:
1. В представленной моей схеме получилось отловить ошибку?
2. Если в Timer-е как написано тобой выше "отключить" часть кода, debug 2 перестает работать в тот момент когда обычно отключался таймер?
Можно получить ответы на эти вопросы.
карма: 11

0
Ответов: 1946
Рейтинг: 174
#7: 2025-05-12 20:25:31 ЛС | профиль | цитата
sla8a писал(а):
ответы на эти вопросы

1. Получилось.
2. Нет, просто debug2 реже срабатывает, т.е. debug1 count=36, а debug2 count=16 или 18 или 20... В общем, видно, что приращение идёт реже, но не останавливается совсем. То есть в какой-то момент останавливается, но почти сразу возобновляется, из-за этого рассинхронизация по ним.
карма: 9
0
Ответов: 2415
Рейтинг: 691
#8: 2025-05-12 20:28:11 ЛС | профиль | цитата
3042 писал(а):
2. Нет, просто debug2 реже срабатывает, т.е. debug1 count=36, а debug2 count=16 или 18 или 20... В общем, видно, что приращение идёт реже, но не останавливается совсем. То есть в какой-то момент останавливается, но почти сразу возобновляется, из-за этого рассинхронизация по ним.

Это точно под FPC?
карма: 11

0
Ответов: 1946
Рейтинг: 174
#9: 2025-05-12 20:32:52 ЛС | профиль | цитата
А, если под FPC, то да: при нажатии в списке на Form debug2 останавливается, при дальнейшем нажатии на другие пункты - возобновляется.
карма: 9
0
Ответов: 2415
Рейтинг: 691
#10: 2025-05-12 20:34:40 ЛС | профиль | цитата
3042 писал(а):
В другой моей схеме нет скриншотера - и проблема с таймером тоже случается

3042, а как работает эта схема без таймера если выбрать Form и покрутить колесико мыши над окном программы (любой компилятор):

Add(MainForm,14047676,315,119)
{
Width=576
Height=475
Point(onMouseWheel)
link(onCreate,4438343:doEnum,[])
link(onMouseWheel,3842519:doEvent1,[(400,146)(400,321)])
}
Add(WinEnum,4438343,490,133)
{
link(onFindWindow,16417546:doStrCatDlm,[])
}
Add(Image,12279222,686,252)
{
Top=125
Width=560
Height=286
Align=5
}
Add(Hub,3842519,539,315)
{
link(onEvent1,8026749:doEvent,[(577,321)(577,258)])
link(onEvent2,11512912:doEvent,[])
}
Add(Label,11295395,728,322)
{
Top=411
Width=560
Height=25
Align=4
Font=[MS Sans Serif,12,0,0,1]
AutoSize=1
AutosizeAtStart=1
Alignment=2
}
Add(MathParse,11071173,637,322)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,8651668:doStrCat,[])
}
Add(StrCat,8651668,679,322)
{
Str1="Timer: "
link(onStrCat,11295395:doText,[])
}
Add(ListBox,12831490,588,133)
{
Width=560
Height=125
Align=2
Font=[MS Sans Serif,12,0,0,1]
DataType=1
link(onClick,11955308:doSplit,[])
}
Add(ScreenShort,6248627,637,252)
{
link(onCapture,12279222:doLoad,[])
link(Handle,11955308:Part1,[])
}
Add(StrCatDelim,16417546,539,133)
{
Delimiter="|"
link(onStrCatDlm,12831490:doAdd,[])
link(Str2,4438343:Handle,[(552,106)(412,106)(412,177)(496,177)])
}
Add(MultiStrPart,11955308,637,140)
{
Char="|"
From=1
Count=1
}
Add(Debug,8026749,602,252)
{
WEName="1"
VDName=""
link(onEvent,6248627:doCapture,[])
}
Add(Debug,11512912,616,322)
{
WEName="2"
VDName=""
link(onEvent,11071173:doCalc,[])
}
3042, обвинения с таймера сняты?
карма: 11

0
Ответов: 1946
Рейтинг: 174
#11: 2025-05-12 20:51:17 ЛС | профиль | цитата
А вот так вылетает гораздо реже:
Add(MainForm,14047676,301,252)
{
Width=576
Height=475
Point(onMouseWheel)
Point(onMouseMove)
link(onCreate,4438343:doEnum,[])
link(onMouseWheel,3842519:doEvent1,[(429,279)(429,454)])
}
Add(WinEnum,4438343,476,266)
{
link(onFindWindow,16417546:doStrCatDlm,[])
}
Add(Image,12279222,672,385)
{
Top=125
Width=560
Height=286
Align=5
}
Add(Hub,3842519,525,448)
{
link(onEvent1,8026749:doEvent,[(563,454)(563,391)])
}
Add(Label,11295395,714,455)
{
Top=411
Width=560
Height=25
Align=4
Font=[MS Sans Serif,12,0,0,1]
AutoSize=1
Alignment=2
}
Add(MathParse,11071173,623,455)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,8651668:doStrCat,[])
}
Add(StrCat,8651668,665,455)
{
Str1="Timer: "
link(onStrCat,11295395:doText,[])
}
Add(ListBox,12831490,574,266)
{
Width=560
Height=125
Align=2
Font=[MS Sans Serif,12,0,0,1]
DataType=1
Point(onMouseMove)
link(onClick,11955308:doSplit,[])
}
Add(ScreenShort,6248627,623,385)
{
link(onCapture,12279222:doLoad,[])
link(Handle,11955308:Part1,[])
}
Add(StrCatDelim,16417546,525,266)
{
Delimiter="|"
link(onStrCatDlm,12831490:doAdd,[])
link(Str2,4438343:Handle,[(538,239)(398,239)(398,310)(482,310)])
}
Add(MultiStrPart,11955308,623,273)
{
Char="|"
From=1
Count=1
}
Add(Debug,8026749,588,385)
{
WEName="1"
VDName=""
link(onEvent,6248627:doCapture,[])
}
Add(Debug,11512912,602,455)
{
WEName="2"
VDName=""
link(onEvent,11071173:doCalc,[])
}

Поэтому насчёт скриншотера по-прежнему не уверен...

Редактировалось 2 раз(а), последний 2025-05-12 21:02:50
карма: 9
0
Ответов: 897
Рейтинг: 190
#12: 2025-05-12 20:51:27 ЛС | профиль | цитата
Странно. А вот так таймер не останавливается.
То есть проблема появляется только при смене Handle

Add(MainForm,2953706,350,105)
{
Width=595
Point(Handle)
Point(onMouseWheel)
}
Add(Memo,10131430,406,203)
{
Width=189
Height=261
Align=5
Font=[Lucida Console,12,0,0,204]
Antialiased=1
AddType=1
ScrollBars=3
}
Add(Timer,3283221,259,161)
{
Interval=500
link(onTimer,14077878:doEvent1,[])
}
Add(ScreenShort,14978517,350,161)
{
link(onCapture,16419791:doLoad,[])
link(Handle,2953706:Handle,[])
}
Add(Hub,14077878,308,161)
{
link(onEvent1,14978517:doCapture,[])
link(onEvent2,8144337:doNext,[(340,174)(340,209)])
}
Add(Button,2933866,350,245)
{
Left=110
Top=225
Align=4
link(onClick,10131430:doClear,[(389,251)(389,216)])
}
Add(Image,16419791,406,161)
{
Left=189
Width=390
Height=261
Align=3
}
Add(CounterEx,8144337,350,203)
{
Max=1000
link(onNext,10131430:doAdd,[])
}

карма: 18

0
Ответов: 2415
Рейтинг: 691
#13: 2025-05-12 21:09:50 ЛС | профиль | цитата
3042 писал(а):
А вот так вылетает гораздо реже:

Да также вылетает. Да ни причем тут таймер. Тут что-то с Handl-ами не так.
Gunta писал(а):
Странно. А вот так таймер не останавливается.

Так и без таймера по колесику мыши такая схема не отвалится.
Add(MainForm,12031945,525,140)
{
Width=595
Point(Handle)
Point(onMouseWheel)
link(onMouseWheel,14077878:doEvent1,[(586,167)(586,124)(435,124)(435,216)])
}
Add(Memo,10131430,581,252)
{
Width=189
Height=261
Align=5
Font=[Lucida Console,12,0,0,204]
AddType=1
ScrollBars=3
}
Add(ScreenShort,14978517,525,210)
{
link(onCapture,16419791:doLoad,[])
link(Handle,12031945:Handle,[])
}
Add(Hub,14077878,483,210)
{
InCount=2
link(onEvent1,14978517:doCapture,[])
link(onEvent2,8144337:doNext,[(515,223)(515,258)])
}
Add(Button,2933866,525,294)
{
Left=110
Top=225
Align=4
link(onClick,10131430:doClear,[(564,300)(564,265)])
}
Add(Image,16419791,581,210)
{
Left=189
Width=390
Height=261
Align=3
}
Add(CounterEx,8144337,525,252)
{
Max=1000
link(onNext,10131430:doAdd,[])
}

А разве Handle не должны быть одинаковыми:
Add(MainForm,14047676,441,140)
{
Width=576
Height=475
Point(onMouseWheel)
Point(Handle)
link(onActivate,1098179:doData,[(485,146)(485,188)(429,188)(429,230)])
link(onCreate,4438343:doEnum,[])
link(onMouseWheel,3842519:doEvent1,[(523,167)(523,279)])
}
Add(WinEnum,4438343,602,154)
{
link(onFindWindow,16417546:doStrCatDlm,[])
}
Add(Image,12279222,812,273)
{
Top=125
Width=560
Height=286
Align=5
}
Add(Hub,3842519,665,273)
{
link(onEvent1,8026749:doEvent,[])
link(onEvent2,11512912:doEvent,[(711,286)(711,349)])
}
Add(Label,11295395,854,343)
{
Top=411
Width=560
Height=25
Align=4
Font=[MS Sans Serif,12,0,0,1]
AutoSize=1
Alignment=2
}
Add(MathParse,11071173,763,343)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,8651668:doStrCat,[])
}
Add(StrCat,8651668,805,343)
{
Str1="Timer: "
link(onStrCat,11295395:doText,[])
}
Add(ListBox,12831490,714,154)
{
Width=560
Height=125
Align=2
Font=[MS Sans Serif,12,0,0,1]
DataType=1
Point(onMouseMove)
link(onClick,11955308:doSplit,[])
}
Add(ScreenShort,6248627,763,273)
{
link(onCapture,12279222:doLoad,[])
link(Handle,5053317:Var,[])
}
Add(StrCatDelim,16417546,665,154)
{
Delimiter="|"
link(onStrCatDlm,12831490:doAdd,[])
link(Str2,4438343:Handle,[(678,127)(538,127)(538,198)(608,198)])
}
Add(MultiStrPart,11955308,763,161)
{
Char="|"
From=1
Count=1
}
Add(Debug,8026749,728,273)
{
WEName="1"
VDName=""
link(onEvent,6248627:doCapture,[])
}
Add(Debug,11512912,742,343)
{
WEName="2"
VDName=""
link(onEvent,11071173:doCalc,[])
}
Add(DoData,1098179,441,224)
{
link(Data,1435506:Var,[])
}
Add(Debug,1435506,441,189)
{
WEName=""
VDName="realHandle"
link(Data,14047676:Handle,[])
}
Add(Debug,5053317,763,217)
{
WEName=""
VDName="handle"
link(Data,11955308:Part1,[])
}

Редактировалось 2 раз(а), последний 2025-05-12 21:12:42
карма: 11

0
Ответов: 1946
Рейтинг: 174
#14: 2025-05-12 21:17:09 ЛС | профиль | цитата
del

Редактировалось 1 раз(а), последний 2025-05-12 21:18:03
карма: 9
0
Ответов: 897
Рейтинг: 190
#15: 2025-05-12 21:17:21 ЛС | профиль | цитата
sla8a, Handle - тип строка?

Редактировалось 1 раз(а), последний 2025-05-12 21:19:32
карма: 18

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