Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2017, 14:30   #1
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
Вопрос своя командная строка

Здравствуйте. Во многих программах (играх) обычно при нажатии тильды (~) вылезает "панель", куда можно вводить команды и куда выводится отладочная информация. Типа командной строки виндовс.
Допустим есть Memo. Выводим туда значек ">". Пользователь что-то вводит и нажимает Enter. Строка остается,но уже без значка, а значок выводится в следующую строку.
Но в мемо можно перемещать курсор и писать в любом месте, а этого не нужно. Наоборот, при нажатии кнопок вверх и вниз в строке должны выводиться предыдущие введенные команды.
Вот что-то ничего в голову не приходит как такую фичу сделать.
fanlis вне форума Ответить с цитированием
Старый 18.01.2017, 14:38   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Сделай мемо только для чтения, под ним Edit для ввода. Из эдита команды копируй в мемо по нажатию Enter
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.01.2017, 14:44   #3
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

В принципе можно так сделать. Но все же интересно как это делается в играх и в самой cmd (именно то, что я описал). Кажется мне, что это не сложно и не нужно ничего изобретать. Может кто знает?
fanlis вне форума Ответить с цитированием
Старый 18.01.2017, 22:11   #4
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Если решать в лоб, то:
Код:
var
  Form1: TForm1;
  lin: integer;

implementation

{$R *.dfm}

//это вместо нажатия тильды :)
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Visible:=True;
Memo1.Lines.Add('>');
lin:=Memo1.Lines.Count-1;
with Memo1 do
SelStart:=Perform(EM_LINEINDEX, lin, 0) + 1;
Memo1.SetFocus;
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var pos: integer;
begin
if key=Chr(13) then
begin
Memo1.Visible:=False;
//и еще какие-то нужные действия
exit;
end;
pos:=Length(Memo1.Lines[lin]);
with Memo1 do
SelStart:=Perform(EM_LINEINDEX, lin, 0) + pos;
end;

end.
kropotkina-alice вне форума Ответить с цитированием
Старый 19.01.2017, 11:47   #5
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Интересный подход. Действительно в лоб. Правда позволяет вводить символы только в конец строки.
При таком подходе нужно тогда сделать чтобы можно было вводить символы в середину строки (ну мало ли для исправления), и чтобы курсор не уходит с последней строки (заменить реакцию на нажатие кнопок вверх и вниз), а так же при установке курсора мышью.
Можно это как-то сделать?
fanlis вне форума Ответить с цитированием
Старый 24.01.2017, 08:24   #6
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Ну в общем-то я сделал "в лоб", обрабатываю нажатие клавиш вверх, вниз, чтобы не пускать на другую строку, влево, home, home с шифтом, контролом, backspace чтобы не пускать левее символа приветствия (>) и не стирать его, так же всевозможные клики мышкой и т.д. Но это все громоздко, не красиво и все равно есть дыры (например, я не знаю как отловить нажатие и удержание кнопки клавиатуры).
Не самый изящный подход.
Тема остается открытой.
fanlis вне форума Ответить с цитированием
Старый 24.01.2017, 21:05   #7
DIONISKA
Форумчанин
 
Регистрация: 07.11.2011
Сообщений: 161
По умолчанию

В играх обычно пишется свой UI, который к VCL не имеет отношения. Впрочем что мешает самому всё отрисовывать? Прилепить сверху панель(окно как у меня), ловить ввод и рисовать. Например вроде такого:
Вложения
Тип файла: zip menupadding.zip (964.6 Кб, 26 просмотров)
DIONISKA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
командная строка Наталья Баева Windows 3 19.01.2014 00:04
Командная строка Aramor Помощь студентам 2 26.09.2012 18:07
Командная строка Naruto63 Помощь студентам 0 22.05.2011 16:34
Командная строка Morphling Помощь студентам 9 01.02.2010 00:27
командная строка Mails Помощь студентам 2 12.05.2008 18:29