Чертовщина с TLabeledEdit

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

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

Чертовщина с TLabeledEdit

Сообщение Troublemaker » 28.05.2008 17:13:41

сборка была 9.24.1 от 080417, час назад поставил ту же версию, сборка от 080526, проблема осталась.

На форме pagecontrol.
На нем есть много чего. В т.ч. и несколько TLE.

Пытаюсь подвинуть TLE в пределах tabsheet-a. Сам edit остается на месте, а по странице двигается его editlabel.

Перехожу на другой лист, где тоже есть несколько TLE - они двигаются нормально. Делаю родителем "непослушного" TLE другой лист, и он начинает нормально двигаться именно по этому листу. Возвращаю его на родной лист - опять двигается только лейбл.

Пример на скриншоте:
lazarus-TLE-problem.jpg

Пытаюсь передвинуть edit для ввода email-a, но сам контрол остается на месте, а его метка (labelposition=lpLeft, labelspacing=3) движется.

Иногда помогает временное удаление с листа контролов типа groupbox, иногда - нет. Ручное изменение top/left для edit-a ни к чему не приводит - опять же, отодвигается его метка, а значение в соотв. поле в инспекторе объектов возвращается к своему изначальному.

Создаю на том же листе панельку и делаю ее родителем контрола - в пределах панельки всё замечательно. Но не делать же мне панель на весь tabsheet?

p.s. Начал писать слово "Ручное", не переключившись на русский... Получилось почти по-сербски... Рекомендую попробовать... :)

Добавлено спустя 7 минут 11 секунд:
Да, если на новом листе-родителе уже есть TLE, то может произойти одно из двух: либо новый "детеныш" начинает вести себя нормально, либо дуру гнать начинают и "старшие дети", которые уже были на этом листе.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Чертовщина с TLabeledEdit

Сообщение Padre_Mortius » 28.05.2008 17:34:47

Проблема старая и не раз поднимавшаяся на форуме. Решение сводилось к правке файла lfm на предмет исправления родителя (Parent) "капризного" контрола.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Чертовщина с TLabeledEdit

Сообщение Troublemaker » 28.05.2008 17:43:37

Padre_Mortius писал(а):правка файла lfm на предмет исправления родителя (Parent) "капризного" контрола.
Пытался понять, где же там это правится. Вроде он находится в object/end-блоке того листа, на котором размещен.

На что именно обратить внимание?
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Чертовщина с TLabeledEdit

Сообщение Padre_Mortius » 28.05.2008 17:48:47

lfm имеет древовидную структуру. По пробелам нужно смотреть к какому родителю он относится
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Чертовщина с TLabeledEdit

Сообщение Troublemaker » 28.05.2008 17:57:28

Сейчас еще раз гляну, но визуально всё путем.
В инспекторе четко видно, что папа TLEdit-ов именно TabSheet, а не что-то другое.

Что до поиска, то гугль, похоже, тоже не ищет внутри блоков CODE. Специально проверил поиском "Form1.Controls[i].Hint site:.freepascal.ru" (расположено здесь). Гугль утверждает, что нет такого.

Padre_Mortius писал(а):нужно смотреть к какому родителю он относится

Вот кусок с кодом листа, где живут капризные TLE. Выпендриваются все контролы с типом TLabeledEdit.
Может я что-то проглядел?

