Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с файлами
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Искатель
Здравствуйте! Очень нуждаюсь в помощи знатоков в Делфи! (Стыдно спрашивать, но не некуда деваться – я пока ещё учусь)
В результате титанических усилий мне удалось создать некое подобие того, что должно быть. А именно – пытаюсь выполнить лабораторку «Работа с файлами», но плохо получается. Если можно не смейтесь надо мной.
1. После запуска компилятора почему-то не отображаются заголовки столбцов!
2. Не знаю, как правильно запрограммировать такие кнопки (белеберда какая-то получается):
«Открыть файл» (т.е. ранее созданный файл)
«Вывести в таблицу» (т.е. при нажатии на кнопку, введенные в Edit-ах данные появлялись в строку. Здесь у меня вроде сначала получилось, но потом я понял, что сделал неправильно)
«Добавить запись» (т.е. после заполнения Edit-ов и нажатия на кнопку заполнялась бы следующая строка в таблице)
«Удалить запись»: (при нажатии удалить выделенную! строку со сдвигом нижних строк вверх, к заголовку)
Подскажите, если можно, где я напортачил ?
volvo
Цитата
1. После запуска компилятора почему-то не отображаются заголовки столбцов!
Заголовки и не должны появляться после запуска компилятора. После компиляции и запуска программы - возможно. Но для этого присвоение заголовкам значений нужно сделать в событии OnCreate формы, а не по клику на СтрингГрид, и не по клику на кнопку:

procedure TForm1.FormCreate(Sender: TObject);
begin
stringgrid1.Cells[0,0]:='Название фильма';
stringgrid1.Cells[1,0]:='Жанр';
stringgrid1.Cells[2,0]:='Страна';
stringgrid1.Cells[3,0]:='Год выпуска';
stringgrid1.Cells[4,0]:='Продолжительность';

StringGrid1.RowCount := 2;
StringGrid1.FixedRows := 1;

// Это для того, чтоб в таблице выделялась целая строка, а не одна ячейка
StringGrid1.Options := StringGrid1.Options + [goRowSelect];
end;


Цитата
2. Не знаю, как правильно запрограммировать такие кнопки
По кнопке "Вывести в таблицу". Для начала, посмотри внимательно на предыдущую процедуру. Я там не просто так выставил 2 строки в таблице, и одну - фиксированную. Теперь добавление данных к таблице можно сделать так::
procedure TForm1.Button2Click(Sender: TObject);
begin
with StringGrid1 do
begin
Cells[0, RowCount-FixedRows]:=Edit1.text;
Cells[1, RowCount-FixedRows]:=Edit2.text;
Cells[2, RowCount-FixedRows]:=Edit3.text;
Cells[3, RowCount-FixedRows]:=Edit4.text;
Cells[4, RowCount-FixedRows]:=Edit5.text;
RowCount := RowCount + 1;
end;
end;
Всё. Больше ничего здесь быть не должно. Никакой работы с файлами. Задача этого обработчика - добавить данные в таблицу (это то, что написано на кнопке), а не открыть зачем-то еще текстовый файл, а потом его закрыть. Для работы с файлом существуют другие обработчики. Каждый занимается строго своим делом, иначе будет бардак.

Цитата
«Добавить запись» (т.е. после заполнения Edit-ов и нажатия на кнопку заполнялась бы следующая строка в таблице)
Следующая строка в таблице теперь заполняется при нажатии на "Вывести в таблицу". Кнопку "Добавить запись" можешь убрать.

Цитата
«Удалить запись»: (при нажатии удалить выделенную! строку со сдвигом нижних строк вверх, к заголовку)
Как это сделать написано в " Drkb -> VCL -> StringGrid -> Удаление и добавление столбцов и колонок -> Вставка и удаление строк в StringGrid "

А метод TStringGrid.OnClick вообще убери, он не нужен, только мешает пользователю. Если нужно менять ширину столбцов - то делай это тоже при создании формы...
Искатель
Спасибо огромное! Сижу, колдую над проектом...
Искатель
После выполнения всех инструкций часть проблем устранилась, спасибо!
Люди добрые! Подскажите, как связать компонент ComboBox1 с Edit-ами и таблицей. Т.е. чтобы после выбора из раскрывающегося списка какого-то фильма и заполнения полей в таблице отпечатывалась новая строка с этим фильмом.
Я вроде бы всё это прописал, но идет подчеркивание красной линией и компилятор не запускается.
volvo
Не путай сравнение и присваивание. В логических условиях используется именно сравнение, причем компилятор тебе об этом говорит. Убери двоеточие. И еще: не путай латинские и русские символы. У тебя первая буква в

comboBox1.ItemIndex:=0;
(обработчик FormCreate) - русская. Это не будет компилироваться. Исправь на латинскую.
Искатель
Спасибо! good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.