При клике на форму исчезает всё...

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: При клике на форму исчезает всё...

Сообщение zub » 13.04.2012 13:50:07

в быстродействии у меня стоят и стояли все галки
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: При клике на форму исчезает всё...

Сообщение vitaly_l » 13.04.2012 14:00:18

zub писал(а):в быстродействии у меня стоят и стояли все галки

У меня нет ответа...
Если я делаю принудительный repaint; то всё на месте, но заметно как система перерисовывает компоненты.
А при клике на аналогичные компоненты других приложений, всё нормально..
Секрет где-то в настройках компилятора.

Добавлено спустя 16 минут 41 секунду:
Да вот ещё, если над компонентами водишь мышкой, то они обратно проявляются...
Либо минимизировать и максимизировать - восстанавливает...

Добавлено спустя 3 минуты 37 секунд:
Ко всему прочему сегодня ещё и пятница 13... :evil:
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: При клике на форму исчезает всё...

Сообщение zub » 13.04.2012 14:29:39

а в самом лазаре в окне настроки гденибудь где есть группбоксы тоже пропадают?
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: При клике на форму исчезает всё...

Сообщение amateur » 13.04.2012 14:35:58

Наивный вопрос: у Вас случаем не nvidia?

Нечто подобное у меня наблюдалось, именно нечто и именно на nvidia.
Пошаманил с настройками и более менее отрисовка заработала.
Грешу на "лишние" флажки после обновления дровишек. Ну не может моя видяха поддерживать то что инсталятор думает что может :)
У меня наблюдались проблемы с отрисовкой формы в хрюше и семерке.

Кстати: Ваш глюк похож на глюк с компонентами во время разработки - они то исчезают то появляются. К примеру- в версии лязаря < 0.9.31 если на дбгрид поместить лазрепорт то он имеет св-во исчезать а потом появляться :) (хотя иногда подобное наблюдалось и в 0.9.31).

На последок: попробывал все примеры тут, работают на вин 7 с аэро. Отрисовывается норм.

По поводу repaint - может есть другие способы перерисовки формы (к примеру рефреш) ?
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: При клике на форму исчезает всё...

Сообщение vitaly_l » 13.04.2012 14:57:15

amateur писал(а): у Вас случаем не nvidia?

Если бы карта или драйверы - то глючило бы ВСЁ...
а глючат только проекты скомпилированные Лазарус...
Но Вы уже третий кто говорит что мой проект у Вас работает нормально...
Пусть - это будет глюк моей системы... Но repaint я оставлю... он кушать не просит...
amateur писал(а):к примеру рефреш

Должно работать без: repaint и refresh...

zub писал(а):а в самом лазаре в окне настроки гденибудь где есть группбоксы тоже пропадают?

В том то всё и дело что НЕТ!... Если бы ДА, то тогда бы был точно сбой в системе...
а здесь сбой только у проектов компилированных лазарем... И в этом суть.

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: При клике на форму исчезает всё...

Сообщение amateur » 13.04.2012 15:02:13

Если бы карта или драйверы - то глючило бы ВСЁ...

Вот тут маленькая ошибочка: у меня остальное без глюков, а все что лазаря подглючивало... Парадокс.

скачал еще и сорцы, попробывал - глюков нет...

лазарь 1.1 фпс 2.6.0
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: При клике на форму исчезает всё...

Сообщение vitaly_l » 13.04.2012 15:24:57

amateur писал(а):Парадокс

Вот именно.
amateur писал(а):попробывал - глюков нет

Ну предположим - глюк моей системы... Но КАК????!
Всё остальное работает... а это нет... и там пустая форма - кода нет...
Вот КАК????! Это как-то связано с перерисовкой, при клике... "Родитель(GroupBox)": "детей(компоненты)" - не перерисовывает...
В общем, если кто знает или для статистики, то пишите, а если нет то нет...

.

Добавлено спустя 39 минут 31 секунду:
В самом Лазарусе, оказывается - тоже самое...
Зашёл на вкладку "параметры проекта", там ''информация о версии'...
И вот если на этой вкладке покликать попеременно на разные GroupBox-ы или названия GroupBox-ов, то: то что расположено на GroupBox - не перерисовывается... Связана ошибка: именно и исключительно - только с GroupBox... В GroupBox - не соответствие...
Посмотрите возможно и на Ваших системах тоже самое... Нужно попеременно кликать на разные GroupBox...
особенно если они расположены на общем GroupBox...

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: При клике на форму исчезает всё...

