Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TreeView 
:(
    Опции темы
Гость_qwerty
Дата 1.7.2004, 08:40 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть написанный мной компонент типа treeview, но есть маленькая проблема...
связи отрисовываются по таймеру и моргают иногда....
как избежать этого ???
  Вверх
<Spawn>
Дата 1.7.2004, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Зачем рисовать по таймеру? Нужно рисовать по WM_PAINT


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_qwerty
Дата 1.7.2004, 13:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











мона по подробнее, плиз
  Вверх
<Spawn>
Дата 1.7.2004, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Сначала скажи как ты создал дерево? Унаследовал от TTreeView? Тогда тебе нужно искать метод класса который вызывается при перерисовке контрола и перекрывать его. Либо написать что то типа этого:

Код
TMyTreeView=class(TTreeView)
 private
   procedrue WMPaint(var Msg: TMessage); message WM_PAINT;
 <остальное определение твоего класса>
end;

procedure TMyTreeView.WMPaint(var Msg: TMessage);
begin
 inherited WMPaint;
 <рисуешь чего то тут>
end;


Это сообщение отредактировал(а) <Spawn> - 1.7.2004, 13:58


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_qwerty
Дата 1.7.2004, 14:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











дерево наследовано от scrollbox'a остальное с нуля, treeview принципиально не подходит
Этот код я уже понял как писать, н овсе равно пасиб...
вопрос другой.....

inherited WMPaint;

пишет неопределена переменная?????
  Вверх
<Spawn>
Дата 1.7.2004, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



оЧепЯтался я smile.gif Напиши, либо
Код
inherited;

либо
Код
inherited WMPaint(Msg);


Это одно и то же.
Добавлено @ 14:13
Я глянул исходники - метод который вызвается при перерисовке называется PaintHandler и он помещен защищенной секции, так что тебе лучше его перекрывать.

Код
procedure TMyTreeView.PaintHandler(...);
begin
 inherited;
end;


Это сообщение отредактировал(а) <Spawn> - 1.7.2004, 14:13


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_qwerty
Дата 1.7.2004, 14:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











он статический, как его перекрыть?
  Вверх
<Spawn>
Дата 1.7.2004, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Так же как и виртуальныйsmile.gif)

Код
TMyTreeView = class(TScrollBox)
protected
 procedure PaintHandler();
...
end;

procedure TMyTreeView.PaintHandler(...);
begin
inherited;
 <твое рисование>
end;


Это сообщение отредактировал(а) <Spawn> - 1.7.2004, 14:31


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_qwerty
Дата 1.7.2004, 14:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











вообще не срабатывает...
а по WM_Paint только в момент изменения размера компонента на форме
  Вверх
<Spawn>
Дата 1.7.2004, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Ты для PaintHandler параметры то прописал?
Добавлено @ 14:38
Код
procedure TMyTreeView.PaintHandler(var Message: TWMPaint);



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_qwerty
Дата 1.7.2004, 14:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











само собой
  Вверх
<Spawn>
Дата 1.7.2004, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Должно рисоваться. Покажи как рисуешь, если твой код не секретныйsmile.gif


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_qwerty
Дата 1.7.2004, 15:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











procedure PaintHandler(var Message: TWMPaint); override - так не прокатит ругается
  Вверх
<Spawn>
Дата 1.7.2004, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



PaintHandler не совсем то что нужноsmile.gif
Вот я примерчик набросал с WM_PAINT

Код
 TMyScrollBox = class(TScrollBox)
 private
   FCanvas: TCanvas;
   procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
 protected
   procedure CreateWnd; override;
 public
   destructor Destroy; override;
 end;

procedure TMyScrollBox.CreateWnd;
begin
 inherited;
 FCanvas := TCanvas.Create;
 FCanvas.Handle := GetDC(Handle);
end;

destructor TMyScrollBox.Destroy;
begin
 FreeAndNil(FCanvas);
 inherited;
end;

procedure TMyScrollBox.WMPaint(var Message: TWMPaint);
begin
 inherited;
 with FCanvas do
 begin
   Pen.Color := clRed;
   MoveTo(10, 10);
   LineTo(40, 60);
   Ellipse(Rect(10, 10, 100, 100));
 end;
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_qwerty
Дата 1.7.2004, 15:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











я так уже делал....
потаймеру все рисуется, а без него нет
  Вверх
<Spawn>
Дата 1.7.2004, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



У меня это код все нормально рисует. Может у тебя где то ошибка?


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_qwerty
Дата 1.7.2004, 16:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











1) есть разница что я создаю канву в перехваченном OnCreate, а не в CreateWnd?
2) я ставлю showmessage и функция работает только при изменении размера компонента
дерево. ??????
  Вверх
Гость_qwerty
Дата 1.7.2004, 16:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да и компонент дерево на другом компоненте панель
  Вверх
<Spawn>
Дата 1.7.2004, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Цитата
) есть разница что я создаю канву в перехваченном OnCreate, а не в CreateWnd?
Разница есть - у меня без этого все с ошибкой вылетало, так как не стадии Create еще нельзя получить HDC


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_qwerty
Дата 1.7.2004, 16:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











а я так делал например

FCanvas := TControlCanvas.Create;
TControlCanvas(FCanvas).Control := Self;

хотя пробовал с CreateWnd все равно никак
  Вверх
Гость_qwerty
Дата 1.7.2004, 16:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











вообще моргает потому что перерисовка осуществляется так

закрашивается сначала фоном а потом рисуется

я попроовал это сделать не через таймер а через tapplicationevents ловил onmessage


можно как нидь перерисовку изменить, чтобы быстрее очищать???
  Вверх
<Spawn>
Дата 1.7.2004, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Я уже написал, что перерисовку нужно делать только на WM_PAINT. Не для красоты же придумали это сообщение. Ищи ошибку в коде - у меня работает все


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.