Сейчас на форуме: UniSoft, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Мертвый PUSHBUTON?
Посл.ответ Сообщение

Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 09 января 2011 16:30 · Поправил: 0xy
· Личное сообщение · #1

Прога на СИ.
Окно диалога создается посредством DialogBoxParam из ресурса.
В этом окне, в числе прочих контролов, есть стандартный PUSHBUTTON, и он Enabled.
Прикол в том, кто клик на этой кнопке почему-то не приводит к вызову DialogFunc (по крайней мере, с его номером третим параметром).

1002 DIALOG 10, 10, 280, 260
STYLE DS_SETFONT | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
{
........
PUSHBUTTON "Ok", 5031, 120, 80, 150, 14
}

Собстенно, при клике ни чего и не происходит, но ведь процедура диалога все равно должна вызываться!?

добавлено
Если изменить индекс кнопки в ресурсах (5031)--работает правильно (DialogFunc вызывается). Так в чем же грабли??




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 09 января 2011 16:32
· Личное сообщение · #2

Должна, сорцы/ехе в студию.



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 09 января 2011 18:44 · Поправил: Модератор
· Личное сообщение · #3

EXE и все необходимое для запуска здесь (~5Mб).
По клику с форума почему-то не качается: нужно скопировать ссылку вручную.

В ресурсах диалог №1082, кнопки 5031 и 5032. Вызывается он из меню "Анализ->Прогноз события".
47ec11 -- вызов DialogBoxParam.
47e8e2 -- адрес DialogFunc

Любопытно, что достаточно изменить номер PUSHBUTTON в ресурсах (второй exe c буквой p в конце имени), и DialogFunc при клике начнет нормально вызывается!

В принципе, задача--установить факт наличия.отсутствия в файле кода, который должен вызываться этими кнопками.

PS
На всякий случай, можно пропатчить байт 45ec34 на единицу, чтоб прога чувствавала себя зарегеной, но это мало чем поможет.

PPS
Чет не пойму: это я сам запостил в Программирование, или перенесли?
От модератора: перенесли



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 10 января 2011 15:25
· Личное сообщение · #4

Archer
Ну что, не смотрел пока?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 10 января 2011 23:03
· Личное сообщение · #5

Пока не смотрел, времени особо нет. И в принципе почему я, я не обещал, что посмотрю Но, может, и гляну, если время будет.



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 11 января 2011 02:21
· Личное сообщение · #6

Лично я вижу только одно объяснение происходящему: окно диалога, при инициализации, каким-то образом меняет адрес DialogFunc для известных ему контролов (тех, которые поместил в ресурсы компилер С, а не я). Но вот как это делается...



Ранг: 18.8 (новичок), 21thx
Активность: 0.030
Статус: Участник

Создано: 11 января 2011 02:38
· Личное сообщение · #7

С делфями похожие проблемы бывают. Если не на VCL писать, то некоторые проги не работают так как нужно, то некоторые функции почемуто не выполняются, то массивы в exe не попадают. Помощи не прошу, т.к. решение проблемы - перейти с 7 на 10




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 11 января 2011 14:25
· Личное сообщение · #8

Мог бы, кстати, трассировать параллельно 2 приложения и разобраться сам, а не просить других это сделать за тебя. Судя по spy, сообщения приходят. В этом же можно убедиться, если тыкать бряки в нужные места. Другой вопрос, что они не доходят до DialogProc. Походу, это из-за того, что у диалога стоит оконный парент, который дёргает кучу своего кода и вызывает DialogProc не всегда. А именно здесь 0043C808 происходит сравнение ИД контрола и вызов соответствующей процедуры. В патченом процедуру оно находит, в исходном нет. В общем, судя по всему, виноват рантайм и парент.


 eXeL@B —› Программирование —› Мертвый PUSHBUTON?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати