Помощь - Поиск - Пользователи - Календарь
Полная версия: Меню
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Katrinka
Доброе время суток!
Подскажите пожалуйста, как сделать меню в графическом режиме так, чтобы каждому пункту соответствовал прямоугольник с надписью, и управление осуществлялось бы стрелками, причем при выделении прямоугольника он менял бы цвет? И после выполнения ряда действий, соответствующих пункту, пользователь возращался в меню?

Заранее большое спасибо!

volvo
Ну, тема однозначно переезжает в Задачи, т.к. вопрос - именно по реализации ...

Уточни, что можно использовать в программе? Динамическая память? Объекты? Процедурные типы? Модули?
Есть кое-что готовое, правда там с мышью, модулями и объектами, можно будет убрать все лишнее, если нужно...
Гость
Ну объекты и модули точно использовать нельзя. Процедуры и динамическую память, думаю можно. Мышь тоже можно (даже нужно) если не очень сложно.

P.S.: как перекидывать тему в Задачи?
volvo
Ну, вот первое приближение - мыши пока нет, только с клавиатуры ...
Katrinka
Volvo, огромное спасибо! Это то, что нужно. Только хотелось бы кнопки друг над другом расположить (Как это сделать?)
И еще в процессе написания возникла проблема: мой паскаль не печатает на русском, все раскладки перепробовала, не работает. Что делать?
Последний ворос: можно ли загрузить в паскаль нестандартные цвета?
volvo
Цитата
хотелось бы кнопки друг над другом расположить (Как это сделать?)
изменить процедуру show_menu на такую:
procedure show_menu(current: integer;
const menu_str: array of string;
const size: integer);
var
i, py, color, max_width: integer;
begin
py := dist;
setcolor(white);
settextjustify(centertext, centertext);

max_width := 0;
for i := 0 to pred(size) do
if textwidth(menu_str[i]) > max_width then
max_width := textwidth(menu_str[i]);

for i := 0 to pred(size) do begin

if (current - 1) = i then color := lightgreen
else color := green;

setfillstyle(solidfill, color);
bar(dist, py,
dist + max_width + 2 * dist,
py + textheight(menu_str[i]) + 2 * dist);
rectangle(dist, py,
dist + max_width + 2 * dist,
py + textheight(menu_str[i]) + 2 * dist);

outtextxy(dist + (max_width + 2 * dist) div 2,
py + (textheight(menu_str[i]) + 2 * dist) div 2,
menu_str[i]);
inc(py, textheight(menu_str[i]) + 3 * dist)

end;
end;
и обрабатывать не кнопки "влево/вправо", а "вверх (#72)/вниз (#80)"...

Цитата
мой паскаль не печатает на русском
Читай вот это:
Turbo Pascal на Xp.

Если тебе понадобится в графическом режиме выводить кириллицу (через outtext/outtextxy) - придется добавлять русифицированные шрифты, если надо - дам ссылку, где их можно взять...
Katrinka
Спасибо! Кинь пожалуйста ссылку
Katrinka
Спасибо!
Пробовала установить руссификаторы keyrus и др. , все равно русским не печатает. Может можно каким-нибудь другим методом установить?
Katrinka
Можно ли сделать так, чтобы при нажатии определенной кнопки меню программа автоматически переходила в текстовый режим, там выполнялась бы определенная функция, и при нажатии пользователем какой-нибудь клавиши он возращался бы в меню? Если да, то как?
volvo
Можно, только зачем? Что, нельзя все в графике сделать?

Если очень надо, конечно, тебе видней - используй RestoreCRTMode для кратковременного перехода в текстовый режим, а потом SetGraphMode(GetGraphMode) для возврата обратно в графический, только учти, что после возврата экран не сохранится, так что придется перерисовать меню...
Katrinka
Посоветуй пожалуйста, как лучше сделать. Задача такая: при нажатии пользователем определенной кнопки программа запрашивает ввод данных, потом запускается функция с этими входными данными(вычисление интеграла) и выводит результат. Можно ли все это сделать в графическом режиме?
volvo
Вот тут я выкладывал процедуру ввода строки в графическом режиме:
Графика
Переконвертировать в число ее можно через Val.

Как вывести результат ты знаешь, для этого существует процедура конвертации числа в строку Str и OutTextXY... Запускать функцию, которая что-то считает, можно как в текстовом, так и в графическом режиме - ей все равно... Вот и все... Что еще не хватает? Ввод есть, вывод тоже, и не надо мудрить с переходами графика/текст... smile.gif
Katrinka
Можно ли загрузить в Паскаль нестандартные шрифты(из Ворда), цвета (RGB) и можно ли вставить картинку? Если да то как?
volvo
Из Word-а шрифты не пойдут... Можно попробовать поискать утилиту конвертации (хотя я не уверен, что таковая имеется, но все может быть) из файлов формата FON/FNT в формат CHR, которые распознаются Паскалем...

Для работы больше чем с 16 цветами нужен Svga256/Vesa256 (поищи по форуму, уже было про эти драйвера)... Насчет картинок - тебе сюда: Модули для вывода графики. (bmp, Pcx ...)
Katrinka
Можно ли наряду с кнопками меню рядом нарисовать Window (из модуля CRT) и все процедуры ввода-вывода осуществлять там? Будет ли это работать?
Алена
Нет, нельзя... Window - это процедура текстового режима, Кнопки рисуются в приведенной выше программе в графике. Тебе уже задавали вопрос: "Зачем?" Делай либо ВСЕ в графике, либо ВСЕ в текстовом режиме. Иначе будет такая каша ... wacko.gif
Гость
А как в с++ сделать меню в текстовом режиме?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.