IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Меню и файлы
Sensitive
сообщение 7.11.2007 19:23
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


Здравствуйте.
У меня такой вопрос. Есть меню из 3-х пунктов. Если нажимается первый пункт, то должно появиться следующее меню, где также можно выбирать пункты второго меню. Содержимое второго меню хранится в файле. То есть при нажатии на первый пункт главного меню я вывожу пункты второго меню из файла. Как сделать, чтобы из этих (выведенных из файла) пунктов также можно было выбирать... или это невозможно?
Спасибо заранее за помощь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 10.11.2007 0:33
Сообщение #2


Гость






А как, прости, ты будешь знать, какое ДЕЙСТВИЕ выполнять при выборе того или иного пункта меню, прочитанного из файла? Просто прочесть строки из файла и отобразить их в меню - без проблем:

const
max_lines_in_menu = 15;
type
myString = string;

PStrArr = ^strArr;
strArr = array[1 .. max_lines_in_menu] of myString;

function Prosmotr(f_name: string; var size: integer): PStrArr;
var
f: text;
s: string;
i: integer;
p: PStrArr;
begin
assign(f, f_name);
reset(f);
readln(f, size); { <--- Первая строка файла - количество строк в менюшке }
getmem(p, size * sizeof(myString)); { <--- берем столько памяти, сколько нужно для хранения }
i := 1;
while not eof(f) do begin
readln(f, s);
p^[i] := s; inc(i); { <--- заполняем массив }
end;
close(f);
Prosmotr := p;
end;


procedure do_termini;
var
p: PStrArr;
size: integer;
begin
p := Prosmotr('termini.txt', size); { <--- прочли файл в дин. память }
ShowMenu(p^, t_proc); { <--- отрисовали меню (вот только с ДЕЙСТВИЯМИ - непонятно) }
FreeMem(p, size * sizeof(myString)); { <--- освободили память }
end;


Файл: Прикрепленный файл  termini.txt ( 55 байт ) Кол-во скачиваний: 409


Если у тебя возник вопрос о том, что в некоторых подменюшках может быть по 3, а в некоторых - и по 5 элементов, то это тоже не проблема, достаточно не брать nItems в ShowMenu из константы, а передавать еще одним параметром (как раз в приведенном выше коде Prosmotr заодно возвращает и длину массива строк).

Только вот с массивом Proc - непонятно, что делать... Откуда ты (вернее, программа, читающая файл 'termini.txt') будет знать, что по нажатию на первый пункт меню надо открыть еще один файл? Сейчас-то пока массив Proc для прочитанного из файла меню задается вручную... Ну, извратиться, конечно можно (если надо - говори, я попробую объяснить, как это преодолеть, есть кое-какая идея), но стоит ли оно таких ухищрений?
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:32
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"