|
Адрес функии
|
|||
---|---|---|---|
#18+
Привет. Мне неоходимо передать указатель на фукцию в качестве параметра фунции SetWindowLongA(Handle(this),-4,/*указатель на функцию*/ MyFunctionProc); Я объявил функцию MyFunctionProc Но не знаю как получить ее адрес или указатель на нее. Речь идет о Subclassing a Window и мне нужно перехватить некоторое сообщение родителя для этого надо получить адрес функции DefProc заменить ее на свою а затем вызвать снова родную. Может кто-нибудь знает как получить указатель на функцию или event ? Спасибо ! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2004, 13:08 |
|
Адрес функии
|
|||
---|---|---|---|
#18+
В PowerBuilder в принципе нет указателей. То, что ты хочешь, сделать невозможно. Именно поэтому мне приходилось писать dll с помощью других средств (Delphi) - для реализации функций, требующих работы с указателями. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2004, 13:47 |
|
Адрес функии
|
|||
---|---|---|---|
#18+
Если у тебя PB9, то напиши wrapper на С++ и через PBNI вызывай твою ф-ю на PbScript. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2004, 14:41 |
|
Адрес функии
|
|||
---|---|---|---|
#18+
Pacman, может поточнее напишешь, что именно ты хочешь сделать. Как тут правильно заметили, адресов функций и callbackов в РВ нет. Теоретически можно сделать Subclassing имея экспортированную функцию в DLLе, которая зовётся в Open eventе окна и ей передается handle окна. Она в свою очередь зовёт Код: plaintext
Судя по автормне нужно перехватить некоторое сообщение родителя, может быть можно сделать проще - через other event, messaging API и т.д. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2004, 20:21 |
|
Адрес функии
|
|||
---|---|---|---|
#18+
Вариант с отдельной dll( на другом языке) которая поможет сделать то что надо мне нравится. Раз уж мир не не без добрых людей на этом форуме, то разрешите немного подробнее описать проблему. Пишу на BP7. Все началось с того что я захотел просто немного видоизменить стандартный button. Сделать что то типа Flat. Создал новый объект наследуемый от commandbutton.Затем согласно тому что я понял из MSDN , для того что бы рисовать его самому, изменил style в консрукторе Код: plaintext
И здесь я задумался, а как же я поймаю сообщение WM_DRAWITEM This message is sent to the owner window of an owner-drawn button or menu when a visual aspect of the button or menu has changed. ( но и это еще не все) Мой класс этого сообщения не получает , его получает владелец. Согласно логике надо что бы вся реализация находилась в одном классе.( Кнопка должна быт универсальной , кинул на форму и все). С этой проблемой я справился просто, написал всю прорисовку кнопки в событии pbm_paint(все отлично рисуется , кнопка получилась просто прелесть) А затем я подумал а что если кнопка должна быть Default or Cancel( т.е. в случае если она лежит на форме с неким sle (editbox) то при нажатии Enter должен сработать click event. И тут я столкнулся вот с чем если Установить свойство Default =true то кнопка получит стиль BS_DEFPUSHBUTTON соответственно , а MSDN пишет Do not combine the BS_OWNERDRAW style with any other button styles. А как же реализовать свою прорисовку и что бы механизм обработки кнопки по умолчанию не менять? Может кто-нибудь знает подскажите. Хотя на этот вопрос я кажется нашел ответ. Извините что так много пишу. В момент когда в sle жмем Enter ... An application sends a DM_GETDEFID message to retrieve the identifier of the default push button control for a dialog box. и происходит вот что... If a default push button exists, the high-order word of the return value contains the value DC_HASDEFID and the low-order word contains the control identifier. Otherwise, the return value is zero. Если поймать это сообщение то тогда я могу обмануть и вернуть идентификатор той кнопки которой я пожелаю.Поверив если моя переменная MyDefault =true А для того что бы поймать это и другие сообщения владельца я должен получить указатель на функцию WindowDefaultProc( функция обработки сообщений) Затем присвоить этому указателю адрес своей функции обработать что что мне надо и вызвать родную его, предварительно запомнив ее где-то. Как быть ? Спасибо за внимание ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2004, 11:25 |
|
Адрес функии
|
|||
---|---|---|---|
#18+
авторКак быть ? Оставьте все как есть. Неужели так часто в PB вы рисуете формочки с кнопками и editbox-ами ? По любому весь основной интерфейс реализуется через DataWindow, всякие кнопки и edit-ы чисто вспомогательное средство и так мучаться по моему явно не стоит. Тем более что вместо flat-кнопкок можно спокойно организовать Toolbar. Плюс приложение PB можно переключить на XP схему, просто создав манифест или поставив соотвествующую галочку в PB9. Хотя опять же по XP-шному будут только стандартные контролсы выглядеть, DataWindow по любому будет рисоваться сам. Так что зря Вы затеялись, PB не тот язык, чтобы универсальные компоненты катать. Я не сомневаюсь, что в конце концов и на нем можно сделать что хочешь, но кроме геммора и просто огромной кучи багов ничего больше не получится. Лучше все таки использовать PB по назначению :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2004, 15:14 |
|
Адрес функии
|
|||
---|---|---|---|
#18+
Вот тебе Flat Button Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2004, 18:08 |
|
Адрес функии
|
|||
---|---|---|---|
#18+
Спасибо. Про BS_FLAT я и не подумал. А как же быть с цветом? Например если я хочу надпись на кнопке вывести красным.Или Background color изменить. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2004, 10:50 |
|
Адрес функии
|
|||
---|---|---|---|
#18+
авторА как же быть с цветом? Например если я хочу надпись на кнопке вывести красным.Или Background color изменить.Ну, собственно для этого существует UserObject Panter, что значительно проще чем упражнения с ownerdrawn controls :-) . Вот пример (не очень универсальный) того как делать ownerdrawn combobox без PB9 и PBNI http://www.xs4all.nl/~onkie/pbtip020.html Вот пример того как делать Custom-drawn ListView and TreeView Controls с PB9 и PBNI http://powerbuilder.codexchange.sybase.com/files/documents/67/1127/CustomDrawDemo.zip ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2004, 18:32 |
|
|
start [/forum/topic.php?fid=15&fpage=107&tid=1339210]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 178ms |
0 / 0 |