htuos
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору тут вот случайно откопал скрипт, в котором пытался рисовать чекбоксы руками. когда-то бросил эту затею т.к. не получалось полноценно перехватить оконную процедуру, т.е. Код: procedure CheckBox1Click(Sender: TObject); begin MsgBox('Hello.', mbInformation, MB_OK); end; . . . SetWindowLong(CheckBox1.Handle,GWL_WNDPROC,CallBackProc(@CheckBoxProc,4)); CheckBox1.OnClick:=@CheckBox1Click; | тупо не работало (клик по CheckBox1 не выводил сообщение "Hello"), проблема была в невозможности вызвать CallWindowProc. Конкретнее, все сводится к тому, что инно не понимает тип Pointer я тут нарисовал длл (собственно вся длл 15 строк) с одной функцией, которая позволяет нормально вызвать CallWindowProc. т.е. теперь можно нормально перехватывать события (правильнее сказать "сообщения") у любого окна (кто не в курсе, к окнам кроме форм относя кнопки, чекбоксы, радиобатоны, листбоксы и т.д.), тот же OnMouseMove, который в инно не описан для многих компонентов несколько сумбурно конечно, но думаю кто понимает о чем речь разберутся для примера выложу свой скрипт с ручной отрисовкой чекбоксов ну и архив со скриптом, картинками и библиотекой http://ifolder.ru/9036233 (917 КБ). если это интересно кому конечно ЗЫ правде здесь еще требуется библиотека InnoCallback.dll, но для меня, например, в данном случае - главное результат Добавлено: Artem_Butenko Цитата: небольшая проблема, как заблокировать в этом случае комбинацию Alt+F4? | ну вообще-то, по правильному, надо перехватить сообщение WM_SYSCOMMAND. но в данном случае, наверное, будет достаточно добавить окну стиль WS_EX_NOACTIVATE в InitializeWizard Код: SetWindowLong(WizardForm.Handle,GWL_EXSTYLE,GetWindowLong(WizardForm.Handle,GWL_EXSTYLE) or WS_EX_NOACTIVATE); | , но это надо пробовать Цитата: Еще небольшой вопрос: можно ли переместить (на время установки) окно лоадера (в виде значка в системный трей) | иконку в трее создать не получится, там работа с указателями идет, если только библиотеку писать Цитата: заблокировать все действия над ним (развернуть, закрыть) и комбинации кнопок? | меню к иконке, и действия к пунктам меню надо руками писать, так что, если будет просто иконка, то никаких действий по кликам на ней не произойдет Добавлено: Diawer Цитата: Еще такой вопросик, пока вас не было я спрашивал, что может можно сделать горизонтальную прокрутку и htuos написал такую вещь как основу Цитата: SendMessage(CheckListBox.Handle,$0194,CheckListBox.Width*2,0); добавив, что очень много заморочек с этим. Это действительно трудно сделать горизонтальную прокрутку, я спрашиваю не для конкретно вашего кода, а вообще у меня есть идеи, где это использовать. | это не основа, а код, который ты просил . посылается сообщение, которое заставляет показывать горизонтальную полосу прокрутки у CheckListBox, если его ширина меньше чем CheckListBox.Width*2 а проблемно рисовать стандартные ListView (или TreeView, наверное лучше был бы), который я тебе предложил использовать Цитата: горизонтальную прокрутку для CheckListBox можно так сделать Код:SendMessage(CheckListBox.Handle,$0194,CheckListBox.Width*2,0); только 1. тебе это не поможет в данном случае, ибо с отрисовкой у CheckListBox проблемы (по крайней мере у меня так). т.е. тупо не красиво 2. в данном случае вместо CheckListBox лучше использовать ListView. хотя не знаю, нарисовать ListView на winapi и привести его в божеский вид для данной задачи, достаточно утомительное занятие. лучше наверное подсказки. тут вроде где-то были примеры как их делать |
| Всего записей: 335 | Зарегистр. 06-03-2008 | Отправлено: 13:12 12-11-2008 | Исправлено: htuos, 14:01 12-11-2008 |
|