Код: Выделить всё
  object MainPages: TPageControl
    Left = 25
    Height = 528
    Top = 45
    Width = 769
    ActivePage = TabShCollEd
    Anchors = [akTop, akLeft, akRight, akBottom]
    Constraints.MinHeight = 528
    TabIndex = 0
    TabOrder = 0
    OnChange = MainPagesChange
    OnPageChanged = MainPagesChange
    object TabShCollEd: TTabSheet
      Caption = 'Редактор коллекции'
      ClientHeight = 502
      ClientWidth = 761
      object CollNameEdit: TLabeledEdit
        Tag = 1000
        Left = 116
        Height = 17
        Hint = 'Введите название коллекции в произвольной форме'
        Top = 3
        Width = 345
        EditLabel.Left = 3
        EditLabel.Height = 14
        EditLabel.Top = 4
        EditLabel.Width = 110
        EditLabel.Caption = 'Название коллекции:'
        EditLabel.ParentColor = False
        LabelPosition = lpLeft
        ParentColor = False
        TabOrder = 0
        OnChange = CollEditChange
        OnExit = EditOnExit
      end
      object CollAuthorEdit: TLabeledEdit
        Tag = 1000
        Left = 116
        Height = 17
        Hint = 'Введите фамилию, имя и отчеcтво'#13#10'разработчика данной коллекции'
        Top = 23
        Width = 250
        EditLabel.Left = 77
        EditLabel.Height = 14
        EditLabel.Top = 24
        EditLabel.Width = 36
        EditLabel.Caption = 'Автор:'
        EditLabel.ParentColor = False
        LabelPosition = lpLeft
        ParentColor = False
        TabOrder = 1
        OnExit = EditOnExit
      end
      object CollCheckedByEdit: TLabeledEdit
        Tag = 1000
        Left = 116
        Height = 17
        Hint = 'Введите фамилию, имя и отчеcтво лица'#13#10'проверившего данную коллекцию'
        Top = 43
        Width = 250
        EditLabel.Left = 59
        EditLabel.Height = 14
        EditLabel.Top = 44
        EditLabel.Width = 54
        EditLabel.Caption = 'Проверил:'
        EditLabel.ParentColor = False
        LabelPosition = lpLeft
        ParentColor = False
        TabOrder = 2
        OnExit = EditOnExit
      end
      object CollConfirmedByEdit: TLabeledEdit
        Tag = 1000
        Left = 116
        Height = 17
        Hint = 'Введите фамилию, имя и отчеcтво лица'#13#10'утвердившего данную коллекцию'
        Top = 63
        Width = 250
        EditLabel.Left = 58
        EditLabel.Height = 14
        EditLabel.Top = 64
        EditLabel.Width = 55
        EditLabel.Caption = 'Утвердил:'
        EditLabel.ParentColor = False
        LabelPosition = lpLeft
        ParentColor = False
        TabOrder = 3
        OnExit = EditOnExit
      end
      object LEValidSince: TLabeledEdit
        Tag = 1001
        Left = 116
        Height = 17
        Hint = 'Дата, с которой коллекция становится доступной'#13#10'для использования студентом.'#13#10'На теоретические и тренировочные модули это'#13#10'ограничение не действует.'
        Top = 83
        Width = 120
        BorderSpacing.Top = 3
        EditLabel.Tag = 1001
        EditLabel.Left = 45
        EditLabel.Height = 14
        EditLabel.Top = 84
        EditLabel.Width = 68
        EditLabel.Caption = 'Действует с:'
        EditLabel.ParentColor = False
        LabelPosition = lpLeft
        ParentColor = False
        ReadOnly = True
        TabOrder = 4
        OnChange = CalendarLookup
        OnClick = CalendarLookup
        OnExit = EditOnExit
      end
      object CollAuthorREdit: TLabeledEdit
        Tag = 1000
        Left = 491
        Height = 17
        Hint = 'Введите должность автора коллекции'
        Top = 23
        Width = 206
        EditLabel.Left = 426
        EditLabel.Height = 14
        EditLabel.Top = 24
        EditLabel.Width = 62
        EditLabel.Caption = 'Должность:'
        EditLabel.ParentColor = False
        LabelPosition = lpLeft
        ParentColor = False
        TabOrder = 8
        OnExit = EditOnExit
      end
      object CollCheckedByREdit: TLabeledEdit
        Tag = 1000
        Left = 491
        Height = 17
        Hint = 'Введите должность проверившего коллекцию'
        Top = 43
        Width = 206
        EditLabel.Left = 426
        EditLabel.Height = 14
        EditLabel.Top = 44
        EditLabel.Width = 62
        EditLabel.Caption = 'Должность:'
        EditLabel.ParentColor = False
        LabelPosition = lpLeft
        ParentColor = False
        TabOrder = 9
        OnExit = EditOnExit
      end
      object CollConfirmedByREdit: TLabeledEdit
        Tag = 1000
        Left = 491
        Height = 17
        Hint = 'Введите должность утвердившего коллекцию'
        Top = 63
        Width = 206
        EditLabel.Left = 426
        EditLabel.Height = 14
        EditLabel.Top = 64
        EditLabel.Width = 62
        EditLabel.Caption = 'Должность:'
        EditLabel.ParentColor = False
        LabelPosition = lpLeft
        ParentColor = False
        TabOrder = 10
        OnExit = EditOnExit
      end
      object CollMailToEdit: TLabeledEdit
        Tag = 1000
        Left = 491
        Height = 17
        Hint = 'Введите адрес электронной почты, на который должны'#13#10'отправляться ответные пакеты для этой коллекции.'
        Top = 83
        Width = 206
        BorderSpacing.Top = 3
        EditLabel.Left = 454
        EditLabel.Height = 14
        EditLabel.Top = 84
        EditLabel.Width = 29
        EditLabel.Caption = 'E-mail'
        EditLabel.ParentColor = False
        LabelPosition = lpLeft
        ParentColor = False
        TabOrder = 11
        OnExit = EditOnExit
      end
      object LEValidUntil: TLabeledEdit
        Tag = 1001
        Left = 116
        Height = 17
        Hint = 'Указанная дата является последним днем,'#13#10'когда студент может проходить тестирование в'#13#10'этой коллекции.'#13#10'На теоретические и тренировочные модули это'#13#10'ограничение не действует.'
        Top = 103
        Width = 120
        BorderSpacing.Top = 3
        EditLabel.Left = 38
        EditLabel.Height = 14
        EditLabel.Top = 119
        EditLabel.Width = 75
        EditLabel.Caption = 'Действует по:'
        EditLabel.ParentColor = False
        LabelPosition = lpLeft
        ParentColor = False
        ReadOnly = True
        TabOrder = 12
        OnChange = CalendarLookup
        OnClick = CalendarLookup
        OnExit = EditOnExit
      end
    end


