Работа со списком строк |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Работа со списком строк |
18192123 |
23.04.2008 18:07
Сообщение
#1
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Требуется разработать программу для работы со списками строк. Структура объектов пользовательского класса следующая:
Кадры: имя,номер цеха, разряд; Список содержит строки с идентификатором объекта и связанной со строкой объект. Для визуализации списка используется компонент TListBox. Предусмотреть создание, просмотр и редактирование объектов, а так же сохранение объектов в файле и их загрузку из файла. Во-первых, объясните пожалуста, что имеется ввиду под: "Список содержит строки с идентификатором объекта и связанной со строкой объект" и как это можно осуществить? Ещё проблема с определением в главном модуле класса объектов (Кадры: имя,номер цеха, разряд), размещаемых в списке...(сначало нужно опредилить объект, а потом класс этих объектов или как?? покажите пожалуста на моём примере..) Причём в классе требуется определить конструктор вида:
|
18192123 |
23.04.2008 20:32
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Вот что получилось:
Только не знаю, получиться ли таким образом предусмотреть выполнение всего, что нужно по заданию...И как теперь это всё связать с ListBox? |
18192123 |
3.05.2008 20:22
Сообщение
#3
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Объясните пожалуста, в чём ошибка..не компилится приложение без ошибок..
а ошибки такие: [Error] Unit5.pas(10): Unsatisfied forward or external declaration: 'TPeople.GetName' [Error] Unit5.pas(11): Unsatisfied forward or external declaration: 'TPeople.SetName' [Error] Unit5.pas(12): Unsatisfied forward or external declaration: 'TPeople.GetWorkshop' [Error] Unit5.pas(13): Unsatisfied forward or external declaration: 'TPeople.SetWorkshop' [Error] Unit5.pas(14): Unsatisfied forward or external declaration: 'TPeople.GetRange' [Error] Unit5.pas(15): Unsatisfied forward or external declaration: 'TPeople.SetRange' [Error] Unit5.pas(22): Unsatisfied forward or external declaration: 'TPeople.Create' [Error] Unit5.pas(23): Unsatisfied forward or external declaration: 'TPeople.Destr' |
volvo |
3.05.2008 20:34
Сообщение
#4
|
Гость |
Ошибка - в том, что ты не приводишь реализацию методов, а только описываешь их... Этого недостаточно.
|
18192123 |
3.05.2008 21:41
Сообщение
#5
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Ошибка - в том, что ты не приводишь реализацию методов, а только описываешь их... Этого недостаточно. Вот что я добавила..Снова ошибки..
[Error] Unit5.pas(45): Undeclared identifier: 'fName' [Error] Unit5.pas(50): Undeclared identifier: 'fWorkshop' [Error] Unit5.pas(55): Undeclared identifier: 'fRange' [Error] Unit5.pas(60): Undeclared identifier: 'fName' [Error] Unit5.pas(65): Undeclared identifier: 'fWorkshop' [Error] Unit5.pas(70): Undeclared identifier: 'fRange' [Hint] Unit5.pas(7): Private symbol 'fName' declared but never used [Hint] Unit5.pas(8): Private symbol 'fWorkshop' declared but never used [Hint] Unit5.pas(9): Private symbol 'fRange' declared but never used [Error] Unit5.pas(10): Unsatisfied forward or external declaration: 'TPeople.GetName' [Error] Unit5.pas(11): Unsatisfied forward or external declaration: 'TPeople.SetName' [Error] Unit5.pas(12): Unsatisfied forward or external declaration: 'TPeople.GetWorkshop' [Error] Unit5.pas(13): Unsatisfied forward or external declaration: 'TPeople.SetWorkshop' [Error] Unit5.pas(14): Unsatisfied forward or external declaration: 'TPeople.GetRange' [Error] Unit5.pas(15): Unsatisfied forward or external declaration: 'TPeople.SetRange' [Error] Unit5.pas(22): Unsatisfied forward or external declaration: 'TPeople.Create' [Error] Unit5.pas(23): Unsatisfied forward or external declaration: 'TPeople.Destr' [Fatal Error] Project1.dpr(9): Could not compile used unit 'Unit5.pas' Сообщение отредактировано: 18192123 - 3.05.2008 21:42 |
volvo |
3.05.2008 22:02
Сообщение
#6
|
Гость |
Ты добавила просто процедуры/функции, а надо было добавлять методы класса:
function TPeople.GetName:string; |
18192123 |
4.05.2008 23:24
Сообщение
#7
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Итак, продолжу задавать вопросы)
На 1-й форме у меня два ListBox..По нажатию кнопки "Добавить" вызывается ещё одна форма (2-я)..Начала работать над добавлением..Перед этим добавила конструктор для моего класса TPeople:
Теперь оработчик события "нажатие кнопочки добавить на 2-й форме", где и возникла проблема:
И вот такие однотипные ошибки: [Error] Unit2.pas(38): Undeclared identifier: 'fName' [Error] Unit2.pas(38): Undeclared identifier: 'fRange' Объясните пожалуста, в чём дело? |
volvo |
5.05.2008 0:12
Сообщение
#8
|
Гость |
Можно задать тебе один вопрос: что ты делаешь вот тут:
Цитата constructor TPeople.Create(fName:string;fWorkshop:integer;fRange:integer); |
18192123 |
5.05.2008 0:34
Сообщение
#9
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
|
volvo |
5.05.2008 0:43
Сообщение
#10
|
Гость |
Я не заметил этого... Ты просто заносишь в параметры конструктора нулевые значения. Да и вообще, тогда зачем передавать что-то в конструктор, если все равно все инициализируется нулями?
Вот так сделай: constructor TPeople.Create(AName: string; AWorkshop: integer; ARange:integer);, а при вызове подставляй фактические параметры. Скажем, NewPeople:=TPeople.Create('Ivanov', 10, 100); |
18192123 |
8.05.2008 17:45
Сообщение
#11
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
И снова здраствуйте!
В процессе работы у меня возникла проблема с несоответствием типов (TObject и созданного TPeople)...Подскажите пожалуста, как это исправить.. Ситуация вот такая: на Form1 - ListBox1 со списком объектов (фамилии рабочих)..Более подробную информацию об объекте будем просматривать на Form3..
|
volvo |
8.05.2008 18:24
Сообщение
#12
|
Гость |
Погоди... Я не понял, что происходит? Ты описываешь CurPeoPle, так? Откуда берутся PeopleName, PeopleWorkshop и PeopleRange? Где происходит создание экземпляра CurPeople (в смысле, вызов его конструктора)?
Добавлено через 11 мин. Может, ты имела в виду вот это: procedure TForm3.BitBtn1Click(Sender: TObject);? Но учти, что если экземпляры объектов TPeople неправильно связаны с ListBox-ом, то последствия будут непредсказуемые... |
18192123 |
8.05.2008 18:40
Сообщение
#13
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Погоди... Я не понял, что происходит? Ты описываешь CurPeoPle, так? Откуда берутся PeopleName, PeopleWorkshop и PeopleRange? Где происходит создание экземпляра CurPeople (в смысле, вызов его конструктора)? Это всё было попыткой обратиться к уже существующему объекту..Конструктор для CurPeople нигде не вызывается..PeopleName, PeopleWorkshop и PeopleRange - поля текущего объекта..т.е. моей целью сейчас является показать подробную ин-ю(ФИО, Цех, Разряд) об объекте, выделенном в ListBox1 на Form1. |
18192123 |
9.05.2008 22:03
Сообщение
#14
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Это всё было попыткой обратиться к уже существующему объекту..Конструктор для CurPeople нигде не вызывается..PeopleName, PeopleWorkshop и PeopleRange - поля текущего объекта..т.е. моей целью сейчас является показать подробную ин-ю(ФИО, Цех, Разряд) об объекте, выделенном в ListBox1 на Form1. Исправила следующим образом (хочу получить на отдельной форме Form3 подробную ин-цию об объекте, выделенном на Form1 в ListBox1):
Возникла ошибка: [Error] Unit3.pas(36): Incompatible types: 'TPeople' and 'TObject' [Fatal Error] Project1.dpr(9): Could not compile used unit 'Unit3.pas' Подскажите пожалуста, правильно ли я вообще делаю и как "бороться" с несоответствием типов? |
volvo |
10.05.2008 0:36
Сообщение
#15
|
Гость |
Я показал тебе в предыдущем сообщении, что надо сделать приведение типа (в таком случае, действительно, конструктор не нужен)... Тут вопрос в другом: как ты заносишь информацию в Objects? Если это делается неправильно, то чтение, естественно, работать не будет (а вот при занесении класса в список Objects конструктор как раз обязателен)...
Так что, показывай код, где к ListBox-у присоединяешь данные... |
18192123 |
10.05.2008 2:29
Сообщение
#16
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Я показал тебе в предыдущем сообщении, что надо сделать приведение типа (в таком случае, действительно, конструктор не нужен)... Тут вопрос в другом: как ты заносишь информацию в Objects? Если это делается неправильно, то чтение, естественно, работать не будет (а вот при занесении класса в список Objects конструктор как раз обязателен)... Так что, показывай код, где к ListBox-у присоединяешь данные... Не знаю, насколько правильно я сделала - но заработало)
|
18192123 |
10.05.2008 17:48
Сообщение
#17
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
У меня появился ещё один вопрос..
Пусть на Form3 мы получили подробную информацию об объекте и теперь хотим внести здесь изменения, которые должны соответственно отразиться на этом объекте в ListBox1.. Ну и собственно вопрос: покажите пожалуста, как внести изменения в уже существующий объект? Сообщение отредактировано: 18192123 - 10.05.2008 17:49 |
volvo |
10.05.2008 18:56
Сообщение
#18
|
Гость |
Цитата как внести изменения в уже существующий объект? Точно так же: получаешь сам объект и изменяешь его:procedure TForm3.BitBtn2Click(Sender: TObject); Сообщение отредактировано: volvo - 10.05.2008 18:56 |
18192123 |
10.05.2008 19:47
Сообщение
#19
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Точно так же: получаешь сам объект и изменяешь его: ... Спасибо большое!!) С этим понятно. Мне вот ещё не совсем ясно про случай с удалением объёкта из списка..Не до чего лучше пока не додумалась:
т.е сделала аналогично редактированию..но строка, хоть и пустая в ListBox-е всё-равно остаётся..И сделать именно удаление соответственно не получается.. Подскажите пожалуста, как должно быть?? |
volvo |
10.05.2008 20:00
Сообщение
#20
|
Гость |
Ты не удаляешь строку, и естественно не удаляешь объект TPeople...
В Хелпе сказано: Цитата(BDS Help) Call Delete to remove a single string from the list. If an object is associated with the string, the reference to the object is removed as well. , соответственно, достаточно:.... При этом будет удалена как сама строка из ListBox-а, так и связанный с ней Object... Сообщение отредактировано: volvo - 10.05.2008 20:02 |
Текстовая версия | 8.06.2024 16:17 |