![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
Максим1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 21.3.2011 Репутация: нет Всего: нет |
Здравствуйте! Я являюсь новичком как в Delphi, так и на форуме. Нуждаюсь в помощи в выполнении лабораторной работы. Она практически сделана, но есть некоторые вопросы.
Есть задание и есть мое выполнение (прикрепляю). Как правильно запрограммировать кнопку «Открыть файл», чтобы после ввода в Edit имени ранее созданного файла, при нажатии на кнопку таблица заполнялась автоматически? Присоединённый файл ( Кол-во скачиваний: 8 ) ![]() |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 9 Всего: 58 |
А там вроде есть код, он не работает как нужно?
|
|||
|
||||
Romkin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 14.11.2006 Где: Москва Репутация: нет Всего: 5 |
Код можно было и сюда кинуть, с тегами. Форматирование ужасное.
Вот, взял на себя смелость отформатировать, плюс переименовал тип film в TFilm, чтобы не путаться:
Чтение файла вроде бы должно работать, главное чтобы файл был, поскольку сохранения его у тебя нет. Добавлено через 4 минуты и 36 секунд Кстати, а какое задание-то? ![]() |
|||
|
||||
Максим1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 21.3.2011 Репутация: нет Всего: нет |
Уважаемые господа!
Извиняюсь перед всеми за долгое молчание. Просто долго не было ответа и я подумал что не так и дождусь его. Ну во-первых, я должен всё-таки показать своё задание. (Сразу два файла к моему сообщению почему-то не прикрепились) Во-вторых, извините уж, но я не знаю как кидать код с тегами, поэтому решил так вот написать. В-третьих, помимо той проблемы, которую я описал ранее, где-то есть ещё ошибка в моём коде, но я её не вижу, а именно. После компиляции, после того как выбираю из списка Combobox1 какой-либо фильм, заполняю его поля, заношу их в таблицу кнопкой "Вывести в таблицу" происходит ужасное! Следующий выбранный фильм стирает название в предыдущей строке! Вообщем, программа как-то криво работает Надеюсь на подсказку. Это сообщение отредактировал(а) Максим1989 - 24.3.2011, 21:28 Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
|||
|
||||
Romkin |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 14.11.2006 Где: Москва Репутация: нет Всего: 5 |
Ну вот. Задание получше, чем ожидалось.
Где поле дата/время? Подразумевается TDateTime, а не integer ![]() Где поле с маской ввода?
Воообще, переменная в разделе var ограничивает. FV - как раз и есть файл записей. Но тогда зачем ты работаешь с f:textfile? Это не нужно, вся работа должна быть с FV.
Собственно, это и все резюме задания. Как я понял, выбрана "Видеотека". В общем, везде где работа идет с f: textfile - код неверен. |
||||||
|
|||||||
Максим1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 21.3.2011 Репутация: нет Всего: нет |
1. А Edit-ы - разве не поле с маской ввода?
2. Под TDateTime подразумевается TDateTimePicker на вкладке Win32 ? (У меня установлен Delphi2009) |
|||
|
||||
Romkin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 14.11.2006 Где: Москва Репутация: нет Всего: 5 |
Нет, есть TMaskEdit, неплохо подходит для ввода времени. Впрочем, как и TDateTimePicker, у него кстати тонкость: если надо ввести только время то дату надо обнулить, и наоборот. Выдает он именно TDateTime. TDateTime - такой же элементарный тип, как и integer. Хранит дату и время. Год выпуска - как минимум word, сейчас 21 век, а не первый-второй ![]() Поле time - это что, длительность? Так и назвать. Дальше. Задание прямо диктует действия, которые надо реализовать. Каждое действие надо оформить как минимум отдельной процедурой. То есть, должны быть методы: 1. Создание файла. Вход - имя файла. 2. Чтение файла (можно сразу в грид) Вход - имя файла, переменная-грид. 3. Модификация записи в файле. Вход - переменная файла (это FV), номер записи, сама запись. 4. Чтение отдельной записи из файла по ее порядковому номеру. Вход переменная файла, номер. Результат функции - запись. 5. Закрытие файла. Вход - переменная файла. 6. Добавление записи (в конец, думаю достаточно). Вход - переменная файла, запись. 7. Удаление записи. На самом деле самый сложный. Вход - переменная файла, номер записи. Все. Для лабораторной этого достаточно. Добавил/удалил запись - тупо перечитай весь файл. Собственно, п.4 тоже необязателен. А потом добавляешь кнопки, которые вызывают нужный метод с нужными параметрами. |
|||
|
||||
Максим1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 21.3.2011 Репутация: нет Всего: нет |
Спасибо за советы! В данный момент сижу и пытаюсь все их реализовать. Но, честно говоря, дело идет со страшным скрипом, т.к. я успел изучить в основном только компоненты со вкладки стандарт, и сейчас пытаюсь ускоренно понять свойства и назначение других компонентов.
|
|||
|
||||
Romkin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 14.11.2006 Где: Москва Репутация: нет Всего: 5 |
Компонентов достаточно уже. Цель лабораторной - работа с файлами, ее и надо изучать. Открытие файла, позиционирование в нем и т.д. Да, переменная файла должна передаваться в метод через var всегда, это давнее условие.
Перечень процедур для работы с файлами: Standard Routines and I/O Если память не изменяет, Seek для типизованного файла перемещает именно на размер записи, т.е. Seek(0) - первая запись, Seek(9) - десятая. И надо бы два метода, которые переводят позицию в гриде в номер записи и обратно. Это просто: номер записи = номер выбранной строки минус FixedRows. Простые методы, зато не запутаешься. Добавлено через 12 минут и 52 секунды Еще, если пишешь прямо в форме, как и выше, то метод обновления записи в файле должен выглядеть примерно так (псевдокод): RecNo := GetRecNo(Grid) //Именно выделенная строка минус величина заголовка грида, получили порядковый номер Rec := CollectRecord; //Сборка записи из всех эдитов в TFilm //Есть номер и запись, записать: WriteRecord(FV, Rec, RecNo); //Теперь просто обновить запись в гриде, стоим на нужной строке UpdateGrid(Grid, Rec); Соответственно, чтение всего файла примерно так: в цикле Rec := ReadRecord(FV); Выделяем очередную строку в гриде UpdateGrid(Grid, Rec);// пихаем значения из Rec в текущую строку в гриде Все очень ориентировочно ![]() |
|||
|
||||
Максим1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 21.3.2011 Репутация: нет Всего: нет |
Спасибо! Как только все эти указания применю, я обязательно покажу свою отредактированную работу
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |