|
33 / 33 / 10
Регистрация: 28.12.2016
Сообщений: 99
|
||||||||||||||||
RAD 2009-XE2 Первый раз пишу класс07.09.2018, 17:22. Показов 2032. Ответов 14
Метки нет (Все метки)
Об этом вопросе я говорил и здесь.
Я пытаюсь первый раз написать класс. У меня не получается объявлять свойства property с зарезервированными словами read и write. Поля и методы класса я описывать умею на самом простом уровне. Покажу это на простом примере. Пример. На форме Form1 расположены два текстовых поля Edit1 и Edit2. В текстовом поле Edit2 отображается тот же текст, что и в текстовом поле Edit1 (текст в Edit2 меняется вместе с редактированием текста в Edit1). Самый простой способ решения данной задачи (без использования класса).
Я сейчас прекращаю решать данную задачу, и запишу ещё один примитивный код, который не работает.
Код методов function TMyClass.GetField и procedure TMyClass.SetField(Value:Integer) класса я оставил пустым, так как я ещё до конца не решил, что мне в них надо писать. Компилятор выдаёт ошибки Всё. Дальше я сам ничего сделать не могу. Природу этих ошибок я не понимаю. И не понимаю, обязательно ли в методе procedure TMyClass.SetField(Value:Integer) нужен параметр Value:Integer. Помогите, пожалуйста, разобраться.
0
|
||||||||||||||||
| 07.09.2018, 17:22 | |
|
Ответы с готовыми решениями:
14
Пишу класс первый раз пишу программу. Ребята как она пишется? кому не сложно создайте Посоветуйте, подскажите...пишу свой первый сайт |
| 07.09.2018, 17:40 | ||||||||
|
а
используйте нормальную версию и литературу
1
|
||||||||
|
33 / 33 / 10
Регистрация: 28.12.2016
Сообщений: 99
|
|||||||||||||
| 07.09.2018, 20:27 [ТС] | |||||||||||||
|
Я исправил Integer на String и всё заработало.
Подскажите, пожалуйста,
0
|
|||||||||||||
| 08.09.2018, 12:46 | ||||
|
0
|
||||
|
33 / 33 / 10
Регистрация: 28.12.2016
Сообщений: 99
|
||||||
| 09.09.2018, 18:15 [ТС] | ||||||
|
Вот пример программы. На форме Form1 расположен комбинированный список ComboBox1 и два текстовых поля Edit1 и Edit2. Элементами комбинированного списка ComboBox1 являются числа от 0 до 10. В начале выполненя программы значения текстовых полей нули. Во время выполнения программы при смене элемента списка в текстовом поле Edit1 отображается выбранный элемент, второе текстовое поле является сумматором сменяемых выбранных элементов списка ComboBox1.
Вопрос такой. Какой смысл в параметр Value, ведь я его не обязан использовать. И почему сделано так, что такие методы класса нельзя описывать без параметров, или более чем с одним параметром?
0
|
||||||
|
|
|
| 09.09.2018, 20:58 | |
Сообщение было отмечено _Саша_ как решение
Решение
стоп. это не простой метод
этот метод обеспечивает функционирование такого свойства языка как property property это просто подстановка вместо aaa := Value подставляется SetAAA(Value) а вместо bbb := aaa подставляется bbb := GetAAA(); ясно же что параметр Value здесь необходим. это правая сторона выражения aaa := Value
1
|
|
|
33 / 33 / 10
Регистрация: 28.12.2016
Сообщений: 99
|
||||||
| 09.09.2018, 21:28 [ТС] | ||||||
|
krapotkin понял.
Значит, предыдущий код можно переписать более грамотно
0
|
||||||
|
Злостный нарушитель
10340 / 5758 / 1269
Регистрация: 12.03.2015
Сообщений: 26,593
|
|||||||||||
| 09.09.2018, 23:01 | |||||||||||
|
Может просто дать ТСу кусок рабочего исходника, где всё это есть?
Кликните здесь для просмотра всего текста
1
|
|||||||||||
|
33 / 33 / 10
Регистрация: 28.12.2016
Сообщений: 99
|
|||||||||||
| 10.09.2018, 00:29 [ТС] | |||||||||||
|
Verevkin за исходники спасибо, но я пока лучше буду разбираться с моей программой. Там код маленький, а значит мне с ним проще разобраться.
qwertehok, учитывая Ваше второе замечание, я исправил код. Также я класс описал в другом модуле.
0
|
|||||||||||
|
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,611
|
|
| 10.09.2018, 02:46 | |
|
_Саша_, ваш код нужно выбросить на помойку!
В методе класса не должно быть ссылок на экземпляр класса.! За исключением Self. А уж упоминания форм - это вообще перебор! Это даже не двойка, а единица.
0
|
|
|
|
|
| 10.09.2018, 06:20 | |
|
методы класса прекрасно осведомлены о других методах и полях этого класса, поэтому не требуется писать
Self.AAA, нужно просто писать AAA структура связанности модулей должна быть древовидной если Unit1 uses Unit2 то не должен Unit2 uses Unit1 из этого правила конечно бывают исключения но они называются костыли Добавлено через 1 минуту попробуйте словами описать то, что хотели сделать, тогда вам подскажут решение, чтобы в левых классах не упоминались никакие формы
0
|
|
|
Злостный нарушитель
10340 / 5758 / 1269
Регистрация: 12.03.2015
Сообщений: 26,593
|
||
| 10.09.2018, 08:14 | ||
|
0
|
||
|
33 / 33 / 10
Регистрация: 28.12.2016
Сообщений: 99
|
||||||||||||||||||||||
| 10.09.2018, 16:02 [ТС] | ||||||||||||||||||||||
В результате обсуждения данного вопроса появились и замечания по поводу моего безграмотного кода. У меня была написана программа, состоящая из модуля формы и 13 модулей, которые обрабатывали информацию введённую на форме. Переменные (данные) были глобальными и хранились в отдельном модуле. Модуль формы ссылался на некоторые другие модули, часть из которых ссылалась на модуль формы (они брали информацию с формы) (костыли). Да, программа написана безграмотно, но она работает корректно, что было проверено десятки раз. Я её собираюсь дописывать, но чтобы в данных, подпрограммах и модулях не запутаться, я решил данные и подпрограммы объединить вместе в класс (переписать программу). Плюс к этому мне и свойства будут помогать, не нужно будет вызывать некоторые методы класса (они будут автоматически вызываться, как методы GetAAA и SetAAA(Value:тип)). У меня будет дерево классов. И в зависимости от того, какую задачу будет решать программа, программа будет работать с определённым наследником класса. Да, у меня методы класса будут обращаться к форме. Эти классы будут предназначены только для этой моей программы, в других программах их невозможно будет использовать. Что получится - не знаю. Но хочу попробовать. Я улучшил код своей программы, в моём понимании, добавив секции класса. Модуль описания класса
Модуль формы программы
0
|
||||||||||||||||||||||
|
|
|||||||||||||||||||||
| 10.09.2018, 16:33 | |||||||||||||||||||||
Сообщение было отмечено _Саша_ как решение
Решение
есть принятые соглашения, которые помогают читать ваш код и вам и особенно другим
Например, не-Public поля класса начинаются с большой буквы F FIntItemIndex, FIntCountNumbers. Это кстати и поможет вам не писать все время Self ну и по-прежнему, новичок вы или эксперт, нельзя в методе класса использовать ссылку на конкретную переменную другого класса Form1 то что ваша программа "работает", ничуть не меняет дела если вы хотите, чтобы при изменении свойства в вашем классе, что-то происходило вовне, вам требуется как огромном количестве известных вам уже классов Delphi сделать СОБЫТИЕ onChange
т.к. обработчик будет вызывать форму, значит она должна уже быть создана... при этом я вообще не понимаю, что за хитроумная логика в строке inc(FIntCountNumbers, FIntItemIndex); имхо дичь какая-то, но мало ли...
1
|
|||||||||||||||||||||
| 10.09.2018, 16:33 | |
|
Помогаю со студенческими работами здесь
15
Дважды вычислить значение выражение, первый раз используя процедуру, а второй раз-функцию Сокеты ну и Networkstream, раз пишу в .Нет наверное сюда ;) Пишу проект по PYTHON, 8 класс Класс можно сконструировать, но это не первый класс в файле
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|