Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ Builder

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Байт
Диссидент
Эксперт C
16827 / 11092 / 1743
Регистрация: 24.12.2010
Сообщений: 21,784
#1

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

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

Собственно, эта тема вылезла из этой
OnMouseMove + Hint
Решил сделать свой собственный Хинт через Лабел
Обработчик 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):

Рандом по всем символам, предотвратить запись невидимых символов в строку. - C++ Builder
Здравствуйте. Необходимо создать строку с рандомным набором символов системы. Для этого использую функцию: const AnsiString...

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

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

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

Закрыть форму и открыть форму - C++ Builder
Как закрыть не главную форму и запустить заново с ее начальным состоянием. Поясню. В Form2 у компонента radiobutton изначально...

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

8
BRcr
4011 / 2301 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
03.03.2012, 18:43 #2
А действительно ли так нужно отключать перерисовку? Может, двойную буферизацию на форме разрешить?
2
nick42
Практикантроп
4126 / 2159 / 208
Регистрация: 23.09.2011
Сообщений: 4,622
03.03.2012, 19:21 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я все-таки предлагаю опробовать статусбар (привязка к курсору). Посмотрите. Текста там очень мало__
3
Миниатюры
Предотвратить перерисовку форму  
Вложения
Тип файла: zip 17.ZIP (225.7 Кб, 11 просмотров)
Samrisbe
1351 / 721 / 33
Регистрация: 28.01.2011
Сообщений: 1,958
03.03.2012, 20:09 #4
Я попробовал ТPanel тоже работает славно.
Спасибо!
2
Миниатюры
Предотвратить перерисовку форму  
Samrisbe
1351 / 721 / 33
Регистрация: 28.01.2011
Сообщений: 1,958
03.03.2012, 20:19 #5
Единственное но тут, надо смастерить событие MauseLeave для Buttona например (так как в Buildere 6 его еще нет) и туда вписать
C++
1
sb1->Visible = false;
иначи если резко дернуть мышкой Hint останется видимым, что не есть хорошо.
1
nick42
Практикантроп
4126 / 2159 / 208
Регистрация: 23.09.2011
Сообщений: 4,622
03.03.2012, 21:36 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
У меня перемещение курсора по форме гасит статусбар; но минусов хватает: во-первых - текст только в одну строку, переноса нет. Во-вторых - за пределы формы статусбар не выходит. Можно пробовать внедрить в него Label, но тогда уж лучше использовать просто Panel.
3
Samrisbe
1351 / 721 / 33
Регистрация: 28.01.2011
Сообщений: 1,958
03.03.2012, 21:56 #7
Цитата Сообщение от nick42 Посмотреть сообщение
текст только в одну строку
Можно Memo прикрутить.

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

Незнаю как другим а мне твой вариант подуше я его даже уже прикрутил к одной базе данных, за что и поблагодарил кота в предыдущем посте!
0
Байт
Диссидент
Эксперт C
16827 / 11092 / 1743
Регистрация: 24.12.2010
Сообщений: 21,784
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 переопределить перерисовку - C# WPF
здравствуйте, собственно интересует вопрос как переопределить перерисовку у DockPanel. Суть задачи состоит в том, что у меня есть...

Реализовать перерисовку в image - Delphi
Рисую в компоненте image на канве не могу сделать перерисовку. Картинки налаживается друг на друга. Что делать?

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

Запрет на перерисовку формы при OnDeactivate - Delphi
Всем привет! У меня в программе есть отдельное окно, в котором выводится 3D-графика посредством OpenGL. После каждого действия в окне...


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

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

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