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

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

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

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

Сообщение Leonius_Bad » 19.04.2014 20:21:05

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

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

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

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

Как же правильно изменять значения компонентов фрейма или же они полностью статичны и задаются только при дизайне\создание?
Lazarus 1.2.0 x32. Windows 7 x64
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

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

Сообщение svk12 » 20.04.2014 00:48:25

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

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



Если "кинул", то "заводить" переменную не надо, она уже есть в списке полей формы.
Её и надо использовать. А самозаведённая - не проинициализирована, при обращении к её полям будет бо-бо.
svk12
постоялец
 
Сообщения: 409
Зарегистрирован: 09.06.2008 18:42:47

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

Сообщение Leonius_Bad » 20.04.2014 08:44:06

svk12, вот же я невнимательное существо :o Видел же эту Frame1_1 в подсказках и нет же.
Спасибо Вам большое, теперь вот такой код:
Код: Выделить всё
Frame1_1.Label1.caption:='Bla!'

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

Добавлено спустя 14 минут 45 секунд:
Ага, и всё же непонятка осталась.
Если обратится таким образом к компоненту фрейма, то логично, что обращение идет к фрейму только на этой форме. Логично-то логично, но выходит, что за один подход нельзя изменить содержимое всех экземпляров этого фрейма на разных формах?
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

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

Сообщение svk12 » 20.04.2014 11:34:24

При создании экземпляра формы создаётся также экземпляр фрейма, значения полей которого можно изменять - на время исполнения.
При следующем создании формы они снова будут в исходном состоянии. Надо включить в событие формы OnCreate код, устанавливающий
нужные значения полей фрейма, и все дела.
svk12
постоялец
 
Сообщения: 409
Зарегистрирован: 09.06.2008 18:42:47


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru