Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/37: Рейтинг темы: голосов - 37, средняя оценка - 4.59
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
1

Работа с классами и значениями переменных класса

03.10.2012, 06:17. Показов 7150. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет.
Извините, что прямо так прошу не привык так)
Помогите!!!

Перешел на 3 курс, сказали все, с++ не будет, будет lazarus и pascal.
Буквально на второй лабораторной запоролся Не буду полностью задание писать, хочу наоборот обсудить, а не чтобы за меня решили. Но побыстрее
Задача такая. Нужно создать форму, внутри формы создать 2 поля, в котором будут выводиться положение формы (название формы DesignTimeForm) относительно верха и левого края. Top и Left. Как это сделать?
Я так понимаю в процедуре TDesignTimeForm.FormCreate нужно этим полям присвоить значения. Как это сделать?
Что я неправильно делаю?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TDesignTimeForm.FormCreate(Sender: TObject);
var
  S: String;
  value: Integer;
begin
  value := TDesignTimeForm.Left;
  Str(value:10, S);
  TLeftField.Lines.Text := S;
  value = TDesignTimeForm.Top;
  Str(value:10, S);
  TTopField.Lines.Text := S;
end;
выдает ошибку
designtimeformunit.pas(53,32) Error: Only class methods, class properties and class variables can be referred with class references
на строках 6 и 9. Что это? Что делаю не так?

Добавлено через 13 минут
Погуглил нашел вот что:
Ошибка Access Violation возникает при:
....
3) На форме на onCreate вызывается что-то с других форм - эти другие формы на этот момент еще не созданы
....

Это же как раз мой случай. Как тогда быть? Мне нужно, чтобы, когда я нажму на кнопочку в главной программе, показать значения лефт и топ этого окна?
может я что-то путаю в задании?

На главной форме имеются две кнопки: Изменить и Показать. При нажатии кнопки Изменить выводятся параметры окна формы: положение на экране, размер по горизонтали и вертикали, цвет фона. С помощью мыши преобразовать эти параметры и цвет. При нажатии кнопки Показать главной формы должно быть отображено окно формы в соответствии с параметрами, записанными в файле run-time
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2012, 06:17
Ответы с готовыми решениями:

Работа с уже сконструированными классами из другого класса
Народ всем привет. Возник hiccup. Пользуюсь VS2008 Есть основной класс и несколько...

Работа с классами: массив объектов класса Complex
Здравствуйте,нужна помощь,не знаю,как из класса massiv передать значения (это 4 числа) для...

Работа с классами: создание нескольких экземпляров класса
В общем в ActionScript 3 неочень. Ситуацыя такова: Мне нужно игру на флеше написать(суть игры в...

Работа с классами (в главном классе создать указатель на экземпляр другого класса)
Недавно начал изучение С++, в частности ООП. В связи с чем у меня есть вопрос как в главном классе...

6
1 / 1 / 0
Регистрация: 14.09.2012
Сообщений: 13
03.10.2012, 08:51 2
Попробуй это сделать не в OnCreate, а в OnShow.

Добавлено через 43 минуты
Delphi
1
2
3
4
5
procedure TDesignTimeForm.FormShow(Sender: TObject);
begin
  TLeftField.Lines.Text:=IntToStr(TDesignTimeForm.Left);
  TTopField.Lines.Text:=IntToStr(TDesignTimeForm.Top);
end;
0
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
03.10.2012, 18:23  [ТС] 3
Позже проверю этот момент, сейчас нету под рукой кода той программы.
А тут что не так?
Сделал, как ты и сказал, в onshow.
Delphi
1
2
3
4
5
6
  Ini:= TiniFile.Create(extractfilepath(Application.ExeName)+'settings.ini');
  Ini.WriteString('Label1', 'Name', TDesignTime.TLabelNumber1.Font.Name);
  Ini.WriteInteger('Label1', 'Size', TDesignTime.TLabelNumber1.Font.Size);
  Ini.WriteBool('Label1', 'Italic', TDesignTime.TLabelNumber1.Font.Bold);
  Ini.WriteBool('Label2', 'Italic', TDesignTime.TLabelNumber1.Font.Italic);
  Ini.WriteBool('Label1', 'Italic', TDesignTime.TLabelNumber1.Font.Underline);
та же самая ошибка по поводу TLabelNumber1

Добавлено через 5 минут
Попробовал даже в OnClose - та же самая ошибка
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32977 / 21288 / 8175
Регистрация: 22.10.2011
Сообщений: 36,565
Записей в блоге: 8
03.10.2012, 18:31 4
Нельзя обращаться к свойствам по имени класса, нужно обращаться по имени экземпляра. Как называется экземпляр формы? DesignTimeForm1? Вот и пиши, либо
Delphi
1
Ini.WriteString('Label1', 'Name', DesignTimeForm1.LabelNumber1.Font.Name);
, либо вообще без указания экземпляра формы: поскольку метод OnShow принадлежит классу формы, то автоматически будет подразумеваться, что LabelNumber1 лежит на этой форме.
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.
Delphi
1
2
3
4
type
  TComponentManager = class(TObject)
  LinkLabel1:TLabelNumber1;
  end;
вот мой код. тут же выдал ошибку Error: Identifier not foun "TLabelNumber1", умом понимаю, что он не видит экземпляра TLabelNumber1, как сделать, чтобы увидел.
Когда увидит что дальше то делать
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32977 / 21288 / 8175
Регистрация: 22.10.2011
Сообщений: 36,565
Записей в блоге: 8
03.10.2012, 20:26 6
Цитата Сообщение от VladSharikov Посмотреть сообщение
как я понял, она должна содержать то же, что и форма design time, но только взяв информацию из файла
Правильно понимаешь. Одну форму ты создаешь в дизайнере, потом сохраняешь всю информацию о ее компонентах в INI, и создаешь новую форму, с динамическим созданием компонентов (имеющих свойства, которые будут читаться из INI).

Цитата Сообщение от VladSharikov Посмотреть сообщение
Я так понял нужно :
создать новый файл, внутри описать класс, который будет содержать ссылки на все объекты.
Я не думаю. Тебе надо создать такую структуру, чтобы ты, не зная изначально, что у тебя будет в 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++ и понимаю, что, вы говорите по поводу
Представь ситуацию: твой преподаватель положит на дизайн-тайм форму какой-нибудь TBitBtn, пересоберет программу и запустит ее. А ты на TBitBtn не рассчитывал. Твое приложение тут же вылетит, если жестко будут записаны все типы, а того, которого надо - не будет. А если рассчитывать не на конкретные типы. а на любых потомков TComponent-а, то всё будет работать безо всяких сбоев (если напишешь правильно ).
я не понимаю как это сделать и даже не понимаю, что надо прочитать, чтобы понять
0
03.10.2012, 20:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2012, 20:37
Помогаю со студенческими работами здесь

Замена в строке всех слов, совпадающих с именами заданных переменных, значениями этих переменных
добрый день. подскажите пожалуйста, можно ли на бате реализовать следущее: @echo off cls ...

Реализация работы с классами, конструктор, методы класса и переменные класса
Всем привет, решил изучать Java. Нашел прикольное задание : Реализовать класс, представляющий...

Передача переменных между классами.
Имеется класс QtPkkNetConf и в нем созданы еще 3 класса привязанные к табам соответственно. ...

Передача переменных между классами
Есть Main.java и Settings.java Settings.java содержит: public void onCreate(Bundle...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru