|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Компонент на основе TCustomControl
Здравствуйте!
Столкнулся с ситуацией, объяснения которой найти не могу. Суть такова: Создаю класс, на основе TCustomControl, в методе Paint прорисовываю так сказать "подложку", после чего вызываю функцию CreateWindowEx, которая создает поле ввода, с параметрами описанными в первом попавшемся примере (при компиляции примера проблем нет). После компиляции получаю следующее: Поле ввода отображается, но при открытии диспетчера задач видно, как каждую секунду количество используемой приложением памяти увеличивается. Не могу найти причину - дело в неправильном вызове CreateWindowEx или все гораздо сложнее и создавать подобные элементы необходимо не прямым вызовом функций api? на всякий случай вот код функции: Код:
hEdit := CreateWindowEx(WS_EX_CLIENTEDGE,'edit', '', WS_CHILD or WS_VISIBLE or ES_LEFT or WS_TABSTOP, 10, 10, 80, 20, Handle, 0, hInstance, nil); Подскажите, в какую сторону копать Заранее спасибо! |
#2
|
||||
|
||||
Ну ты гигант мысли. Событие OnPaint (WM_PAINT) вызывается системой при каждом случае, когда требуется перерисовать окно. Перерисовали, и что дальше? Дальше у тебя создаётся ещё одно, неизвестно кому нужное, окно. И это может происходить десятки раз в секунду. Вот и считай.
Кстати, а чем TCustomEdit не угодил? Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 26.09.2011 в 01:59. |
#3
|
|||
|
|||
angvelem, спасибо! Теперь ситуация начинает проясняться. TCustomEdit не угодил тем, что кроме поля ввода должены быть еще элементы управления. В таком случае создавать окна нужно до наступления события OnPaint, а в OnPaint уже только отображать/перерисовывать?
Не совсем понятен принцип. Когда нужно рисовать свои окна так, чтобы это было правильно? |
#4
|
||||
|
||||
создавать в constructor"е, удалять в destructor"е. не забыв переписать SetParent, Notification и SetBounds. посмотри реализацию TLabeledEdit для начала.
Пишу программы за еду. __________________ |
#5
|
|||
|
|||
NumLock, спасибо!
Боюсь это был не последний вопрос. *ушел смотреть реализацию TLabeledEdit* |
#6
|
|||
|
|||
NumLock,
в TLabeledEdit создается экземпляр класса класса TBoundLabel, могу ли я действовать по тому же принципу, если я использую не готовый класс, а рисую через api? |
#7
|
||||
|
||||
нарисуй в MS Paint как должен выглядеть твой компонент и что должен делать?
Пишу программы за еду. __________________ |