Модератор: BV
Хакер писал(а):Совершенно другой вариант. Можно создать класс или форму CDbgConsoleEmulator, в которой написать Implements ITextStream и реализовать этот интерфейс. В модуле же EasyConsole с помощью описанной мною элегантной технологии определения того, под отладкой ли работает проект, нужно в при работе под отладкой вместо FSO-шных объектов подсовывать экземляр вашего класса CDbgConsoleEmulator (который может быть не просто классом, но и формой в том числе). Этот экземпляр будет сам обрабатывать вызовы Read/ReadLine/Write/WriteLine и что-то делать. Например, если это будет форма — полностью эмулировать интерфейс консоли.
ger_kar писал(а):По поводу критики и замечаний. Я думаю для шаблона более подходит название Console Application, без Easy. И короче и читабельные и более понятно.
ger_kar писал(а):И что самое интересное, что в случае с консольным приложением все практически лежало на поверхности (ну кроме ключей компиляции) и все было достаточно просто, но никто за столькие годы этого кроме Хакера не увидел. .
jangle писал(а):Насчет что только Хакер увидел это ерунда. Исходники консольных программ на VB появились лет 13 назад, это уж точно
Речь то идет об удобстве и простоте, а не о потенциальной возможности как таковой, создавать консольные приложения на VB.jangle писал(а):Насчет что только Хакер увидел это ерунда. Исходники консольных программ на VB появились лет 13 назад, это уж точно
Хакер писал(а):Джангл, ты вообще въехал в фишку? Или ты как вот этот товарищ?
' Создаём экземпляр журнала
Set Logger = New CLogger
' Запускаем ведение журнала
Logger.StartLogging Settings.LogFilePath, VBRUN.LogModeConstants.vbLogToFile
' Делаем запись в журнале
Logger.Info "Запуск программы..." & VBA.Constants.vbCrLf & VBA.Constants.vbCrLf & _
"-----------------------------------------------------------------------" & _
vbCrLf & APP_NAME & vbCrLf & udtFileInfo.FileVersion & vbCrLf & _
"Уникальный идентификатор (GUID): " & ProgramGUID & vbCrLf & _
"Дата запуска: " & Date & " г. в " & Time & vbCrLf & _
"Операционная система: " & GetOSVersion & vbCrLf & "Имя пользователя: " & _
szUserName & vbCrLf & "Текущая папка: " & szCurrDir & vbCrLf & _
"Настройки соединения: " & GetConnectionString() & vbCrLf & _
"-----------------------------------------------------------------------" & _
vbCrLf
Private Sub Form_Unload(Cancel As Integer)
'<EhHeader>
On Error GoTo Form_Unload_Err
'</EhHeader>
' Если форма закрываетя не через меню, то просто скрываем её
If Not isClose Then
' If cancel is 0, the form is removed.
' Setting cancel to any nonzero value prevents the form from being removed.
Cancel = 1
Me.Hide
MenuItemShowHide.Caption = "&Показать"
End If
'<EhFooter>
Exit Sub
Form_Unload_Err:
Logger.Error "[homectrl.FormMain.Form_Unload]: " & GetErrorMessageById( _
Err.Number, Err.Description)
Resume Next
'</EhFooter>
End Sub
uni писал(а):Без отладки
2104 IF I=1 AND J=1 THEN LOCATE 5,20:PRINT USING"###.###";D:LOCATE 5,20,1
if ( ( I == 1 ) && ( J == 1 ) ) {
// Отображаем поле ввода.
form.Invoke( new Action<string, int, int, int, bool>( form.SetInput ),
String.Format( provider, "{0:0.000}", D ), row, val1, width, true );
// Ожидаем завершения ввода пользователем.
form.mreInput.WaitOne(); form.mreInput.Reset(); D = form.Input;
// Завершаем поток, если нажали клавишу Q.
if ( form.Inkey == Keys.Q ) { form.ExitEvent = true; break; }
// Отображаем введённое значение вместо поля ввода.
form.Invoke( new Action<string, int, int>( form.terminal.Print ),
String.Format( provider, "{0:0.000}", D ), row, val1 );
// Восстанавливаем положение курсора.
form.Invoke( new Action<int, int, bool>( form.terminal.Locate ), row, val1, true );
}
uni писал(а):Нажал кнопку, получил консольное приложение и всё остальное, а тут интерфейс реализовывай, делай изменения в файле среды.
uni писал(а):Было бы не плохо, к примеру, иметь аналоги простых старых команд: LOCATE, COLOR, PRINT, CLS, INPUT, INKEY$. И, желательно, кодировку 866 для псевдографики. Я использовал форму, т.к. там нужно ещё было графику выводить, а для консоли это не такая тривиальная вещь как для Paintbox'а, который у меня и эмулирует терминал.
uni писал(а):http://www.vbforums.com/ - с ними не поделишься?
Речь шла о поддержке консольных приложений, а не досовских.
uni писал(а):Там стандартная работа в одном потоке с текстовой графикой, ввод, вывод на экран.
мой аналог на C# (нужно иметь в виду, что нельзя в основном потоке опрашивать поле ввода как на бейсике, поэтому вводятся потоки, а с потоками там отдельная песня):
Жаль, я хотел что-то вроде эмуляции ANSI-терминала, чтобы не реализовывать самому, как сейчас, его вот таким способом.
Qwertiy писал(а):Ну если ты не способен нормально использовать консоль в .NET, что тут скажешь?
Я использовал форму, т.к. там нужно ещё было графику выводить, а для консоли это не такая тривиальная вещь как для Paintbox'а, который у меня и эмулирует терминал.
529 LOCATE 11,22:INPUT,DY
IF DY=0 THEN LOCATE 19,3:?"Допуск переднего угла равен 0":LOCATE 11,22:?" ":GOTO 529
LOCATE 12,21:INPUT, L0:L0=15+L0
531 LOCATE 13,22:INPUT, T
IF T=0 THEN LOCATE 20,3:?"Осевое биение инструмента равно 0":LOCATE 13,22:?" ":GOTO 531
uni писал(а): Вот как делался ввод данных с проверкой в консоли
uni писал(а):Хотя сам эмулятор терминала у меня получился очень небольшой по коду, но вот многопоточность эта меня достаёт, я пока не сообразил как писать более короткий код, который бы по краткости был похож на оригинал.
529 LOCATE 11,22:INPUT,DY
IF DY=0 THEN LOCATE 19,3:?"Допуск переднего угла равен 0":LOCATE 11,22:?" ":GOTO 529
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5