Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Байт
Эксперт C
17776 / 11801 / 2451
Регистрация: 24.12.2010
Сообщений: 23,726
#1

Предотвратить перерисовку форму - C++ Builder

03.03.2012, 09:43. Просмотров 1589. Ответов 8
Метки нет (Все метки)

Собственно, эта тема вылезла из этой
http://www.cyberforum.ru/cpp-builder/thread451956.html
Решил сделать свой собственный Хинт через Лабел
Обработчик OnMouseMove
C++
1
2
3
4
5
6
   if (HintL==NULL) {
     HintL = new TLabel(this);
     HintL->Parent = this;
   }
   HintL->SetBounds(X, Y+20, 100, 20);
   HintL->Caption = b;
Но происходит постоянная перерисовка формы (видно по чудовищному миганию)
Отсюда я сделал вывод, что SetBounds компонента вызывает перерисовку формы.
Я готов область под HintL лапками запоминать в Image, при движении восстанавливать и тд.
Но ведь перерисовка все равно останется из-за SetBounds ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2012, 09:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Предотвратить перерисовку форму (C++ Builder):

Рандом по всем символам, предотвратить запись невидимых символов в строку.
Здравствуйте. Необходимо создать строку с рандомным набором символов системы....

Браузер, как предотвратить открытие другого браузера при переходе по ссылке?
Лепил браузер с нуля. Такой простенький для практики. Все главное вроде сделал,...

Игра "лабиринт" - как предотвратить перемещение объектов сквозь стены?
Доброго времени суток. В Builder C++ Пытаюсь сделать лабиринт простейшего...

На всю форму залита картинка как фон, при зажатой левой клавише можно перетаскивать форму по экрану
Подскажите как это можно осущиствить? Как словить момент зажатия и как...

Закрыть форму и открыть форму
Как закрыть не главную форму и запустить заново с ее начальным состоянием....

Запрет на перерисовку изображения
Есть фоновое изображение формы, но при каждом вызове функции перерисовки...

8
BRcr
4015 / 2305 / 291
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
03.03.2012, 18:43 #2
А действительно ли так нужно отключать перерисовку? Может, двойную буферизацию на форме разрешить?
2
nick42
Практикантроп
4216 / 2249 / 379
Регистрация: 23.09.2011
Сообщений: 4,821
03.03.2012, 19:21 #3
Лучший ответ Сообщение было отмечено как решение

Решение

Я все-таки предлагаю опробовать статусбар (привязка к курсору). Посмотрите. Текста там очень мало__
3
Миниатюры
Предотвратить перерисовку форму  
Вложения
Тип файла: zip 17.ZIP (225.7 Кб, 11 просмотров)
Samrisbe
1351 / 721 / 66
Регистрация: 28.01.2011
Сообщений: 1,979
03.03.2012, 20:09 #4
Я попробовал ТPanel тоже работает славно.
Спасибо!
2
Миниатюры
Предотвратить перерисовку форму  
Samrisbe
1351 / 721 / 66
Регистрация: 28.01.2011
Сообщений: 1,979
03.03.2012, 20:19 #5
Единственное но тут, надо смастерить событие MauseLeave для Buttona например (так как в Buildere 6 его еще нет) и туда вписать
C++
1
sb1->Visible = false;
иначи если резко дернуть мышкой Hint останется видимым, что не есть хорошо.
1
nick42
Практикантроп
4216 / 2249 / 379
Регистрация: 23.09.2011
Сообщений: 4,821
03.03.2012, 21:36 #6
Лучший ответ Сообщение было отмечено как решение

Решение

У меня перемещение курсора по форме гасит статусбар; но минусов хватает: во-первых - текст только в одну строку, переноса нет. Во-вторых - за пределы формы статусбар не выходит. Можно пробовать внедрить в него Label, но тогда уж лучше использовать просто Panel.
3
Samrisbe
1351 / 721 / 66
Регистрация: 28.01.2011
Сообщений: 1,979
03.03.2012, 21:56 #7
Цитата Сообщение от nick42 Посмотреть сообщение
текст только в одну строку
Можно Memo прикрутить.

Цитата Сообщение от nick42 Посмотреть сообщение
за пределы формы статусбар не выходит
Для базы данных пойдет, в них окна большие.

Незнаю как другим а мне твой вариант подуше я его даже уже прикрутил к одной базе данных, за что и поблагодарил кота в предыдущем посте!
0
Байт
Эксперт C
17776 / 11801 / 2451
Регистрация: 24.12.2010
Сообщений: 23,726
04.03.2012, 10:48  [ТС] #8
Цитата Сообщение от BRcr Посмотреть сообщение
А действительно ли так нужно отключать перерисовку? Может, двойную буферизацию на форме разрешить?
Не подскажите ли, как это делается? Просто подтолкните - куда смотреть.

Добавлено через 22 минуты
nick42, Большое спасибо, обязательно попробую. Я как-то недооценивал возможности StatusBar В моем представлении это была просто полоска на краю формы, а она вот какая!
0
LK
Заблокирован
04.03.2012, 11:14 #9
C++
1
Form->DoubleBuffered = true;
или в инспекторе объектов.
Собственно , запретить перерисовку (на примере ричэдита)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// использовать WM_SETREDRAW при обработке нажатий на клавиши
#define USE_SETREDRAW 1
 
//---------------------------------------------------------------------------
    #ifdef USE_SETREDRAW // временно запрещаем перерисовку
        RichEdit1->Perform(WM_SETREDRAW,FALSE,0);
    #endif // USE_SETREDRAW
    int eventMask = RichEdit1->Perform(EM_SETEVENTMASK, 0, ENM_NONE);  // 4-я оптимизация
//---------------------------------------------------------------------------
    RichEdit1->Perform(EM_SETEVENTMASK, 0, eventMask);  // 4-я оптимизация
    #ifdef USE_SETREDRAW
    // снова разрешаем переривовку
        RichEdit1->Perform(WM_SETREDRAW,TRUE,0);
    // запрашиваем перерисовку окна - чтобы отобразить изменения
    ::InvalidateRect(RichEdit1->Handle, 0, 0);  // без стирания фона
    #endif // USE_SETREDRAW
или
C++
1
2
3
LockWindowUpdate(RichEdit1->Handle);
// ...
LockWindowUpdate(0);
2
04.03.2012, 11:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2012, 11:14
Привет! Вот еще темы с решениями:

DockPanel переопределить перерисовку
здравствуйте, собственно интересует вопрос как переопределить перерисовку у...

Реализовать перерисовку в image
Рисую в компоненте image на канве не могу сделать перерисовку. Картинки...

Как в Image сделать перерисовку?
Использовал Image1.Repaint , но чего-то не работает !Помогите!

Запрет на перерисовку формы при OnDeactivate
Всем привет! У меня в программе есть отдельное окно, в котором выводится...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru