DWORD __fastcall WaitForlnputldle(IN HANDLE hProcess,




IN DWORD dwMilliseconds);

Параметр hProcess — дескриптор дочернего процесса, тот самый дескриптор, который в родительском процессе хранится в поле hProcess структуры lpProcessInformation. Параметр dwMilliseconds — время ожидания в миллисекундах.

Функция возвращается, если истекло время ожидания, или когда порожденный процесс инициирован и ждет ввода со стороны пользователя. Возвращаемое функцикцией значение может быть следующим:

  Порожденный процесс инициирован и ждет ввода со стороны пользователя.
WAIT_TIMEOUT Заданный интервал ожидания истек
OxFFFFFFFF Произошла ошибка. Информацию о ней можно получить c помощью функции GetLastError.

В некоторых случаях выполнение родительского процесса должно быть приостановленр до завершения порожденного цроцесса. Это необходимо, например, если родительский процесс должен использовать какие-то результаты, полученные порожденным процессом. Для ожидание завершения порожденного процесса можно использовать функцию WaitForSingleObject:

Параметр hHandle — дескриптор дочернего процесса, тот самый дескриптор который в родительском процессе хранится в поле hProccss структуры lpInformation. Параметр dwMilliseconds — время ожидания в миллисекундах.

При нормальном завершении функция возвращает значение, указывающее событие, которое вызвало возврат:

 

WAIT_OBJECT_0 Дочерний процесс закончился.
WAIT TIMEOUT Заданный интервал ожидания истек, но никаких сигналов от процесса не получено, т.е. он не закончился

 

Порожденный процесс остается в памяти системы, пока не завершатся все его потоки (нити) и пока все его дескрипторы не закроются вызовом CloseHandly. Если эти дескрипторы не нужны, лучше всего закрыть их сразу после инициализации процесса. Чтобы досрочно прекратить выполнение дочернего процесса лучше всего использовать функцию ExitProcess.

В качестве примера порождения дочернего процесса функцией CreateProcess приведем код, который при щелчке на кнопке запускает консольный процесс архивации всех файлов текущего каталога:

STARTUPINFO StartInfo = {sizeof (TStartupInfo) };

PROCESS_INFORMATION ProcInfo;

LPCTSTR s;

StartInfo.cb = sizeof (StartInfo);

StartInfo.dwFlags = STARTF_USESHOWWINDOW;

StartInfo.wShowWindow = SW_SHOWNORMAL;

if(!CreateProcess (NULL, "arj a all *.*.",

NULL, NULL, false,

CREATE_NEW_CONSOLE |

HIGH_PRIORITY_CLASS,

NULL, NULL, &StartInfo, &ProcInfo))

ShowMessage("Ошибка " + IntToStr(GetLastError()));

else {if (WaitForSingleObject(ProcInfo.hProcess, 10000) == WAIT_TIMEOUT)

ShowMessage ("3a 10 сек. архивация не завершена ");

CloseHandle(ProcInfo.hProcess);

}

 

Заключение

Если вы читаете эти строки, значит, вы научились программировать, хотя возможно, что вы просто заглянули в конец этих лекций узнатьузнать, чем же все это кончилось. А кончилось это вот чем: вы научились немного программировать и немного узнали один из современных и самых серьезных языков. Если вы больше не будите им заниматься, то полученные знания скоро забудутся, но при необходимости их можно будет восстановить за сравнительно небольшой срок, значительно меньший, чем потребовалось сейчас. Если даже программирование никогда не потребуется в вашей жизни, все равно, потраченное время не прошло даром. Программирование помогает четко формулировать свои мысли, видеть изъяны в рассуждениях оппонента. Однако мы все же надеемся, что вы будете применять полученные знания в дальнейшем.

Где может пригодиться язык программирования С++? Ответ короткий – везде где встречаются вычислительные задачи, задачи связанные с хранением, поиском и обработкой информации. Конечно, язык ориентирован, в основном, на решение очень серьезных задач, где в разработке кодов программ участвуют коллективы, состоящие из нескольких программистов, а иногда даже из десятков программистов. И хотя язык С++ обладает всеми возможностями для решения сложных задач, он находит все большее применение в программировании микропроцессоров, которые в силу малого объема памяти могут решать только достаточно простые задачи, связанные, большей частью, с управлением техническими объектами.