Сообщение amateur » 13.04.2012 16:16:47

барабашка не пробегал ?:)
плюньте в монитор, протрите... возьмите бубен, точнее попробуйте свой проект в других системах. "хрюшки", "кабаны" лин. Потом, верьните все настройки обратно. И выбросьте коде тифон в топку. Само тяжелое плюс глючит больше чем лазарь из свн.
Пользуйтесь обыкновенной сборкой, там ведь нет ничего сложного - для винды: нажал пару кнопок, оно само поставило...
Я брал отсюда http://freepascal.dfmk.hu/test/lazarus/ если быть точнее на сегодняшнее число ftp://newwiki.freepascal.org/pub/lazarus/snapshots/Lazarus-1.1-36740-fpc-2.6.0-20120413-win32.exe.
Но прежде чем ставить грохните то что Вы установили. Плюс в c:\Users\ЮЗВЕРЬ\AppData\Local\lazarus\ переименуйте папку (настройки лазаря, или удалите). Потом установите лазаря. Компоненты. Пересоберите лазарь. Попробуйте еще раз.
Если подобное повториться то гугл в помощь. Часто подобное уже у кого т было...
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: При клике на форму исчезает всё...

Сообщение vitaly_l » 13.04.2012 18:30:23

Странный факт перерисовки есть(при клике именно на GroupBox).
В общем я закрываю тему... т.к. у большинства этого глюка нет.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

GroupBox и Shape

Сообщение FatMan » 28.09.2012 00:54:46

Я всё же продолжу тему. Наткнулся и я на проблему то ли с GroupBox, то ли с моими знаниями о нём.
Итак, новая форма, на которой рисуется GroupBox, содержащий, допустим, три объекта типа TShape: Shape1, Shape2, Shape3 - прямоугольники. Добавляется ColorDialog.
На onMouseDown каждого Shape вешается один обработчик вида:
Код: Выделить всё
procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     ColorDialog.color:=TShape(Sender).Brush.Color;
     if ColorDialog.Execute then TShape(Sender).Brush.Color:=ColorDialog.color;
end;

Т.е. по клику каждый Shape должен инициализировать ColorDialoig своим цветом и менять цвет на новый, выбранный в этом диалоге.
В результате, однако, поведение иное: первому Shape цвет назначается так, как и ожидается из кода. А вот два других Shape почему-то инициализируют диалог не своим цветом, а цветом первого Shape, и при назначении в диалоге нового цвета, им раскрашивается всё тот же первый Shape. Первый не по порядку указания в коде или на форме, а по порядку использования при работе программы. При этом координаты X, Y, которые попадают в обработчик при клике на втором или третьем , считаются от первого Shape - т.е. явно выходят за его границы.
Опробован и другой вариант: раздельные обработчики для каждого Shape с таким же кодом, только вместо TShape(Sender) указывалось явно Shape1 (или Shape2, Shape3).

Поведение меняется на ожидаемое, если после первого диалога кликнуть мышкой за пределы GroupBox'а, а затем - по второму Shape. В таком случае ColorDialog будет вызван для этого второго Shape. Не обнаружено проблем с реакцией на onMouseDown в случае, когда Шейпы расположены не в GroupBox, а в Panel или просто на форме - всё работает по написанному. Правда, чудеса продолжатся, если на форме одновременно есть Shape в GroupBox и вне его: те, что вне, работают нормально, а что внутри GroupBox'а могут перестать реагировать на левую кнопку мыши, например...

Проверялось это на Lazarus 1.0 (релиз) и 1.0.1 от 25.09.2012 на Win2k и WinXP. На всякий случай: тема оформления классическая.
Попробовал слепить аналогичную тестовую программку на Delphi 5 - всё без проблем, ожидаемо, вне зависимости от наличия GroupBox'а и расположения Shape'ов.

Вот я и думаю: то ли ошибка в Лазарусе, то ли в функционале GroupBox есть какие-то моменты, которых я не знаю. Соответственно вопрос: как исправить и/или как сделать , чтобы правильно было?
FatMan
незнакомец
 
Сообщения: 6
Зарегистрирован: 25.09.2012 20:48:04

Re: При клике на форму исчезает всё...

Сообщение vitaly_l » 28.09.2012 08:53:39

.

Это как-то связано с другими компонентами, у меня данный пример - замечательно работает (просто на форме).
А когда подгружаю GroupBox1, то действительно проявляется описанный выше баг...
По всей видимости: они(разные компоненты) - конфликтуют... Скорее всего когда подгружают свои модули...

FatMan писал(а):if ColorDialog.Execute then TShape(Sender).Brush.Color:=ColorDialog.color;


А касаемо Вашего примера, мне технически непонятно:
:arrow: Почему TShape(Sender) - заливает себя цветом?!
:arrow: Кто TShape(Sender) разрешил(команду дал)?
:!: По идее, должен присваивается - только цвет кисти.., а TShape заливает цветом...
А вот как исправить... я тоже не знаю...

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: При клике на форму исчезает всё...

Сообщение FatMan » 28.09.2012 21:00:15

vitaly_l писал(а):Почему TShape(Sender) - заливает себя цветом?!

Вот тут-то как раз более понятно: на Brush.onChange вызывается StyleChange, из которого, в свою очередь, Invalidate, что и приводит в итоге к перерисовке объекта TShape.
FatMan
незнакомец
 
Сообщения: 6
Зарегистрирован: 25.09.2012 20:48:04

Re: При клике на форму исчезает всё...

Сообщение vitaly_l » 28.09.2012 21:33:09

FatMan писал(а):первому Shape цвет назначается так, как и ожидается из кода. А вот два других Shape почему-то инициализируют диалог не своим цветом, а цветом первого Shape, и при назначении в диалоге нового цвета, им раскрашивается всё тот же первый Shape. Первый не по порядку указания в коде или на форме, а по порядку использования при работе программы. При этом координаты X, Y, которые попадают в обработчик при клике на втором или третьем , считаются от первого Shape - т.е. явно выходят за его границы.

Это как раз похоже тот же баг, что и был изложен в топике изначально, только у меня глючило с другими компонентами...
Только здесь даже refresh не помогает... Я после клика по первому Shape могу попросту кликать в любую точку GroupBox'а но программа воспринимает его как первый по клику Shape... И отключается действительно только по клику на форму :(
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: При клике на форму исчезает всё...

Сообщение ZeUsM » 28.09.2012 23:54:47

Подтверждаю и в Lazarus 1.0 и в тифоне 2.90.
В Delphi XE, XE2, XE3 все работает как и предполагалось. :roll:
Аватара пользователя
ZeUsM
новенький
 
Сообщения: 57
Зарегистрирован: 08.11.2010 13:55:35
Откуда: Нерезиновая

Re: При клике на форму исчезает всё...

Сообщение FatMan » 29.09.2012 23:55:26

vitaly_l писал(а):И отключается действительно только по клику на форму

Чуть подробнее распишу ситуацию с наличием шейпов и вне групбокса. Экспериментировал с формой, на которой было несколько Шейпов: три на форме, три на панели и три на групбоксе, обработчик onMouseDown один на всех с TShape(Sender) внутри. Те шейпы, что на форме и на панели, работают нормально, с групбоксом - по-прежнему всё не так. Если начинать щёлкать по шейпам на групбоксе, их реакция такая же, как описывалось: последующие клики считаются принадлежащими первому кликнутому шейпу. Если кликнуть по шейпу вне групбокса, то после этого клики левой кнопкой по шейпам в групбоксе игнорируются, пока не будет сделано клика где-то вне этого групбокса (по форме, например), но не по какому-то контролу. Т.е. клик по чекбоксу или эдиту ситуацию не исправляет (а по лейблу на форме - исправляет).
Наверное, это не исчерпывающее описание проблем с GroupBox. И не исключаю, что всё может вылечиться одной строчкой в исходниках. Увы, не по моей квалификации сейчас поиск источника проблемы...
PS. пробовал заменить GropupBox на ColorButton с такой же функциональностью, повесив обработчик на onClick, - почему-то диалог вызывается дважды. И так происходит не только при размещении ColorButton на GroupBox, но и на форме. Придётся, поди, на TImage переделывать...
FatMan
незнакомец
 
Сообщения: 6
Зарегистрирован: 25.09.2012 20:48:04

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 219

Рейтинг@Mail.ru