Вверх ↑
Этот топик читают: Гость
Ответов: 1924
Рейтинг: 172
#1: 2017-03-11 19:14:52 ЛС | профиль | цитата

Add(ButtonRush,7666892,133,245)
{
Left=110
Top=175
Glyphs=[]
link(onClick,8066172:doMessage,[])
}
Add(Message,8066172,182,245)
{
Message="0"
Caption="0"
}
Вот такой элементарный код - и при нажатии кнопки пробелом прога просто вылетает. У кого-то проблема повторяется?

--- Добавлено в 2017-03-11 19:33:14

С формой такая же фигня:

Add(ButtonRush,7666892,175,203)
{
Left=110
Top=175
Glyphs=[]
link(onClick,8650915:doWork1,[])
}
Add(ChildForm,8650915,245,203)
{
}
BEGIN_SDK
Add(EditMulti,6885360,21,21)
{
WorkCount=1
link(doWork1,13352309:doVisible,[(42,27)(42,118)])
}
Add(MainForm,13352309,63,77)
{
Left=35
Top=105
Width=273
Height=162
Visible=1
Point(doShowModal)
Point(doVisible)
}
END_SDK

Редактировалось 1 раз(а), последний 2017-03-11 19:33:14
карма: 9
0
vip
#1.1контекстная реклама от партнеров
Ответов: 1376
Рейтинг: 197
#2: 2017-03-11 19:33:54 ЛС | профиль | цитата
3042 писал(а):
и при нажатии кнопки пробелом прога просто вылетает

тоже есть такое, добавил "развязку" (DeferredEvent)

Add(MainForm,2953706,553,49)
{
}
Add(ButtonRush,7666892,637,42)
{
Left=110
Top=175
Ctl3D=0
Glyphs=[]
Point(doSetFocus)
link(onClick,58158:doDeferredEvent,[])
}
Add(Message,8066172,721,42)
{
Message="0"
Caption="0"
}
Add(DeferredEvent,58158,679,42)
{
link(onDeferredEvent,8066172:doMessage,[])
}

карма: 1

1
Голосовали:3042
Ответов: 8885
Рейтинг: 823
#3: 2017-03-11 19:58:18 ЛС | профиль | цитата
3042, и без развязки, и с развязкой, и на Delphi, и на FPC не вылетает, а работает

Редактировалось 1 раз(а), последний 2017-03-11 19:58:38
карма: 19

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#4: 2017-03-11 23:54:07 ЛС | профиль | цитата
Леонид писал(а):
и без развязки, и с развязкой, и на Delphi, и на FPC не вылетает, а работает

Поди KOLGRushControls.pas самых первых версий. Я нашел, что вызывает этот крэш, и вспомнил, кто и для чего добавил эту заплатку. Как избавиться от этого крэша программно -- а ХЗ, я пока не знаю. Боюсь, что это потянет за собой еще худший вариант где-нибудь еще, тч -- ну его нафиг.
карма: 22

0
Ответов: 1924
Рейтинг: 172
#5: 2017-03-12 06:04:39 ЛС | профиль | цитата
nesco писал(а):
Я нашел, что вызывает этот крэш, и вспомнил, кто и для чего добавил эту заплатку.


Ну?! nesco, интересно же! Я поискал, потыкал - так и не смог понять, что же там не так? Расскажи, пжлст
карма: 9
0
Ответов: 9906
Рейтинг: 351
#6: 2017-03-12 11:04:13 ЛС | профиль | цитата
Серьезно разобраться у меня пока здоровья не хватает...
Но, если поменять две строки местами, то - вроде работает
function WndProcGRush(Ctl_: PGRushControl; var Msg: TMsg; var Rslt: Integer): Boolean;
.....
WM_LBUTTONDOWN:
if ((Data.fStateInit = siNone) or (Ctl_.Focused = false)) then begin
Ctl_.Focused:=true;
Data.fStateInit := siButton;
PGRushControl(Ctl_).DoPush;
end;
WM_LBUTTONUP:
if (Data.fStateInit = siButton) then begin
PGRushControl(Ctl_).DoPop;
Data.fStateInit := siNone; // и теперь даже не знаю: надо ли поднимать эту (хотя бы для симметрии) ???
end;
WM_KEYDOWN:
if (Msg.wParam = 32) and (Data.fStateInit = siNone) then begin
Data.fStateInit := siKey;
PGRushControl(Ctl_).DoPush;
end;
WM_KEYUP:
if (Msg.wParam = 32) and (Data.fStateInit = siKey) then begin
Data.fStateInit := siNone; // эту поднял вверх на одну строку...
PGRushControl(Ctl_).DoPop;
end;

Редактировалось 1 раз(а), последний 2017-03-12 11:28:40
карма: 9

1
Голосовали:3042
Разработчик
Ответов: 26061
Рейтинг: 2120
#7: 2017-03-12 11:53:23 ЛС | профиль | цитата
Воообще-то ошибка обнаружилась вот здесь, при вызове fOnMouseLeave, изначально этого вызова не было, но и убирать его нельзя, появляется крэш в другом месте

        WM_KILLFOCUS:
begin
if (Data.fStateInit = siKey) then begin
Data.fStateInit := siButton;
PGRushControl(Ctl_).fOnMouseLeave(Ctl_);
Data.fStateInit := siNone;
end;
Data.fActive := false;
Ctl_.Invalidate;
end;

Редактировалось 4 раз(а), последний 2017-03-12 12:19:51
карма: 22

0
Ответов: 9906
Рейтинг: 351
#8: 2017-03-12 12:14:09 ЛС | профиль | цитата
nesco, давай более аккуратно подбирать глаголы

Если ошибка в этом самом месте "обнаружилась", это не значит, что она здесь и "кроется"...
Она кроется в "незаконченности" обработке WM_KEYUP, потому-что doPop вызывает новый обработчик событий (в Message).
В общем, все сходится: WM_KILLFOCUS, как бы, неправильно начинался - ДО сброса fStateInit в состояние siNone, в схеме ТС.
Вроде как, именно это и устранено...

Более философски: это есть применение рекурсий структурного программирования -- в объектно-ориентированном.
У нас это называется "кольцеванием".
А скрипто-программисты еще пол-века будут тупить... Наверное

Редактировалось 7 раз(а), последний 2017-03-12 12:21:20
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#9: 2017-03-12 12:21:29 ЛС | профиль | цитата
Galkov писал(а):
Если ошибка в этом самом месте "обнаружилась", это не значит, что она здесь и "кроется"...

Да, вообще-то правильно. Не факт, что именно там она кроется. Исправил.
Попробовал для симметрии применить твое решение к мышу, ничего подозрительного не увидел. Видимо, стоит остановиться на твоем решении.
карма: 22

1
Голосовали:3042
Ответов: 1924
Рейтинг: 172
#10: 2017-03-12 20:28:33 ЛС | профиль | цитата
Ну вот, ещё один компонент исправлен!
Итак, остаётся обновиться с SVN...
Кстати, ссылки на svn на сайте больше нет? Я её только поиском в Яндексе нашёл, а через HiUpdate.exe не обновляю, т.к. установлены сторонние компоненты - они при обновлении пакета удалятся.

Вот ссылка на обновление, если что: http://svn.hiasm.com/packs/delphi/code/KOLGRushControls.pas
карма: 9
0
Ответов: 2059
Рейтинг: 131
#11: 2017-03-14 14:54:25 ЛС | профиль | цитата
Galkov, Чем старее, тем злобнЕе!

Galkov писал(а):
А скрипто-программисты еще пол-века будут тупить... Наверное

Грош цена твоим телодвижениям с такими комментариями.
Баранкин, БУДЬ ЧЕЛОВЕКОМ!
Сейчас с людьми надо помягше, а на вопросы смотреть ширше.

Редактировалось 6 раз(а), последний 2017-03-14 15:46:40
карма: 6

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