25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
||||||
1 | ||||||
Работа с классами и значениями переменных класса03.10.2012, 06:17. Показов 7150. Ответов 6
Метки нет (Все метки)
Привет.
Извините, что прямо так прошу не привык так) Помогите!!! Перешел на 3 курс, сказали все, с++ не будет, будет lazarus и pascal. Буквально на второй лабораторной запоролся Не буду полностью задание писать, хочу наоборот обсудить, а не чтобы за меня решили. Но побыстрее Задача такая. Нужно создать форму, внутри формы создать 2 поля, в котором будут выводиться положение формы (название формы DesignTimeForm) относительно верха и левого края. Top и Left. Как это сделать? Я так понимаю в процедуре TDesignTimeForm.FormCreate нужно этим полям присвоить значения. Как это сделать? Что я неправильно делаю?
Добавлено через 13 минут Погуглил нашел вот что: Ошибка Access Violation возникает при: .... 3) На форме на onCreate вызывается что-то с других форм - эти другие формы на этот момент еще не созданы .... Это же как раз мой случай. Как тогда быть? Мне нужно, чтобы, когда я нажму на кнопочку в главной программе, показать значения лефт и топ этого окна? может я что-то путаю в задании? На главной форме имеются две кнопки: Изменить и Показать. При нажатии кнопки Изменить выводятся параметры окна формы: положение на экране, размер по горизонтали и вертикали, цвет фона. С помощью мыши преобразовать эти параметры и цвет. При нажатии кнопки Показать главной формы должно быть отображено окно формы в соответствии с параметрами, записанными в файле run-time
0
|
03.10.2012, 06:17 | |
Ответы с готовыми решениями:
6
Работа с уже сконструированными классами из другого класса Работа с классами: массив объектов класса Complex Работа с классами: создание нескольких экземпляров класса Работа с классами (в главном классе создать указатель на экземпляр другого класса) |
1 / 1 / 0
Регистрация: 14.09.2012
Сообщений: 13
|
||||||
03.10.2012, 08:51 | 2 | |||||
Попробуй это сделать не в OnCreate, а в OnShow.
Добавлено через 43 минуты
0
|
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
||||||
03.10.2012, 18:23 [ТС] | 3 | |||||
Позже проверю этот момент, сейчас нету под рукой кода той программы.
А тут что не так? Сделал, как ты и сказал, в onshow.
Добавлено через 5 минут Попробовал даже в OnClose - та же самая ошибка
0
|
Супер-модератор
|
||||||
03.10.2012, 18:31 | 4 | |||||
Нельзя обращаться к свойствам по имени класса, нужно обращаться по имени экземпляра. Как называется экземпляр формы? DesignTimeForm1? Вот и пиши, либо
0
|
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
||||||
03.10.2012, 20:06 [ТС] | 5 | |||||
Да, да, да, уже понял, сделал это все.
Такой вопросик теперь. У меня задание: Изначально. Есть главное окно, в котором доступны кнопки run time & design time. По открытию design-time пишем информацию в файлик. Когда нажимаем run-time открывается форма, и, как я понял, она должна содержать то же, что и форма design time, но только взяв информацию из файла. Каким образом это сделать? designtime форму сделал, борюсь с этой частью, как я понял, напрямую связанную с созданием runtime формы. Вот: Создать модуль ComponentManagerUnit с описанием класса TComponentManager, который хранит ссылки на компоненты формы, выполняет чтение данных из ini файла, содержит методы определяющие свойства и обработчики событий для компонентов. Что именно нужно сделать? Что от меня требуется, не очень понимаю. Объясните пожалуйста. Я так понял нужно : создать новый файл, внутри описать класс, который будет содержать ссылки на все объекты. как это сделать? объект например TLabelNumber1.
Когда увидит что дальше то делать
0
|
Супер-модератор
|
|
03.10.2012, 20:26 | 6 |
Правильно понимаешь. Одну форму ты создаешь в дизайнере, потом сохраняешь всю информацию о ее компонентах в INI, и создаешь новую форму, с динамическим созданием компонентов (имеющих свойства, которые будут читаться из INI).
Я не думаю. Тебе надо создать такую структуру, чтобы ты, не зная изначально, что у тебя будет в INI-файле, мог прочесть информацию, создать компонент, и положить его на форму, занеся информацию о нем в твой ComponentManager. А ты хочешь опять жестко вшить в этот класс какие-то типы? Это нужно делать так, как, собственно, делает сам Lazarus, и Дельфи: все компоненты - потомки класса TComponent, так что, если ты опишешь в классе TComponentManager массив из TComponent-ов, то потом сможешь в него занести любые компоненты, какие бы они не были. Представь ситуацию: твой преподаватель положит на дизайн-тайм форму какой-нибудь TBitBtn, пересоберет программу и запустит ее. А ты на TBitBtn не рассчитывал. Твое приложение тут же вылетит, если жестко будут записаны все типы, а того, которого надо - не будет. А если рассчитывать не на конкретные типы. а на любых потомков TComponent-а, то всё будет работать безо всяких сбоев (если напишешь правильно ).
0
|
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
|
|
03.10.2012, 20:37 [ТС] | 7 |
Я забыл написать, я работаю с pascal и lazarus 1 день. без лекций практики и т.д. с помощью методички и гугла пока что.
с design-time я вроде бы все понял (ну как все ), а с run-time вообще ни бум-бум. можно объяснить с какими-то примерами? как я понял, нужно создать самому класс TComponentManager ( так говорит методичка, и то, что я вам скинул выше, по поводу задания, это цитата задания с методички ). как это сделать? там сказано, описать класс TcomponentManager, внутри него описать ссылки на компоненты формы. как сделать хотя бы это? а еще как сделать так, чтобы, как вы сказали, препод поставил что-то на форму, и у меня это отобразилось в run-time я на самом деле долго занимался C++ и понимаю, что, вы говорите по поводу
0
|
03.10.2012, 20:37 | |
03.10.2012, 20:37 | |
Помогаю со студенческими работами здесь
7
Замена в строке всех слов, совпадающих с именами заданных переменных, значениями этих переменных Реализация работы с классами, конструктор, методы класса и переменные класса Передача переменных между классами. Передача переменных между классами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |