Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Консольные приложения

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

axz



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как в консольном приложении в Дельфах:
1. Поменять цвет фрифта, фон.
2. Писать, наконец, по-русски (кириллицей)
 
Насчёт второго: могу, конесно BoT Takum o6pa3om nucaTb,
Но, согласитсь неудобно!!!

Всего записей: 43 | Зарегистр. 02-06-2005 | Отправлено: 22:50 05-06-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
axz
1) Для изменения цвена фона можно использовать, к примеру:
Код:
var H : THandle;
H := CreateConsoleScreenBuffer(...);
SetConsoleActiveScreenBuffer(H);
FillConsoleOutputAttribute(H,...);

2) Для того, чтобы в консольном окне писать по русски, надо ANSI текст преобразовать в OEM. Для этого можно использовать, например, функцию CharToOemBuff

----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 23:34 05-06-2005 | Исправлено: mr_eoi, 23:35 05-06-2005
axz



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1.
Цитата:
H := CreateConsoleScreenBuffer(...);

и

Цитата:
FillConsoleOutputAttribute(H,...);

что подразумевается под "..."?
 
2. Writeln(CharToOemBuff('Привет!')); , так?

Всего записей: 43 | Зарегистр. 02-06-2005 | Отправлено: 23:50 05-06-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
axz
23:50 05-06-2005
Цитата:
что подразумевается под "..."?  

Под "..." подразумевается, что недостающие параметры можно узнать, прочитав справочное руководство, прилагаемое к Дельфям (Help - F1). Аналогично и для CharToOemBuff.

----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 23:54 05-06-2005 | Исправлено: mr_eoi, 23:55 05-06-2005
Felan

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Кстати, а не существует ли случайно модуля, который все эти функции уже содержит? А то как-т оконсольное приложение делал, долго возился с создании консоли и ее управлением, но поскольку мне только вывести на нее надо было, до  модуля дело не доросло.
Если есть у кого, может поделитесь?

Всего записей: 58 | Зарегистр. 04-03-2003 | Отправлено: 08:32 06-06-2005
Pentium133



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите функцию для очистки экрана (приложение консольное).

Всего записей: 126 | Зарегистр. 21-09-2004 | Отправлено: 14:22 06-06-2005
Shurshunchik007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pentium133
Хорошее средство на аппаратном уровне - Reset!!!
...правда потом все равно цифорки и буковки забегают...
 
Простите... я так...

Всего записей: 59 | Зарегистр. 14-05-2005 | Отправлено: 15:09 06-06-2005
mramor

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pentium133
вот что есть в msdn:

Код:
Clearing the Screen
There are two ways to clear the screen in a console application. The first method is to use the C run-time system function as follows:
 
#include <stdlib.h>
 
void main()
{
   system("cls");
}
 
The system function invokes the cls command provided by the command interpreter to clear the screen.
 
The second method is to write a function to programmatically clear the screen using the FillConsoleOutputCharacter and FillConsoleOutputAttribute functions. The following sample code demonstrates this technique.
 
void cls( HANDLE hConsole )
{
   COORD coordScreen = { 0, 0 };    // home for the cursor  
   DWORD cCharsWritten;
   CONSOLE_SCREEN_BUFFER_INFO csbi;  
   DWORD dwConSize;
 
// Get the number of character cells in the current buffer.  
 
   if( !GetConsoleScreenBufferInfo( hConsole, &csbi ))
      return;
   dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
 
   // Fill the entire screen with blanks.
 
   if( !FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',
      dwConSize, coordScreen, &cCharsWritten ))
      return;
 
   // Get the current text attribute.
 
   if( !GetConsoleScreenBufferInfo( hConsole, &csbi ))
      return;
 
   // Set the buffer's attributes accordingly.
 
   if( !FillConsoleOutputAttribute( hConsole, csbi.wAttributes,
      dwConSize, coordScreen, &cCharsWritten ))
      return;
 
   // Put the cursor at its home coordinates.
 
   SetConsoleCursorPosition( hConsole, coordScreen );
}
 

Всего записей: 326 | Зарегистр. 15-05-2005 | Отправлено: 19:49 06-06-2005
axz



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Felan, есть такой модуль и он зовётся WinCRT (а в ТурбоПаскаль просто CRT)
типа этот модуль отвечает за графику в приложениях на уровне DOS
Но у меня её нет. В каких-то исходниках про неё писалось...

Всего записей: 43 | Зарегистр. 02-06-2005 | Отправлено: 21:36 06-06-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
axz
21:36 06-06-2005
Цитата:
есть такой модуль и он зовётся WinCRT (а в ТурбоПаскаль просто CRT)  
типа этот модуль отвечает за графику в приложениях на уровне DOS  
Но у меня её нет. В каких-то исходниках про неё писалось...  

WinCRT - это модуль для Turbo(Borland)Pascal для реализации ввода/вывода не на экране DOS, а в отдельном прокручиваемом текстовом окошке и к консольным прилолениям Win32 никакого отношения не имеет.

----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 07:10 07-06-2005 | Исправлено: mr_eoi, 07:11 07-06-2005
axz



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так разве прокручиваемое окошко - не консольное приложение?
В Дельфах New>Other>Console Application
это и есть то окошко! >

Всего записей: 43 | Зарегистр. 02-06-2005 | Отправлено: 19:27 07-06-2005
mramor

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
axz
думаю, mr_eoi хотел сказать что wincrt для доса, а не для консолей win32.

Всего записей: 326 | Зарегистр. 15-05-2005 | Отправлено: 22:28 07-06-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mramor
Всё верно. На Turbo(Borland)Pascal не предусмотрено написание Win32 приложений вообще и консольных в частности. На BorlandPascal можно компилировать Win16 придожения, но консольных Win16 приложений не существует в природе.

----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 23:11 07-06-2005
eugrus



UNIX-like Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Поменять цвет фрифта, фон

на сколько я понимаю этим занимается conio.h
 
вот только шрифты не обещаю...

----------
IT-Recht Blog

Всего записей: 5471 | Зарегистр. 17-06-2004 | Отправлено: 23:15 07-06-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
eugrus
23:15 07-06-2005
Цитата:
на сколько я понимаю этим занимается conio.h

Я бы для Дельфи не обещал бы и "conio.h"

----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 23:25 07-06-2005
Kursist



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
axz
Если в системе установлен русский язык и выбрана русская кодировка - нормально печатается по русски в консоле! Проверил!

Всего записей: 137 | Зарегистр. 12-07-2004 | Отправлено: 15:03 08-06-2005
axz



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kursist
А мне надо ПИСАТЬ по-русски!
Writeln

Всего записей: 43 | Зарегистр. 02-06-2005 | Отправлено: 20:05 08-06-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
axz
вариант 1) набивать текст в редакторе, который поддерживает дос кодировку (Bred, EmEditor). тогда фразы вида writeln('текст'); будут выводится правильно.
Если же ты читаеш с текстового файла строки, которые записаны в cp1251 (win-кодировка), то тогда перед выводом их нужно преобразовать малось. вот пример

Код:
 
procedure MyWriteln(const S: string);
var
  NewStr: string;
begin
  SetLengtn(NewStr, Length(S));
  CharToOem(PChar(S), PChar(NewStr));
  Writeln(NewStr);
end;
...
MyWriteln('Delphi - это круто!!!');
 

Если лень вообще переделывать код, то можна использовать следующую процедуру

Код:
 
SetConsoleOutputCP(866)
 

Но работает только в NT системах.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 20:38 08-06-2005
axz



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yeah!
ну от это мне и надо было!!!
THAAAAAAAAANKS!

Всего записей: 43 | Зарегистр. 02-06-2005 | Отправлено: 21:35 08-06-2005
SiberianGRemlin



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для отображения кириллицы в консольных приложениях Delphi, предлагаю использовать следующий модуль(просто подключаете и вперёд):

Код:
 
unit EsConsole;
 
interface
 
implementation
 
uses
    Windows;
 
type
    TTextRec = record
        Handle: Integer;
        Mode: Integer;
        BufSize: Cardinal;
        BufPos: Cardinal;
        BufEnd: Cardinal;
        BufPtr: PChar;
        OpenFunc: Pointer;
        InOutFunc: Pointer;
        FlushFunc: Pointer;
        CloseFunc: Pointer;
        UserData: array[1..32] of Byte;
        Name: array[0..259] of Char;
        Buffer: array[0..127] of Char;
    end;
 
function ConOutFunc(var Text: TTextRec): Integer;
var
    Dummy: Cardinal;
    SavePos: Integer;
begin
    SavePos := Text.BufPos;
    if SavePos > 0 then
        begin
            Text.BufPos := 0;
            CharToOemBuff(Text.BufPtr, Text.BufPtr, SavePos);
            if WriteFile(Text.Handle, Text.BufPtr^, SavePos, Dummy, nil) then
                Result := 0 else
                Result := GetLastError;
        end else Result := 0;
end;
 
initialization
    Rewrite(Output);
    TTextRec(Output).InOutFunc := @ConOutFunc;
    TTextRec(Output).FlushFunc := @ConOutFunc;
end.
 

Всего записей: 101 | Зарегистр. 04-12-2003 | Отправлено: 11:01 14-01-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Консольные приложения


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru