}
…
protected void Parce() {
int iCountMatchs = 0;
try {
// Очищаем лист-бокс
listBox1.Items.Clear();
statusBar1.Text = "Parsing…";
// создаем объект re, задавая в его конструкторе
// шаблон и опции
Regex re = new Regex(tbPattern.Text, tbOptions.Text);
// Выполняем поиск заданного выше шаблона внутри
// текста и текстового поля
tbTextForSearch MatchCollection mc = re.Matches(tbTextForSearch.Text);
iCountMatchs = mc.Count;
// Выводим информацию о количестве найденных вхождений…
statusBar1.Text = "Load list (" + iCountMatchs.ToString() + ")…";
// …и заносим информацию о них в лист-бокс.
listBox1.BeginUpdate();
foreach(Match m in mc) {
// Для хранения информации о найденном вхождении
// мы используем созданный нами класс MyItem.
// Элементы управления (типа лист-бокса) в .Net
// позволяют хранить вместо текстового значения
// объект, а при отображении текста в строке вызывают
// метод – ToString. Так что объект любого класса,
// реализующего метод ToString, может выступать в
// качестве элемента лист-бокса.
listBox1.Items.Add(new MyItem(m.ToString(), m.Index, m.Length));
}
} catch(Exception e1) {
MessageBox.Show(e1.ToString(), "Error");
} finally {
listBox1.EndUpdate();
statusBar1.Text = "Done " + iCountMatchs.ToString();
}
}
Заключение
Это только краткое ведение в регулярные выражения и их использование. Если вы хотите лучше разобраться в этом, попробуйте потренироваться в создании регулярных выражений самостоятельно. Практика показывает, что разбор чужих регулярных выражений практически бесполезен, читать их почти невозможно. Однако лучше научиться пользоваться ими – это часто упрощает жизнь.
ВОПРОС – ОТВЕТ
Как вывести на экран картинку в JPEG/GIF/PNG/др. формате?
7 способов как это сделать
Автор: Павел Блудов
Демонстрационное приложение (WTL) DrawImg (50kb)
Сегодня практически все программы используют различные картинки в качестве элементов интерфейса. Даже существует API функция ::LoadImage(), умеющая загружать файлы в формате bmp, ico и cur. Этого достаточно для панелей управления и диалогов. Но если размер картинки превышает 100x100 пикселов и их нужно несколько, файлы формата bmp использовать не удобно. Хочется что-то вроде jpg или gif.
Тут ::LoadImage() нам уже не помошник. Придется использовать специальные библиотеки. Наибольшей популярностью пользуются:
Independent JPEG Group
Portable Network Graphics
TIFF Software
Intel(R) JPEG Library
Image Library
CXImage
Small JPEG Decoder Library
Все они хорошо документированны и снабжены примерами. Подробное рассмотрение этих библиотек займет слишком много времени и выходит за рамки этой статьи. Давайте лучше уделим внимание некоторым специальным API, предназначенным для работы с файлами изображений.
Способ 1 (OleLoadPicture)
Самый "официальный" способ. Появился вместе с OLE32 и работает до сих пор. Функции OleLoadPicture(Ex)и OleLoadPicturePathумеют загружать картинки в формате BMP, GIF, JPEG, ICO, WMF, и EMF:
#include
HRESULT Load(LPCTSTR szFile) {
CComPtr pStream;
// Load the file to a memory stream
HRESULT hr = FileToStream(szFile, &pStream);
if (SUCCEEDED(hr)) {
// Decode the picture
hr = ::OleLoadPicture(
pStream, // [in] Pointer to the stream that contains picture's data
0, // [in] Number of bytes read from the stream (0 == entire)
true, // [in] Loose original format if true
IID_IPicture, // [in] Requested interface
(void**)&m_pPicture // [out] IPictire object on success
);
}
return hr;
}
HRESULT DrawImg(HDC hdc, const RECT& rcBounds) {
if (m_pPicture) {
// Get the width and the height of the picture
long hmWidth = 0, hmHeight = 0;
m_pPicture->get_Width(&hmWidth);
m_pPicture->get_Height(&hmHeight);
// Convert himetric to pixels
int nWidth = MulDiv(hmWidth, ::GetDeviceCaps(hdc, LOGPIXELSX), HIMETRIC_INCH);
int nHeight = MulDiv(hmHeight, ::GetDeviceCaps(hdc, LOGPIXELSY), HIMETRIC_INCH);
// Display the picture using IPicture::Render
return m_pPicture->Render(
hdc, // [in] Handle of device context on which to render the image
rcBounds.left, // [in] Horizontal position of image in hdc
rcBounds.top, // [in] Vertical position of image in hdc
Читать дальше