1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Опятьже Pascal

Тема в разделе 'Программирование', создана пользователем АндрюхиН, 18 окт 2010.

  1. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    Огроменное тебе спасибо! И спасибо тому кто почистил тему!)
    1 человеку нравится это.
  2. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    Еще парочка вопросов....
    1:
    Предположим у меня есть вот такой txt файл
    34543545354
    54645645645
    65756756756
    89789879789
    Как мне из этого файла взять только опредленную строчку? например первую?
    2:
    Тут были дискуссии по поводу управления мышкой в главном меню в программе на паскале.... я на это забил... и теперь хочу спросить у вас, как сделать управление с клавиатуры?
  3. zombiee Пользователи

    Сообщения:
    18
    Лайки:
    11
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    ArtCoding Group
    Код:
    function GetFLine(Path: string; Line: integer);
    var
    F: Text;
    i: integer;
    begin
    Assign(F, Path);
    Reset(F);
    for i:=0 to Line do begin
    if(EOF(F)) then break;
    ReadLn(F, GetFLine);
    end;
    Close(f);
    end;
    
    ReadLn - чтение построчно :D

    Работа с клавиатурой. Стандартные процедуры read и readLn. Стандартные функции readKey и KeyPressed; их применение в циклах
    1 человеку нравится это.
  4. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    Код:
    for i:=0 to Line do begin
    if(EOF(F)) then break;
    ReadLn(F, GetFLine);
    
    Сори... я нуп еще.. можещ разжувать мне...
    Код:
    Line
    Код:
    (EOF(F)) 
    Код:
    ReadLn(F, GetFLine);
  5. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    Статья та, на которую ты ссылку дал. очень полезная! возьму на вооружение... но ответа на мой вопрос там нету..... давай я поподробнее опишу что я хочу сделать....
    у меня есть какаято программа... там есть главное меню... предположим вот такое:

    НАЧАТЬ
    СОХРАНИТЬ
    ЗАГРУЗИТЬ
    ВЫЙТИ

    из той статьи... я понял как сделать так чтобы при нажатии определенной клавиши выполнялся какойто пункт меню... а мне надо сделать так чтобы я мог управляя стрелочками на клавиатуре передвигаться по меню... и когда я например выбрал ВЫЙТИ , я нажимаю интер... ну и программа закрывается:D
    p.s. както так....
  6. zombiee Пользователи

    Сообщения:
    18
    Лайки:
    11
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    ArtCoding Group
    Код:
    {
    @params:
    Path - путь до файла
    Line - номер строки, которую надо считать.
    }
    function GetFLine(Path: string; Line: integer): string;
    var
    F: Text;  // Переменная для файла
    i: integer; // номер текущей строки
    begin
    GetFLine:=''; // Инициализация переменной, которая возвращает результат
    Assign(F, Path); // Создаем дескриптор на файл (т.е присваиваем файловой переменной путь до файла (грубо говоря))
    Reset(F);        // открываем файл для чтения
    for i:=0 to Line do begin // цикл с считыванием строк до тех пор, пока не считаем нужную
    if(EOF(F)) then break; // EOF - функция для проверки того, считали ли мы весь файл, или нет (возвращает TRUE, если достигнут конец файла)
    ReadLn(F, GetFLine); // считываем строку
    end;
    Close(f);  // закрываем файл
    end;
    
    Так правильнее :) Просто писал утром, ещё не до конца проснувшись.

    По поводу меню - заводи переменную-индекс.
    К примеру, у нас 4 пункта меню -
    1. НАЧАТЬ
    2. СОХРАНИТЬ
    3. ЗАГРУЗИТЬ
    4. ВЫЙТИ

    Заводим переменную-индекс (в ней хранится текущий итем меню)
    Код:
    var Index: integer = 0; // по дефолту - первое меню
    При нажатии вниз просто увеличиваем размер Index на один, а при нажатии вверх - уменьшаем (не забываем про проверу на выход за пределы меню)
    При нажатии на энтер проверяй, чему равно значение Index и вызывай соответствующую процедуру (к примеру, 0 - Начать, 2 - Загрузить и т.д)

    Вот и всё :D

    P.S: если приду в более-менее вменяемом состоянии, накатаю пример на Turbo Pascal.
    P.S.S: На x64 турбо не пашет :) Так что качаю Free Pascal :huh:
    2 пользователям это нравится.
  7. zombiee Пользователи

    Сообщения:
    18
    Лайки:
    11
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    ArtCoding Group
    Эх, отменилась пьянка :(

    Так что вот - Посмотреть вложение MenuDemo.zip .
    Пароль на архив: mmorpg-devs.ru ;)

    Файлы:

    compiled/menu.exe - скомпилированная программка для быстрого просмотра того, что я сделал :D

    sources/menu.pas - основной код программы
    sources/MenuDef.pas - Дефайны для программы (константы, глобальные переменные и т.д)
    sources/MenuFuncs.pas - процедуры для обработки меню (т.е процедуры, вызываемые при выборе меню)

    Почему разбил на несколько файлов :) - не люблю громоздкого кода :huh:
    Если что - спрашивай :)
    1 человеку нравится это.
  8. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    Так за то чтобы считывать из файла построчно. огроменное спасибо :D приду попозже проверю на работоспособность :huh:
    Программа та, компилированная у меня не запускается :) из-за версии винды =-\\ ну я щас попробую скомпилировать из пас файлов... только вот турбо паскаль такие коменты не читает, как ты там прописал) вечером приду, постираю коменты ,скомпилирую и гляну))))
  9. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    И ведь то что ты придумал... не так сложно... ппц.. чтож я сам не додумался)
    К стате..... мб из-за разных версий паскаля?
    Код:
    MenuIndex: integer = 0;
    тут пишет синтаксическую ошибку....
    Код:
    MenuItems: array[0..4] of integer = ( 
    MENU_RUN,
    MENU_LOAD,
    MENU_SAVE,
    MENU_ABOUT,
    MENU_EXIT
    );
    тут после интеджера просит ; в общем дальше смотреть пока не буду.. приду разбирусь...
    и еще) извини конешно что я наглею) а там пользователь сам видит какой пункт меню он выбрал? получается можно ведь сделать что-то типо если индекс равен 1 то пункт Load подсвечивается.... да можно... но вот только как =-\\\ я просто паскаль учу 2 года в школе... а там ... ну немного хуита....
  10. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    И еще вопросик...
    Код:
    unit MenuDef;
    
    interface
    что значит юнит?:D и интерфейс.. ну что пинтерфейс значит эт понятно.. а как паскаль это воспринимает?:О
    Код:
    implementation
    и еще вот это словечко :huh:
  11. zombiee Пользователи

    Сообщения:
    18
    Лайки:
    11
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    ArtCoding Group
    Охх... По порядку.

    Да, с программкой накосячил, она для х64 :D

    Напиши просто
    Код:
    var
    MenuIndex: integer;
    ...
    begin
    MenuIndex:=0;
    while(true) do begin
    ...
    end.
    
    То же самое с массивом:
    Код:
    var
    MenuItems: array[0..4] of integer;
    MenuItemsText: array[0..4] of string;
    ...
    
    begin
    MenuIndex:=0;
    
    MenuItems[0]:=MENU_RUN;
    MenuItems[1]:=MENU_LOAD;
    MenuItems[2]:=MENU_SAVE;
    MenuItems[3]:=MENU_ABOUT;
    MenuItems[4]:=MENU_EXIT;
    
    MenuItemsText[0]:=MENU_RUN_TEXT;
    MenuItemsText[1]:=MENU_LOAD_TEXT;
    MenuItemsText[2]:=MENU_SAVE_TEXT;
    MenuItemsText[3]:=MENU_ABOUT_TEXT;
    MenuItemsText[4]:=MENU_EXIT_TEXT;
    
    while(true) do begin
    ...
    end.
    
    Да, говнокод ;) но для примера сойдет :huh:

    Так и быть, извиню :)

    Да, пункт меню выделен "> "
    Код:
    if(MenuIndex=i) then Write('> ');
    WriteLn(MenuItemsText[i]);
    
    Первая строка. Если выбран данный (i) элемент меню, то перед ним выводим "> "

    Юнит - модуль (библиотека, etc.). В нем могут находиться функции, процедуры, переменные и т.д, необходим для разбивки сорцов на несколько файлов, что бы не писать все в мэйн файле (выглядит красивее, более удобная навигация, отлов ошибок и т.д)

    Про все это можно почитать, например, Здесь
    1 человеку нравится это.
  12. zombiee Пользователи

    Сообщения:
    18
    Лайки:
    11
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    ArtCoding Group
    1 человеку нравится это.
  13. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    Огроменное тебе спасибо!!!) я тебя просто обожаю) не видел еще человека чтобы так все разжевывал) а чтобы выделял цветом в меню .. я сам сделаю :D =DDD ты только не забываю тему эту проверять. у меня полюбэ будут еще вопросы)
    там еще где меню.. .надо будет курсор убрать... но эт я сам :huh:
  14. zombiee Пользователи

    Сообщения:
    18
    Лайки:
    11
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    ArtCoding Group
    Textbackground - цвет фона у текста (передается стандартная константа или целое число)
    Textcolor - цвет текста (передается стандартная константа или целое число)

    Код:
    TextColor(Yellow);
    WriteLn('This text is "Yellow"');
    TextColor(Red);
    WriteLn('This text is "Red"');
    
    This text is "Yellow" будет выведено желтым цветом
    This text is "Red" будет выведено красным цветом
    Подробнее - Lesson 3 - Special Reserved Words of the CRT Unit: ClrScr(), GotoXy(), etc.

    cursoroff - спрятать курсор
    cursoron - показать курсор
    cursorbig - показать большой курсор
    :D
  15. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    БлиН) то что ты разбиваеш на несколько файлов конешноже хорошо) но когда все в одном - понятнее :D
  16. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    Вообще есть ася?)
    я же гвоорил цветом я сам сделаю) и не так как ты написал) а по другому) я сделаю там чтобы выбираеш какой либо пункт меню и на фоне его появляется например крассный прямоугольник)
  17. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    Все) Я щас возьму твой принцип, и сделаю как у тебя, только под себя :D
  18. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    К стате, это не пашет)

    Код:
    cursoroff - спрятать курсор
    cursoron - показать курсор
    cursorbig - показать большой курсор
  19. alexdnepro Эксперт AngeliCore Пользователи Open Source Contributor White List

    Сообщения:
    754
    Лайки:
    1.313
    Пол:
    Мужской
    Репутация:
    6
    Вот читаю это, ностальгия по досу и турбо паскалю 5.5.  :D
  20. TopicStarter Overlay

    АндрюхиН Пользователи

    Сообщения:
    66
    Лайки:
    2
    Репутация:
    0
    Паскаль классная штука :D Особенно когда только начинаеш его учить и испытываеш маленькие радости когда что-то придумываеш сам)
Черновик сохранён Черновик удалён

Поделиться этой страницей