Добавлено спустя 35 минут 13 секунд:
Мля! Я сейчас рехнусь.
Убираю с этого листа самый обычный TLabel (делаю его родителем другую страницу) - и всё становится на свои места. Возвращаю лейбл на место - возвращаются и косяки с TLE. Это как?

Я могу, конечно, перед каждой перестановкой TLE убирать этот tlabel, но явно это не лучший выход.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Чертовщина с TLabeledEdit

Сообщение Padre_Mortius » 28.05.2008 20:50:02

Сам файл lfm с TLabel можно увидеть? в этом куске все ок. он должен работать нормально
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Чертовщина с TLabeledEdit

Сообщение Troublemaker » 28.05.2008 21:09:03

Гм... вот прямо сейчас, после того как я наигрался с перекидыванием лейбла с листа на лист, всё работает как надо - TLEdit-ы двигаются вместе с метками, как и должно быть. Обнаружил, когда в очередной раз перекинул ее на лист, где она должна жить, чтобы создать копию "неисправного" lfm...

Набор запущенного на данный момент софта тот же, что и в то время, когда я начинал тред, разве что еще флашгет чего-то качает.

Уже и не знаю, на что грешить - после начала треда пару раз уже перегружался, плясал с бубном - всё было бестолку.

Добавлено спустя 45 минут 45 секунд:
От греха подальше вынес все подобные лейблы на отдельный таб, откуда достаю их в рантайме через переназначение parent-a.

Обнаружил попутно такой побочный эффект: если новый родитель не активен в момент "усыновления", то значения parent.clientheight и т.п. либо "среднепотолочные" либо нулевые. То есть вот так работает:
Код: Выделить всё
  MainPages.ActivePage:=TabShQEd;
  with NoAnswersYetLabel do begin
    Parent:=TabShQEd;
    left:=(parent.ClientWidth-Width) shr 1;
    top:=(parent.ClientHeight-Height*2);
  end;
а вот так уже не работает:
Код: Выделить всё
//  MainPages.ActivePage:=TabShQEd;
  with NoAnswersYetLabel do begin
    Parent:=TabShQEd;
    left:=(parent.ClientWidth-Width) shr 1;
    top:=(parent.ClientHeight-Height*2);
  end;

Всё это делается в Form.OnShow.

Это только у меня так происходит?

Добавлено спустя 11 часов 36 минут 27 секунд:
Снова началось. См. в аттаче: colledit-good.lfm, colledit-bad.lfm и дифф между ними.
Разница только в том, что в bad две кнопки принадлежат самой панельке NewModulePanel, а в good я их убрал на соседнюю панельку. В bad-случае NewModuleNameEdit не движется.
Если после перетаскивания лейбла попробовать изменить ШИРИНУ edit-a, то он "прыгает" к передвинутой метке. При попытке изменить его ВЫСОТУ мышкой, такого не происходит, изменение параметра height в инспекторе проходит нормально.

Еще заметил, что sublabel этого TLE появилась в редакторе анкоров в качестве возможного соседа для привязки. Sublabel-ы остальных TLE в этом списке не появляются.

Сильно смахивает на недоработку именно в коде TLE, из-за чего путаются указатели на сам edit и на его sublabel.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Чертовщина с TLabeledEdit

Сообщение wavebvg » 01.06.2008 16:03:07

Тема, может и поднималась, но решения никакого пока нету - удалять десяток элементов на нескольких формах - это конечно веселая и благодарная работа, но, может есть действительно решение, которое исправит всё и сразу и на корню?
Редактирование свойств объекта у меня ни к чему положительному не приводила.
ЗЫ Очень на эту хрень злой!
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35

Re: Чертовщина с TLabeledEdit

Сообщение Troublemaker » 01.06.2008 16:37:07

wavebvg писал(а):удалять десяток элементов на нескольких формах

Как я уже писал выше, нашел временное решение в том, чтобы выкинуть с проблемной страницы все конфликтующие компоненты на другую страницу, откуда доставать их в рантайме, меняя parent-a.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Чертовщина с TLabeledEdit

Сообщение Павел Ишенин » 03.06.2008 07:02:41

Что-то я не смог воспроизвести описанных проблем. NewModuleNameEdit из colledit-bad.lfm нормально движется. Если версия lazarus <= .24 то надо обновиться до 0.9.25.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Чертовщина с TLabeledEdit

Сообщение ViTality » 03.06.2008 09:51:56

этот баг ваще какойто неуловимый.
Подобная ситуация происходит и у меня когда я использую обычный TEdit с прикрепленным к нему TLabel с помощью редактора привязок.
Но оно то есть, то нет. непонятно когда и из-за чего начинает глючить, и когда и из-за чего перестает :(
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: Чертовщина с TLabeledEdit

Сообщение Troublemaker » 03.06.2008 12:03:09

Павел Ишенин писал(а):Что-то я не смог воспроизвести описанных проблем.

См. выше:
ViTality писал(а):этот баг ваще какойто неуловимый

И мое сообщение - оно то есть то нет.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru