| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > TreeView |
| Автор: Гость_qwerty 1.7.2004, 08:40 |
| Есть написанный мной компонент типа treeview, но есть маленькая проблема... связи отрисовываются по таймеру и моргают иногда.... как избежать этого ??? |
| Автор: <Spawn> 1.7.2004, 11:22 |
| Зачем рисовать по таймеру? Нужно рисовать по WM_PAINT |
| Автор: Гость_qwerty 1.7.2004, 13:15 |
| мона по подробнее, плиз |
| Автор: <Spawn> 1.7.2004, 13:58 | ||
Сначала скажи как ты создал дерево? Унаследовал от TTreeView? Тогда тебе нужно искать метод класса который вызывается при перерисовке контрола и перекрывать его. Либо написать что то типа этого:
|
| Автор: Гость_qwerty 1.7.2004, 14:06 |
| дерево наследовано от scrollbox'a остальное с нуля, treeview принципиально не подходит Этот код я уже понял как писать, н овсе равно пасиб... вопрос другой..... inherited WMPaint; пишет неопределена переменная????? |
| Автор: <Spawn> 1.7.2004, 14:07 | ||||||
оЧепЯтался я
либо
Это одно и то же. Добавлено @ 14:13 Я глянул исходники - метод который вызвается при перерисовке называется PaintHandler и он помещен защищенной секции, так что тебе лучше его перекрывать.
|
| Автор: Гость_qwerty 1.7.2004, 14:29 |
| он статический, как его перекрыть? |
| Автор: <Spawn> 1.7.2004, 14:30 | ||
Так же как и виртуальный
|
| Автор: Гость_qwerty 1.7.2004, 14:36 |
| вообще не срабатывает... а по WM_Paint только в момент изменения размера компонента на форме |
| Автор: <Spawn> 1.7.2004, 14:37 | ||
| Ты для PaintHandler параметры то прописал? Добавлено @ 14:38
|
| Автор: Гость_qwerty 1.7.2004, 14:43 |
| само собой |
| Автор: <Spawn> 1.7.2004, 15:01 |
| Должно рисоваться. Покажи как рисуешь, если твой код не секретный |
| Автор: Гость_qwerty 1.7.2004, 15:09 |
| TmyTree = class(TScrollBox) procedure PaintHandler(var Message: TWMPaint); // объявление procedure TmyTree.PaintHandler(var Message: TWMPaint); begin inherited; Lines(Self); - рисую на прицепленной канве end; procedure TmyTree.Lines(Sender: TObject); begin //очищаю от старого //рисую новые связи end; в дереве помимо рисование на канве еще отображаются компоненты |
| Автор: Гость_qwerty 1.7.2004, 15:12 |
| procedure PaintHandler(var Message: TWMPaint); override - так не прокатит ругается |
| Автор: <Spawn> 1.7.2004, 15:37 | ||
| PaintHandler не совсем то что нужно Вот я примерчик набросал с WM_PAINT
|
| Автор: Гость_qwerty 1.7.2004, 15:48 |
| я так уже делал.... потаймеру все рисуется, а без него нет |
| Автор: <Spawn> 1.7.2004, 15:55 |
| У меня это код все нормально рисует. Может у тебя где то ошибка? |
| Автор: Гость_qwerty 1.7.2004, 16:00 |
| 1) есть разница что я создаю канву в перехваченном OnCreate, а не в CreateWnd? 2) я ставлю showmessage и функция работает только при изменении размера компонента дерево. ?????? |
| Автор: Гость_qwerty 1.7.2004, 16:05 |
| Да и компонент дерево на другом компоненте панель |
| Автор: <Spawn> 1.7.2004, 16:08 | ||
|
| Автор: Гость_qwerty 1.7.2004, 16:13 |
| а я так делал например FCanvas := TControlCanvas.Create; TControlCanvas(FCanvas).Control := Self; хотя пробовал с CreateWnd все равно никак |
| Автор: Гость_qwerty 1.7.2004, 16:32 |
| вообще моргает потому что перерисовка осуществляется так закрашивается сначала фоном а потом рисуется я попроовал это сделать не через таймер а через tapplicationevents ловил onmessage можно как нидь перерисовку изменить, чтобы быстрее очищать??? |
| Автор: <Spawn> 1.7.2004, 19:56 |
| Я уже написал, что перерисовку нужно делать только на WM_PAINT. Не для красоты же придумали это сообщение. Ищи ошибку в коде - у меня работает все |