Следует только помнить, что мы знаем только основы программирования на языке С++. Чтобы действительно узнать язык потребуется много лет кропотливой работы.

Я часто сравниваю себя с инструктором автошколы, который учит вождению автомобиля. Целью такого обучения является привитие простых навыков: – трогание с места, разгон, торможение, переключение скоростей и т.п. Совсем небольшое число людей прошедших курс вождения становятся потом гонщиками, но пользуются автомобилем практически все. Вы научились основам вождения. Желаю Вам счастливого пути.

 

В. Арбузов.

 

 

Приложение.

 

Типы кодировок Windows

Идентификатор (имя кодировки) Название
  EBCDIC
  MS-DOS United States
  EBCDIC "500V1"
  Arabic (ASMO 708)
  Arabic (ASMO 449+, BCON V4)
  Arabic (Transparent Arabic)
  Arabic (Transparent ASMO)
  Greek (formerly 437G)
  Baltic
  MS-DOS Multilingual (Latin I)
  MS-DOS Slavic (Latin II)
  IBM Cyrillic (primarily Russian)
  IBM Turkish
  MS-DOS Portuguese
  MS-DOS Icelandic
  Hebrew
  MS-DOS Canadian-French
  Arabic
  MS-DOS Nordic
  MS-DOS Russian
  IBM Modern Greek
  Thai
  EBCDIC
  Japan
  Chinese (PRC, Singapore)
  Korean
  Chinese (Taiwan, Hong Kong)
  EBCDIC
  Unicode (BMP of ISO 10646)
  Windows 3.1 Eastern European
  Windows 3.1 Cyrillic
  Windows 3.1 US (ANSI)
  Windows 3.1 Greek
  Windows 3.1 Turkish
  Hebrew
  Arabic
  Baltic
  Korean (Johab)
  Macintosh Roman
  Macintosh Japanese
  Macintosh Greek I
  Macintosh Cyrillic
  Macintosh Latin 2
  Macintosh Icelandic
  Macintosh Turkish

 

Функции ввода–вывода

Язык "С++" унаследовал от "С" несколько библиотек ввода вывода.

Директива #include <conio> содердит программы getch() - ввод с клавиатуры, и вывода на экран cprintf(const char *__format,...).

Директива #include <stdio> подключает еще одну консольную библиотеку в которой есть программа ввода getchar(void) и вывода printf(const char *format[, argument,...])

 

int printf(char *format[, argument,...]);

Функция printf() выводит значения аргументов из заданного списка в соответствии со строкой форматирования, адресуемой параметром format. Строка форматирования состоит изэлементов двух типов. Во-первых это символы, которые выводятся на экран, во-вторых это команды форматирования, которые определяют способ отображеня аргументов. Команда форматирования начинается с символа процента, за которым следует код формата. Количество аргументов должно совпадать с количеством команд форматирования, причем совпадение обязательно в порядке их следования. В следующей таблице приведены некоторые команды форматирования. На самом деле их значительно больше

Код Формат
%c Символ
%d Десятичное целое число со знаком
%i Десятичное целое число со знаком
%e или %E Экспоненциальное представление
%f Значение с плавающей запятой
%s Строка символов
%u Десятичное целое число без знака
%% Выводит символ процента %

 

 

#include <stdio.h>

int main(void){

int c;

while ((c = getchar())!= '\n')

printf("%c", c);

return 0;

}

 

Некоторые стандартные функции.

Математические функции.

Прототип Описание Заголовочный файл
int abs(int); Абсолютное значение cstdlib
long labs(long); Абсолютное значение cstdlib
double fabs(double); Абсолютное значение cmath
double sqrt(double); Квадратный корень cmath
double pow(double,double); Первый аргумент возводится в степень равную второму аргументу cmath
double exp(double); e возводится в степень аргумента cmath
double log(double); Натуральные логарифм ln cmath
double log 10(double); Десятичный логарифм lg cmath
double ceil(double); Округление аргумента в меньшую сторону cmath
double floor(double); Округление аргумента в большую сторону cmath

 

Тригонометрические функции

 

Прототип Орисание Заголовочный файл
double cos(double); Косинус cmath
double cosh(double); Косинус гиперболический cmath
double sin(double); Синус cmath
double sinh(double); Синус гиперболический cmath
double tan(double); Тангенс cmath
double tanh(double); Тангенс гиперболический cmath
double acos(double); Арккосинус cmath
double asin(double); Арксинус cmath
double atan(double); Арктангенс cmath

 

Генератор случайных чисел

 

Прототип Орисание Заголовочный файл
int random(int); random(n) возвращает псевдослучайное число большее или равное 0 и меньшее или равное т-1 cstdlib
int rand(); Возвращает псевдослучайное число от 0 до константы определенной в конкретной реализации компилятора, но не меньшей 32767 cstdlib

 

Функции работы с символами

Прототип Описание Заголовочный файл
bool isalnum(char) Возвращает true если аргумент буква или цифра, в противном случае false. cctype
bool isalpha(char) Возвращает true если аргумент буква, в противном случае false. cctype
bool isdigit(char) Возвращает true если аргумент цифра, в противном случае false. cctype
bool ispunct(char) Возвращает true если аргумент не буква, не цифра и не пробел, в противном случае false. cctype
bool isspace(char) Возвращает true если аргумент прбел, табуляция или возврат каретки, в противном случае false. cctype
bool isстек(char) Возвращает true если управляющий символ, в противном случае false. cctype
bool islower(char) Возвращает true если аргумент строчная буква, в противном случае false. cctype
bool isupper(char) Возвращает true если аргумент прописная буква, в противном случае false. cctype
int tolower(char) Возвращает код строчной версии символа-аргумента. При ее отсутствии возвращает значение аргумента. cctype
int toupper(char) Возвращает код прописной версии символа-аргумента. При ее отсутствии возвращает значение аргумента. cctype

 

 

Таблица операций, сгруппированных в соответствии с их приоритетом.

Обозначение Название Синтаксис
:: Разрешение области видимости имя_класса::элемент
:: Глобальное имя ::имя
. Выбор элемента через объект объект.элемент
-> Выбор элемента через указатель указатель->элемент
[] Элемент массива Указатель[выражение]
() Вызов функции Выражение(аргументы)
() Задание значения тип(аргументы)
sizeof Размер объекта sizeof выражение
sizeof Размер типа sizeof (тип)
++ Постпрефиксный инкремент значение++
++ Префиксный инкремент ++ значение
-- Постпрефиксный декремент значение--
-- Префиксный декремент -- значение
~ Дополнение ~выражение
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

Что такое ANSI?

ANSI это стандарт отображения символов, разработанный American National Standards Institute (код1251). Стандарт ANSI использует только один байт, чтобы представить каждый знак, соответственно ограничен максимумом 256 знаками, в том числе и пунктуации. Коды от 32 до 126 совпадают со стандартом ASCII. Стандарт ASCII (код 688) использовался в DOS, ANSI используется в Windows.

 

 

Задачи

 

 

Литература

 

1. Архангельский А.Я. Программирование в С++ Builder 6. Изд. БИНОМ, 2004.

2. Архангельский А.Я. С++ Builder 6. Справочное пособие. Москва, Изд. БИНОМ, 2004.

3. Киммел П. Borland C++5 «BHV-Санкт-Петербург, 2001г.

4. Климова Л.М. СИ++ Практическое программирование. Решение типовых задач. «КУДИЦ-ОБРАЗ», М.2001.

5. Культин Н. С/С++ в задачах и примерах. Санкт-Петербург «БХВ-Петербург», 2003.

6. Павловская Т.А. C/C++ Программирование на языке высокого уровня. Питер, Москва-Санкт-Петербург-… 2005г.

7. Павловская Т.А., Щупак Ю.А. С++. Объектно-ориентированное программирование. Практикум. СПб., Питер, 2005.

8. Подбельский В.В. Язык С++ Финансы и статистика, Москва, 2003г.

9. Поляков А.Ю., Брусенцев В.А. Методы и алгоритмы компьютерной графики в примерах на Visual С++. СПб БХИ-Петербург, 2003г.

10. Савитч У. Язык С++ курс объектно-ориентированного программирования. Издательский дом Вильямс. Москва-Санкт-Петербург-Киев, 2001г.

11. Уэллин С. Как не надо программировать на С++. «Питер». Москва-Санкт-Петербург-Нижний Новгород-Воронеж-Новосибирск-Ростов-на-Дону-Екатеринбург-Самара-Киев-Харьков-Минск, 2004.

