Обращение к компонентам фрейма

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

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

Ответить
Leonius_Bad
новенький
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Обращение к компонентам фрейма

Сообщение Leonius_Bad »

Привет.
Не смог найти темы типа "для новичков", в тему по компонентам писать побоялся, ибо компонент вроде стандартный и туда его не надо, потому, снова новая. Поправьте меня, пожалуйста, и ткните носом в тему для новичков и для таких вот вопросов, если такая тема таки есть :)

Никогда раньше не использовал фреймы, почитав про них в фрипаскаль-вики (понял не всё, английский хромой..), вроде примерно понял их суть. В основном применяются когда один и тот же набор компонентов необходимо использовать в разных местах (формах) и иногда для замены функционала TabSheet, так? Меня интересует первое.
На нескольких формах у меня есть один одинаковый блок, этакая информация о пользователе (имя\пароли\явки и тд), блок, как ясно из его предназначения, меняет информацию в зависимости от текущего пользователя, т.е. логика информации всегда одна, но содержимое различается. Всё вроде прекрасно было, заготовил фрейм, настроил лайблы и так далее, кинул его на все формы и тут раз...Не могу изменить кэпшены этих лейблов.
Делал так. Завел переменную Fram1:TFrame1 по аналогии с формами, конечно же подключил модуль фрейма к нужным формам, прописав

Код: Выделить всё

Fram1.Label1.Caption:='Blablabla';

там, где значение задается, ловлю exception sigsegv. Экспериментировал с этим: создавал формы с фреймом\не создавал формы с ним до обращения - всё одно.

Фрейм создаю чисто визуально, в коде нет ничего.

Как же правильно изменять значения компонентов фрейма или же они полностью статичны и задаются только при дизайне\создание?
Lazarus 1.2.0 x32. Windows 7 x64
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

Leonius_Bad писал(а):кинул его на все формы и тут раз...Не могу изменить кэпшены этих лейблов.
Делал так. Завел переменную Fram1:TFrame1 по аналогии с формами, конечно же подключил модуль фрейма к нужным формам, прописав

Код: Выделить всё

Код: Выделить всё
    Fram1.Label1.Caption:='Blablabla';



Если "кинул", то "заводить" переменную не надо, она уже есть в списке полей формы.
Её и надо использовать. А самозаведённая - не проинициализирована, при обращении к её полям будет бо-бо.
Leonius_Bad
новенький
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Сообщение Leonius_Bad »

svk12, вот же я невнимательное существо :o Видел же эту Frame1_1 в подсказках и нет же.
Спасибо Вам большое, теперь вот такой код:

Код: Выделить всё

Frame1_1.Label1.caption:='Bla!'

и иные манипуляции с объектами отлично работают :D

Добавлено спустя 14 минут 45 секунд:
Ага, и всё же непонятка осталась.
Если обратится таким образом к компоненту фрейма, то логично, что обращение идет к фрейму только на этой форме. Логично-то логично, но выходит, что за один подход нельзя изменить содержимое всех экземпляров этого фрейма на разных формах?
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

При создании экземпляра формы создаётся также экземпляр фрейма, значения полей которого можно изменять - на время исполнения.
При следующем создании формы они снова будут в исходном состоянии. Надо включить в событие формы OnCreate код, устанавливающий
нужные значения полей фрейма, и все дела.
Ответить