![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Помогите с написанием комментарии к листингу программы. Надо почти к каждой процедуре или функции написать комментарий. Необязательно к каждой строчке.
Код:
procedure TMainForm.ToolButton8Click(Sender: TObject);
var F: TextFile;
i: Integer;
begin
try
with SaveDlg, PersonsList.Items do
begin
if Not Execute then Exit;
SaveToFile(FileName);
AssignFile(F, Copy(FileName,1,Length(FileName)-4)+'.lso');
Rewrite(F);
for i := 0 to Count - 1 do
if Objects[i] <> Nil then
begin
Writeln(F, (Objects[i] as THuman).FirstName);
Writeln(F, (Objects[i] as THuman).LastName);
Writeln(F, (Objects[i] as THuman).Age);
Writeln(F, (Objects[i] as THuman).Document);
Writeln(F, (Objects[i] as THuman).Address);
Writeln(F, (Objects[i] as THuman).Phone);
end;
CloseFile(F);
end;
except
on E: EFOpenError do ShowMessage('Ошибка открытия файла');
end;
end; |
|
#2
|
|||
|
|||
|
Код:
//Начало подрограммы "Нажатие на тулбаттон8"
procedure TMainForm.ToolButton8Click(Sender: TObject);
//объявление переменных
var F: TextFile;// переменная типа текстовый файл
i: Integer;//перемененная типа целое
begin
try // попытаемся сделать
with SaveDlg, PersonsList.Items do // использовать диалог сохранения и список
begin
if Not Execute then Exit; // если в диалоге нажали "Отмену" - выйдем
// если не нажимали "отмену" в диалоге
SaveToFile(FileName);//сохраняем в файл с именем, которое выбрали в диалоге
AssignFile(F, Copy(FileName,1,Length(FileName)-4)+'.lso'); // связываем переменную типа файл с файлом, имя которого состоит из имени сохраненного без 4 последних символов с расширение lso
Rewrite(F);// открываем файл на запись
for i := 0 to Count - 1 do // по всему списку
if Objects[i] <> Nil then // если объект существует
begin //пишем поля объекта в файл построчно
Writeln(F, (Objects[i] as THuman).FirstName);
Writeln(F, (Objects[i] as THuman).LastName);
Writeln(F, (Objects[i] as THuman).Age);
Writeln(F, (Objects[i] as THuman).Document);
Writeln(F, (Objects[i] as THuman).Address);
Writeln(F, (Objects[i] as THuman).Phone);
end;//конец пишем поля объекта в файл построчно
CloseFile(F);//закрываем файл
end;
except // если что-то не так пошло
on E: EFOpenError do ShowMessage('Ошибка открытия файла'); // конкретно не получилось файл открыть - показываем сообщение
end;//конец "попытаемся сделать"
end;//конец подпрограммы |
|
#3
|
||||
|
||||
|
спасибо xchrom. Ещё один вопрос как описать вот эту процедуру
Код:
begin if ItemIndex = -1 then Exit; if not Assigned(Objects[ItemIndex]) then Objects[ItemIndex] := THuman.Create(Items[ItemIndex]); with Objects[ItemIndex] as THuman do |
|
#4
|
|||
|
|||
|
Что-то не видно в приведенном коде никакой процедуры - ее кусок разве. Нельзя ли окошко отворить пошире, чтобы увидеть хотя бы к какому компоненту относится свойство ItemIndex.
|
|
#5
|
||||
|
||||
|
Конечно можно
Код:
procedure TMainForm.ToolButton2Click(Sender: TObject); begin with PersonsList, PersonsList.Items do //использовать список и элементы списка begin if ItemIndex = -1 then Exit; if not Assigned(Objects[ItemIndex]) then Objects[ItemIndex] := THuman.Create(Items[ItemIndex]); with Objects[ItemIndex] as THuman do begin FNameEdit.Text := FirstName; LNameEdit.Text := LastName; AgeEdit.Value := Age; DocEdit.Text := Document; AddrEdit.Text := Address; PhoneEdit.Text := Phone; //делаем все Edit активными для редактирования FNameEdit.Enabled := true; LNameEdit.Enabled := true; AgeEdit.Enabled := true; DocEdit.Enabled := true; AddrEdit.Enabled := true; PhoneEdit.Enabled := true; end; end; end; и сразу возникает другой вопрос что значит вот это, что за constructor Код:
constructor THuman.Create(AName: String); begin inherited Create; FirstName := AName; end; |
|
#6
|
|||
|
|||
|
По последнему вопросу.
THuman - это, скорее всего, самодельный класс (где-то объявленный и, судя по работе с ним в процедуре TMainForm.ToolButton2Click, какая-то форма - от TForm) и при конструировании его экземпляра в его поле FirstName передается строка (видимо, с фамилией). Да, но, скорее всего если это форма, то метод Create перекрыт, иначе в этом методе должен присутствовать обязательный параметр AOwner : TComponent. Т.е. ясности что за класс THuman нет. А в TMainForm.ToolButton2Click проверяется не пустой ли список (скорее всего TListBox'а) конструкцией "if ItemIndex = -1" и, если не пустой, то создается форма (класс THuman). При создании в метод Create передается отмеченная в PersonsList строка. Далее поля формы заполняются значениями и открываются для редактирования. Что дальше происходит из процедуры не ясно. Последний раз редактировалось san-46, 21.06.2008 в 10:29. |
|
#7
|
||||
|
||||
|
да, ты прав
Код:
THuman = class
FirstName: String;
LastName: String;
Age: Integer;
Document: String;
Address: String;
Phone: String;
constructor Create(AName: String);
end; ToolButton2Click в программе эта кнопка означает "изменить". И если я правильно понял то, сначала проверяется выделена ли строка в PersonsList (это Memo1). И если она выделена, то создаётся форма. Потом в метод create передаётся отмеченная строка. И как ты сказал поля заполняются и открываются для редактирования. А ты в принципе всю процедуру и описал. Так теперь у меня последняя проблема это написание блок-схемы. Самое противное когда не имеешь представления как её делать. |
|
#8
|
|||
|
|||
|
Хм. Если класс THuman такой как ты его показал, то бессмысленность присвоения полям формы (FNameEdit.Text := FirstName; и т.д) очевидна. Экземпляр класса THuman только что создан и, естественно, значения его полей равны '', т.е. пустые. Можно было бы просто сделать так: FNameEdit.Text := ''; - будет одно и то же.
Как я тебя понимаю по поводу блок-схемы - сроду не составлял никаких блок-схем. А при ООП программирование они вообще не катят - это же не линейное программирование, где можно кубиками и ромбиками описАть ход выполнения программы. Можно сказать, блок-схемы - это атавизм, который до сих пор консервативные преподаватели упорно пытаются навязывать студентам, но при этом обучают их объектно-ориентированному программированию, что, одно с другим не совместимо.Да, еще. В TMemo нет свойства Items и, естественно, нет ItemIndex. Это, скорее всего TListBox (или TComboBox). Последний раз редактировалось san-46, 21.06.2008 в 11:07. |
|
#9
|
||||
|
||||
|
У меня как раз надо описать ход выполнения программы кубиками и ромбиками
. У меня даже есть пример построения блок-схемы предыдущей работы... но там было в принципе всё просто нажимаешь кнопку и всё загружается в поле Memo1. Нажал вторую кнопку получил среднее количество свободных мест. Но тут... 9 кнопок. "Добавить", "Изменить", "Показать", "Сохранить", "Удалить", "Очистить", "Загрузить", "Сохранить" (уже сам файл идёт сохранение), "Закрыть". Зачем эти блок-схемы. Написал листинг да и хватит. А тут ещё квадратики ромбики, хрен поймёшь какие-то фигурки... |
|
#10
|
||||
|
||||
|
У меня ещё вопрос. Ты не знаешь как создать файл справку, желательно в формате chm ? Я не знаю в каких можно ещё форматах создать справку для программы.
|
|
#11
|
|||
|
|||
|
В этой программе, наверное, все так же как и в предыдущей. Просто здесь большее количество, но, все равно однотипных, похожих друг на друга действий. Можно, видимо, построить блок-схему так же как и в примере, только будет она пообъемнее.
|
|
#12
|
|||
|
|||
|
Цитата:
Я пользуюсь "Help & Manual", но она платная (там можно создавать справки в любом формате). Что касается формата chm, то самое простое (хотя тоже не просто) сделать сколько надо страниц html, потом найти компилятор типа "html2chm" - их бесплатных достаточно много в инете. |
|
#13
|
||||
|
||||
|
В ходе создания программы, у меня возникла мысль сделать что-то типо когда запускаешь ярлык программы она просит ввести пароль, если пароль правильный то открывается главная форма. Если пароль не правилен то форма не открывается и пользователь пишет ещё раз пароль. Но возникла проблема, при правильном вводе пароля главная форма появляется, но форма на которой надо вводить пароль не исчезает и не закрывается. Что надо добавить в этот код
Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
if (Edit1.Text='qaz') then MainForm.Show
else
MessageDlg('Вы ввели неправельный пароль', mtError, [MBOK],0);
end; |
|
#14
|
|||
|
|||
|
Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
if (Edit1.Text='qaz') then begin
Release;
MainForm.Show;
end else
MessageDlg('Вы ввели неправельный пароль', mtError, [MBOK],0);
end;Последний раз редактировалось san-46, 21.06.2008 в 14:18. |
|
#15
|
||||
|
||||
|
Я это ввёл, в принципе всё работает. Но, есть одно но. Когда нажимаю кнопку форма с паролем не закрывается, она можно сказать просто минимизируется, её не видна на панели управления, но зато её видно в процессах. Нет возможности которая могла бы закрывать форму ? И открывать главную форму
|