12. Шилдт Г. Полный справочник по С++. Изд. Дом «Вильямс» Москва-Санкт-Перербург-Киев, 2003.

13. Шилдт Г. Самоучитель С/С++. Санкт-Петербург, «БХВ-Петербург», 2004.

14. Шилдт Г. Справочник программиста по С/С++ Изд. Дом «Вильямс» Москва-Санкт-Перербург-Киев, 2003.

15. Шиманович.Л. С/С++ в примерах и задачах. Минск, Новое знание, 2004.

16. Штерн В. Основы С++. Методы программной инженерии. Изд. Лори.

17. www.rsdn.ru

 

 

Почему вместо русских букв в консольном приложении выводится мусор?

Автор: Алексей Кирюшкин


Версия текста: 1.0

Итак, Вы сваяли в Visual Studio что-то типа

#include "stdafx.h" int main(int argc, char* argv[]){ printf("Привет всем!\n"); return 0;}

Запускаете сей шедевр на исполнение и видите

¦ЁштхЄ тёхь!

и правильно! Текст программы Вы набирали в родном редакторе Visual Studio, используя кодовую страницу 1251, а вывод текста в консольном приложении идет с использованием кодовой страницы 866. Что же делать с этим безобразием? Как известно из любого безвыходного положенния есть по крайней мере 3 выхода. Рассмотрим их по-порядку.

Раздел 1.02 Выход 1

Набрать текст программы в редакторе любого консольного файл-менеджера.

А как же подсветка синтаксиса, вывод по F1 справки по выбранной функции и прочие маленькие прелести, скрашивающие безрадостную жизнь простого программиста? Нет, это выход не для нас.

Раздел 1.03 Выход 2

Если Вы начали писать консольную программу с нуля, он может Вам подойти. Перепишем наш маленький шедевр вот так:

#include "stdafx.h"#include "windows.h" int main(int argc, char* argv[]){ char s[]="Привет всем!"; CharToOem(s,s); printf("%s\n", s); return 0;}

Ключевое слово здесь CharToOem - именно эта функция и преобразует нашу строку в нужную кодовую страницу. С выводом у нашей программы теперь все нормально.

Но встает следующий вопрос - что делать, если надо перекомпилировать в консольное Windows-приложение Вашу старую DOS-программу на 100000 строк, написанную на Borland C++ 3.1, в которой такая ситуация встречается в каждой второй строке. А ведь придется еще подгонять ее под MS-компилятор, да и пару кусочков кода хочется соптимизировать...

Здесь пожалуй имеет смысл применить ход конем, в смысле

Раздел 1.04 Выход 3

Заменяем родную переключалку раскладки клавиатуры Windows на RusLat от Сергея Быкова, а для редактора Visual Studio изменям шрифт (Tools->Options->Format->Source Windows->Font) на любой шрифт для досовских окошек, например Terminal. Переключаем клавиатуру на раскладку DOS-CP866 (есть в RusLat'е и такая, наряду с KOI-8 и Russian Translit) и можно работать с текстом нашей досовской программы в редакторе Visual Studio. Русские буквы в досовской кодировке правильно читаются, т.к. установлен соответствующий шрифт и их можно редактировать, т.к. для клавиатуры установлена досовская раскладка.

Нужно пожалуй упомянуть и еще

Раздел 1.05 Выход 4

Впрочем, это и не выход даже, а так, тупичок. Работает он только, если соблюдены 3 условия:

  • Ваша программа будет работать только под Windows NT
  • Для окна вашей программы будет всегда установлен шрифт Lucida Console
  • Ваша программа никогда не будет работать в полноэкранном режиме - только в окне.

Если все эти 3 условия соблюдены, достаточно вставить вначале программы вызов функции SetConsoleOutputCP, задав в качестве параметра нужную нам кодовую страницу:

#include "stdafx.h"#include "windows.h" int main(int argc, char* argv[]){ if (!SetConsoleOutputCP(1251)) { // попытка установить нужную страницу закончилась неудачно // выводим причину ошибки char msg[300]; FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, msg, sizeof(msg) - 1, 0); // если версия Windows локализованная то ошибка будет // на русском языке, поэтому CharToOem(msg, msg); printf("SetConsoleOutputCP Error: %s\n", msg); return 1; } // дальше весь вывод пойдет в установленной кодовой странице printf("Привет всем!\n"); printf("И еще раз привет всем!\n"); return 0;}

 

Компонент Chart
Рассмотрим пример построения графика и опций компонента Chart, которые определяют внешний вид графика или диаграммы.
1. Запустите Delphi.
2. Сохраните файл модуля под именем MyChart_.pas, а файл проекта под именем MyChart. dpr.
3. Построим график функции, определяющей зависимость между величинами X и Y. Функциональная зависимость между ними выражается уравнением
Y = X2.
4. Поместите на форму четыре компонента Edit, кнопку Button и компонент Chart. Произведите двойной щелчок по компоненту Chart, откроется редактор Editing chart1, в окне которого на вкладке Chart\Series, используя кнопку Add, поместите график Line.
5. Используя свойство Text для компонентов Edit, введите значения, соответствующие четырем точкам X=1, 2, 3, 4. Т.е. Y для этих точек равен 2, 4, 9, 16.
6. Запишите программный код для отклика на щелчок по кнопке:
procedure TForm1.Button1Click (Sender: TObject);
var
A,B,C,D:Integer;
begin
A:=StrtoInt(Edit1.Text);
B:=StrtoInt(Edit2.Text);
C:=StrToInt(Edit3.Text);
D:=StrtoInt(Edit4.Text);
Series1.Clear;
Series1.Add(A,'1',clTeeColor);
Series1.Add(B,'2',clTeeColor);
Series1.Add(C,'3',clTeeColor);
Series1.Add(D,'4',clTeeColor);
end;
end.
После запуска приложения на компиляцию получите график функции.
Теперь перейдем к исследованию опций компонента Chart.
Перейдите к форме, сделайте двойной щелчок по компоненту Chart для перехода к редактору. Откройте страницу General. Опции этой страницы позволяют изменять поля, отводимые графику.
Свойство Margins (%) изменяет значения верхнего, нижнего, левого и правого полей. Причем, чем меньше значение свойства, тем больше поле.
Свойство Allow Scroll определяет направление прокрутки графика. Если вы установите значение Vertical, то после запуска приложения на компиляцию вы можете просматривать график, перемещая его по вертикали внутри отведенной области. Для просмотра необходимо нажать правую клавишу на компоненте и перемещать мышь в заданном направлении.
Свойство Zoom (Allow Zoom, Animated Zoom) определяет число шагов анимированной последовательности изменения масштаба изображения. Большое число шагов может задерживать изменение размера окна. AnimatedZoom свойство должно быть True. По умолчанию значение Steps установлено равное 8. Можно установить значение программно, например:
Chart1.AnimatedZoom:= True;
Chart1.AnimatedZoomSteps:= 4;
Кнопка Print Preview позволяет осуществлять предварительный просмотр диаграммы или графика перед выводом на печать.
Здесь можно увидеть снова опцию Margins (%). Кнопка Reset Margins позволяет сбросить значения, установленные вами, чтобы установить значения, принятые по умолчанию.
Опция Detail позволяет увеличивать график для детального просмотра при помощи ползунка More - Normal.
Опция View Margins позволяет убирать или показывать поля, ограничивающие график.
Опция Paper Orientation имеет два свойства Portrait (портрет) и Landscape (ландшафт).
Необходимо заметить, что вы можете изменять размеры графика, заключенного между полями, для этого необходимо подвести курсор к полям, ограничивающим график. Когда курсор превратится в двунаправленную стрелку, вы можете производить изменения.
Опция Proportional производит сброс проведенных вами изменений.
Кнопка Print Setup позволяет произвести настройку принтера, выбрать размер и ориентацию бумаги и т.д.
Кнопка Print запускает документ на печать.
Кнопка Export на вкладке General позволяет определить формат файла и экспорт его в буфер обмена. Имеется возможность запоминания графика в виде отдельного файла.
Страница Axis. Эта страница (вложенная страница Scale) позволяет определять шкалу деления вертикальной и горизонтальной оси. Можно убрать оси графика, определить логарифмическую шкалу осей, определить их положение, произвести инверсию.
Вложенная страница Title позволяет производить надписи осей, их ориентацию относительно осей, выбирать тип шрифта надписи.
Вложенная страница Labels. С помощью этой страницы вы можете определять отображение минимальных и максимальных меток оси, выбирать тип шрифта для них.
Эти значения можно задавать программно:
Chart1.LeftAxis.SetMinMax(0, 1001);
Chart1.LeftAxis.LabelsOnAxis:= False;
Свойство property ValueFormat: String; производит форматирование строкового спецификатора, а именно меток осей.
Например
Chart1.LeftAxis.AxisValuesFormat:= '###0.0###';
Свойство property RoundFirstLabel: Boolean позволяет автоматически округлять значения меток осей.
Chart1.LeftAxis.RoundFirstLabel:= True;
Chart1.LeftAxis.RoundFirstLabel:= False;
Свойство property LabelsMultiline: Boolean; позволяет изменять метки оси.
Например
Series1.Add(1234, 'Hello'+#13+ 'World', clGreen);
Если используется временной формат оси
Series1.AddXY(EncodeDate(1998, 2,28), 100, '', clTeeColor);
Series1.AddXY(EncodeDate(1998, 3,1), 200, '', clTeeColor);
Series1.AddXY(EncodeDate(1998,3,2), 150,'', clTeeColor);
Series1.XValues.DateTime:= True;
Chart1.BottomAxis.DateTimeFormat:= 'mm/dd hh:mm';
Если установлено значение
Chart1.BottomAxis.LabelsMultiLine:=True;
то производится разбиение подписи меток на две строки.
'Mm/dd' для первой строки
'Hh:mm' для второй строки.
Свойство property LabelsSeparation: Integer; определяет процент минимального расстояния между метками оси. По умолчанию установлено значение равное 10.
Свойство property LabelStyle: TAxisLabelStyle; определяет стиль отображения меток.
TAxisLabelStyle = (talAuto,talNone,talValue,talMark,talText);.
TalAuto выбор стиля производится автоматически.
TalNone пустые строки.
TalValue маркирование оси основано на минимуме оси и максимуме.
TalMark каждая точка ряда будет иметь метку, используя SeriesMarks стиль.
TalText каждый пункт ряда будет иметь метку, используя XLabels строки.
Вложенная страница Titles. Свойство Title определяет заголовок и подпись в нижней части диаграммы Foot. Здесь можно задать свойства форматирования, которые будут введены в верхней и нижней части диаграммы. Вы можете установить шрифт Title и Foot, их выравнивание, задать структуру рамки, цвет области позади надписи и стиль закрашивания этой области.
В свойстве property Title: TChartTitle; TCHARTTITLE-компонент используется, чтобы отобразить строки текста Title и Foot в верхней и нижней части диаграммы соответственно. Текстовое свойство содержит текст, который будет отображен. Это свойство имеет тип TStrings, что означает ряд строк в списке. Всякий раз, когда изменяете текстовое свойство, вы должны переустановить компонент диаграммы вручную.
Например
with Chart1.Title.Text do
begin
Clear;
Add('ACME Monthly Sales');
Add('Year: 2002');
end;
Chart1.Repaint;
end;
Вложенная страница Legend. Данная страница позволяет изменять положение, шрифт, цвет, положение относительно графика легенды или пояснений графика. Как правило, это числовые значения.
Свойство LegendStyle дает возможность выводить легенду автоматически, выводить название графика или одно значение, первое.
TLegendStyle = (lsAuto,lsSeries, lsValues,lsLastValues);.
Свойство property TextStyle: TLegendTextStyle;
TLegendTextStyle= (ltsPlain, lts-LeftValue, ltsRightValue, lts-LeftPercent, ltsRight-Percent, ltsXValue);
Например (свойство - вид надписи):
LtsPlain Лето.
LtsLeftValue 1234 Лето
LtsRightValue Лето 1234 (смещение вправо)
LtsLeftPercent Лето 5.1%
LtsRightPercent Лето 5.1% (смещение вправо)
LtsXValue 4321 применяется только к ряду со значениями X.
Свойство Position определяет размещение легенды относительно графика (слева, справа, вверху, внизу).
Свойство Margin определяет расстояние размещения легенды относительно графика.
Щелчок по кнопке Frame открывает окно, позволяющее определять вид обрамления легенды.
Свойство Shadow определяет вид тени для легенды, размеры которой можно изменить параметром Size.
Свойство ResizeChart указывает, уменьшит ли легенда прямоугольник диаграммы. Чтобы предотвратить перекрытие между прямоугольниками диаграммы и легендой, необходимо установить галочку в чекбокс ResizeChart.
Свойство Inverted инвертирует значения легенды.
Свойство property DividingLines: TChartHiddenPen read FDividingLines write SetDividingLines; определяет внешний вид обрамления отдельных элементов легенды.
Вложенная страница Panel.
Опции этой страницы позволяют задавать значения панели, или, другими словами, области построения графика, придавая графику красивый вид.
Можно задавать цвет области построения диаграммы или графика, производить комбинацию цветовой гаммы, изменять вид кромки внутренней и внешней части, имеется возможность внедрения различных изображений.
Свойство property BevelInner: Integer; устанавливает размер скоса, который формирует внутреннюю сторону панели диаграммы.
Свойство property BevelOuter: Integer; устанавливает размер скоса, который формирует внешнюю сторону панели диаграммы.
Свойство property BackImageMode: TTeeBackImageMode; определяет, как будет отображаться точечный рисунок фонового режима.
TTeeBackImageMode = (pbmStretch, pbmTile, pbmCenter);
PbmStretch: рисунок будет изменен, чтобы приспособиться под размер диаграммы.
PbmTile: рисунок будет размножен в виде плиточной укладки.
PbmCenter: рисунок не будет изменен, но размещен по центру.
Свойство property Visible: Boolean; Разрешает или запрещает закрашивать тыльную часть диаграммы, или, другими словами, устанавливать градиент.
Например
Chart1.Gradient.Visible:= True;
Chart1.Gradient.StartColor:= clYellow;
Chart1.Gradient.EndColor:= clBlue;
Chart1.Gradient.Direction:= gdLeftRight;.
Свойство property Direction: TGradientDirection; определяет направление закрашивания тыльной части диаграммы.
TGradientDirection = (gdTopBottom, gdBottomTop, gdLeftRight, gdRightLeft);.
Свойства property StartColor: TColor; и property EndColor: TColor; определяют создание градиента, представляющего собой совокупность двух цветов, например красного и белого.
Вложенная страница Paging. На этой странице имеется возможность задавать для каждого пункта графика его размеры. Возможно перемещение от одного пункта графика к другому, т.е. поперек графика. Можно применять масштабирование к пунктам графика или не применять его (в этом случае элементы графика размещаются плотно друг к другу).
Вложенная страница Walls. На этой странице имеется возможность определения размера стенок графика (боковой стенки, тыльной стенки и нижней стенки). Возможен выбор цвета, типа кисти и пера, чтобы заполнить цветовую гамму стенок графика.
Вложенная страница 3D. Опции этой страницы придают трехмерность графику или диаграмме.
Свойство property Zoom: Integer; значение по умолчанию = 100%.
Свойство View3DOptions изменяет размер окна, изменяет масштаб изображения диаграммы. Значение выражается в процентах. Увеличение производится при помощи ползунка Zoom. Диаграмма может быть расширена по размеру больше, чем панель.
Свойство property Rotation: Integer; определяет вращение диаграммы или графика. Увеличение значения приведет к вращению диаграммы вокруг вертикальной оси.
Опция Ortogonal отключает режим трехмерного изображения и переключает в двухмерный режим.
Свойство property Elevation: Integer; определяет вращение графика или диаграммы вокруг горизонтальной оси.
Свойство property HorizOffset: Integer; перемещает прямоугольник диаграммы в горизонтальном направлении поперек панели диаграммы. Положительные значения перемещают диаграмму вправо, отрицательные - влево.
Свойство property VertOffset: Integer; перемещает прямоугольник диаграммы в вертикальном направлении поперек панели диаграммы. Положительные значения перемещают диаграмму вниз, отрицательные значения - вверх.
Свойство property Perspective: Integer; позволяет просматривать значения диаграммы или графика в перспективе, значения можно изменять с помощью ползунка.
Свойство property ZoomText: Boolean; дает возможность отключать изменение масштаба текста при изменении масштаба изображения.
Раздел Series.
Вложенная страница Format.
Эта страница позволяет изменять тип ряда диаграммы или графика.
Свойство property BarStyle: TBarStyle; по умолчанию установлено значение bsRectangle.
TBarStyle = (bsRectangle, bsRectGradient, sPyramid, bsInvPyramid, bsCilinder, bsEllipse, bsArrow);
Значение типа ряда можно определить программно:
BarSeries1.BarStyle:= bsPyramid;.
Свойство property ColorEachPoint: Boolean; позволяет устанавливать цвет для элементов ряда. Вы можете сами установить цвет или дать возможность сделать это Delphi.
Свойство property MultiBar: TMultiBar позволяет расположить диаграммы или графики относительно друг друга, если их внедрено несколько в компонент Chart.
TMultiBar = (mbNone, mbSide, mbStacked, mbStacked100);.
Щелчок по кнопке Border открывает диалоговое окно, позволяющее изменять форму окантовки элементов ряда, размер и ее цвет.
Вложенная страница General.
Свойство property ShowInLegend: Boolean разрешает или запрещает отображение легенды.
Свойство property Cursor: TCursor; определяет, какой вид принимает курсор при перемещении по отдельным пунктам диаграммы или графика.
Например:
LineSeries1.Cursor:=crTeeHand;.
Свойство property HorizAxis: THorizAxis; определяет расположение горизонтальной оси масштаба относительно графика или диаграммы.
THorizAxis=(aTopAxis,aBottomAxis);
LineSeries1.HorizAxis:= aTopAxis;.
Свойство property DateTime: Boolean; позволяет задавать значения времени для горизонтальной оси.
Вложенная страница Marks.
Опции этой страницы позволяют отображать значения надписи над элементами графика и задавать для них цвет, окантовку и шрифт.
Раздел Arrows позволяет определить расстояние надписи от элемента диаграммы или графика, а также вид линии, соединяющей надпись и элемент диаграммы или графика.
Свойство property Style: TSeriesMarksStyle; определяет стиль надписи.
Вложенная страница Data Source.
Страница источника данных позволяет определить данные для надписей над элементами диаграммы или графика.

 

 

Потоки

Обмен данными между программой и внешними устройствами осуществляется с помощью операций ввода-вывода. Типичным внешним устройством является терминал. На терминале можно напечатать информацию. Можно ввести информацию с терминала, напечатав ее на клавиатуре. Другим типичным устройством является жесткий или гибкий диск, на котором расположены файлы. Программа может создавать файлы, в которых хранится информация. Другая (или эта же) программа может читать информацию из файла.

В языке Си++ нет особых операторов для ввода или вывода данных. Вместо этого имеется набор классов, стандартно поставляемых вместе с компилятором, которые и реализуют основные операции ввода-вывода.

Причиной является как слишком большое разнообразие операций ввода и вывода в разных операционных системах, особенно графических, так и возможность определения новых типов данных в языке Си++. Вывод даже простой строки текста в MS DOS, MS Windows и в X Window настолько различен, что пытаться придумать общие для всех них операторы было бы слишком негибко и на самом деле затруднило бы работу. Что же говорить о классах, определенных программистом, у которых могут быть совершенно специфические требования к их вводу-выводу.

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

В нашу задачу не входит описание программирования в графических системах типа MS Windows. Мы будем рассматривать операции ввода-вывода файлов и алфавитно-цифровой вывод на терминал, который будет работать на консольном окне MS Windows, MS DOS или Unix.

(a) Потоки

Механизм для ввода-вывода в Си++ называется потоком. Название произошло от того,что информация вводится и выводится в виде потока байтов – символ за символом.

Класс istream реализует поток ввода, класс ostream – поток вывода. Эти классы определены в файле заголовков iostream.h. Библиотека потоков ввода-вывода определяет три глобальных объекта: cout,cin и cerr. cout называется стандартным выводом, cin – стандартным вводом, cerr – стандартным потоком сообщений об ошибках. cout и cerr выводят на терминал и принадлежат к классу ostream, cin имеет тип istream и вводит с терминала. Разница между cout и cerr существенна в Unix – они используют разные дескрипторы для вывода. В других системах они существуют больше для совместимости.

Вывод осуществляется с помощью операции <<, ввод с помощью операции >>. Выражение

cout << "Пример вывода: " << 34;

напечатает на терминале строку "Пример вывода", за которым будет выведено число 34. Выражение

int x;cin >> x;

введет целое число с терминала в переменную x. (Разумеется, для того, чтобы ввод произошел, на терминале нужно напечатать какое-либо число и нажать клавишу возврат каретки.)

(b) Операции << и >> для потоков

В классах iostream операции >> и << определены для всех встроенных типов языка Си++ и для строк (тип char*). Если мы хотим использовать такую же запись для ввода и вывода других классов, определенны



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: