Рассылка закрыта
При закрытии подписчики были переданы в рассылку "BloggLand и Я | Блоггландия" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
В двадцать пятом выпуске рассылки '.Net Собеседник' вы можете прочесть обзор новых компонент и продуктов,
Информационный Канал Subscribe.Ru |
.Net Собеседник #25
Содержание- От автора
- Обзор новостей
- Статья выпуска - Запускаемся из веб
- Время кода - Сворачиваем приложение на C# в системный трей
- Форумы .Net на www.sql.ru
От автора
Здравствуйте, коллеги!
ChartControl ChartControl1 = new ChartControl(); ChartControl1.Height = 400; ChartControl1.Width = 1200; ChartControl1.ChartTitle.Text = "Ваш заголовок"; ChartControl1.XTitle.Text = "Время"; ChartControl1.XTicksInterval = 30; ChartControl1.XValuesInterval = 30; ChartControl1.YTitle.Text = "Ток"; //начало для оси Y ChartControl1.YCustomStart = 0; //конец шкалы для оси Y ChartControl1.YCustomEnd = 4; //шаг по шкале Y ChartControl1.YValuesInterval = 1.0F;< BR > //настройки области графика ChartControl1.ChartPadding = 10; ChartControl1.BottomChartPadding = 10; ChartControl1.LeftChartPadding = 10; ChartControl1.Padding = 10;< BR > //строим собственно линию графика LineChart chart = new LineChart(); chart.Fill.Color = Color.FromArgb(50, cLineColor); chart.Line.Color = cLineColor; chart.Line.Width = fLineWidth; chart.Legend = sLegendName; chart.ShowLineMarkers = false;< BR > //пробегаем по таблице и добавляем точки foreach (DataRow Gr in ds.Tables[0].Rows) { string stime = ""; if ((Gr[0]!=DBNull.Value)&& (Gr[1]!=DBNull.Value)) { stime = Gr[0].ToString() + ":" + Gr[1].ToString(); } else {stime="Null";} float ffloat = 0F; if (Gr[sColumnName]!=DBNull.Value) { ffloat = (float)Convert.ToDecimal(Gr[sColumnName]); } else {ffloat = 0F;} chart.Data.Add(new ChartPoint(stime, ffloat)); } //добавляем график ChartControl1.Charts.Add(chart); ChartControl1.RedrawChart(); //добавляем компонент на страницу frm frm.Controls.Add(ChartControl1); |
Обзор новостей
-
Вышел
Aspose.Word 1.9
- Aspose.Word – .Net компонент создания отчётов в формате Word, позволяющий вам читать и писать документы Word без использования Microsoft Word. Последний релиз включает метод DocumentBuilder.MoveToSection и т.д.
-
Вышел набор элементов
управления Magic Explorer Controls 1.0.3 для Windows Forms .Net
- Библиотека классов Magic Explorer Controls содержит улучшенный проводник для файлов и дисков для приложений Windows Forms.NET.
-
Вышел XStandard для Firefox
- XStandard – ведущий плагин, являющийся WYSIWYG-редактором для Windows и браузер-базирующихся систем управления содержимым – теперь поддерживает Firefox. Редактор генерирует чистый код XHTML Strict или 1.1, для форматирования использует только CSS, корректно отделят содержимое от презентации. Версия Lite бесплатна для коммерческого использования. Версия Pro использует веб-сервисы для проверки орфографии, перетаскивания файлов, ссылок на файлы в удалённых библиотеках, общается с системами третьих производителей и импортирует информацию из них.
-
Диаграммы Nevron для WinForms 3.0
- Nevron LLC объявляет о выходе Nevron Diagram для WinForms 3.0. Компонент характеризуется улучшенными способностями по отображению диаграмм и графиков.
-
Вышел
Aspose.Email 1.0
- Компонент .Net для формирования Email и компонент для отсылки писем по Smtp-протоколу с такими возможностями, как Mail Merge, врезка объектов, мониторинг, запись логов, конфигурирование smtp.
-
Вышла AVIcode Intercept Studio
2.1
- Intercept предлагает "Графическую цепь событий" для того, чтобы помочь разработчикам идентифицировать компоненты, которым необходима инициализация. Медленные бизнес-транзакции, вовлекающие несколько серверов, представлены на Visio-подобном дисплее. Отображаются приложения, веб-сервисы, .NET Remoting, обращения к SQL, Oracle и т.д.
-
OfficeWriter V2.5
поддерживает SQL Reporting Services
- SoftArtisans OfficeWriter позволяет выполнять дизайн, публикацию и распространение отчётов прямо из Microsoft Excel и Word, используя ASP.NET, классический ASP или Reporting Services.
-
Новый .NET сайт
- Адрес - www.developerland.com.
-
DbNetTime.NET:
веб-основанное ПО для отслеживания времени
- DbNetLink выпустила DbNetTime.Net v1.1, новое веб-базированное приложение для записи и отслеживания времени. Посетите веб-сайт для просмотра оналйновой демонстрации и получения бесплатной 5-пользовательской лицензии.
-
ComponentOne объявила о ComponentOne DevKits для Borland Delphi 2005
- ComponentOne объявила о разаработке ComponentOne DevKit для Borland® Delphi™ 2005. Это предложение объединяет новую среду разработки Borland Delphi 2005 и всю линейку компонент от ComponentOne для .NET, ASP.NET, мобильных устройств и даже COM.
Статья выпуска
Запускаемся из Веб
ЯЗЫК: C#
АВТОР: Bill Wagner
Код к статье : BillW-ZeroDSample.zip
ПЕРЕВОД: Чужа В.Ф ака hDrummer
Вступление
Иногда самый лучший инсталлятор – это полное его отсутствие. Что может быть
проще простого копирования вашего приложения на веб-сервер и предоставления
возможности пользователям запускать его прямо оттуда? Всё, что нужно сделать
для перехода на новую версию приложения – скопировать набор сборок и
сопутствующих файлов в виртуальный каталог сайта. Пользователи автоматически
переходят на использование последней версии. А не звучит ли это слишком хорошо
чтобы быть правдой?
Простейший инсталлятор, когда-либо построенный вами.
Построение приложения-клиента выполняется по тем же самым правилам, которые уже опробованы для клиента, использующего веб-сервис. Добавим веб-ссылку и построим приложение – как только это сделано, необходимо поместить ваш exe-шник в виртуальный каталог на веб-сервере. Вот и всё. Всё готово. Конечно, если у вас не будет в дальнейшем никаких обновлений. Давайте теперь обсудим как к этому постепенно подойти. Лично я больше склонен создавать отдельную директорию на сервере для каждой версии приложения. Здесь я создал такой каталог в каталоге веб-сервиса для того, чтобы скачиваемый проект был немного меньше и проще. Как только вы создали каталоги и добавили исполняемый файл, надо создать для пользователей веб-страницу запуска этого приложения:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Random Quote Client Launcher</title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1"> <meta name="ProgId" content="VisualStudio.HTML"> <meta name="Originator" content="Microsoft Visual Studio .NET 7.1"> </head> <body> <P>This page contains the random quote client.</P> <P>Click <a href="ClientApplication/1.0.0.0/RandomQuoteClient.exe"> here to run the sample.</P> </body> </html> |
Страница, конечно, не станет призёром на конкурсе дизайнеров, но делает свою
работу исправно. Тэг <a> содержит ссылку на исполняемый файл на сервере.
Когда пользователь щёлкает на ссылке, то, при установленном .NET Framework,
запускается клиентское приложение. (Также можно создать ярлык у каждого клиента
на рабочем столе со ссылкой:
http://server/ClientApplication/1.0.0.0/RandcomQuoteClient.exe, другой вопрос –
если Framework не установлен – что тогда??? А веб-приложения как раз и не
требуют его установки – прим.переводчика.)
О доверии и безопасности
Клиент-цитатник запускается потому, что он написан полностью на управляемом
коде, а CLR в состоянии убедиться, что он хорошо себя ведёт. «Хорошо себя
ведёт» - значит, что он не воспользуется переполнением буфера, не имеет прямого
доступа к памяти и не использует библиотеки или COM-объекты, которые могут
выполнить неположенные или непредусмотренные действия. Но это не значит, что он
совершенно безопасен. Управляемый код тоже может создавать и удалять файлы,
модифицировать реестр, иметь доступ к сетевым ресурсам и делать многие другие,
полезные или деструктивные (как любит сейчас говорить Путин – контрпродуктивные,
- прим.переводчика) действия. Так что CLR накладывает массу ограничений
на скачанное приложение, пытаясь защитить ваш компьютер. У вас ограниченная
версия окна открытия файлов: вы не можете сохранить файл, создать папку или
удалить что-либо. Можно использовать только «безопасную печать», а не полный
механизм печати. Нельзя использовать классы Reflection.Emit. Ваше приложение
имеет ограниченный доступ к сети: имеет доступ только к тому сайту, с которого
было скачано. И наконец – нет доступа к реестру. Некоторые ограничения
накладываются при загрузке сборки из доверенного интранет-сайта. Приложения,
загружаемые из того же домена, не имеют статуса «доверяем полностью», но всё же
имеют более высокую степень доверия, чем приложения из большого, дикого
Интернета. Я всегда нацеливаюсь на минимальные права и стараюсь проверять
работоспособность приложения, запуская его откуда-нибудь из Интернета. Такой
подход даёт мне возможность чётко настроить ограничения по безопасности в
интранет и даёт больше безопасности для моих пользователей. Всё это привело
меня к Изолированному Хранилищу.
private void Form1_Closing( object sender, System.ComponentModel.CancelEventArgs e) { // сохраняем текущие цитаты в изолированном хранилище: IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForDomain( ); IsolatedStorageFileStream historyStream = new IsolatedStorageFileStream ("QuoteHistory.txt", FileMode.Create, iso); StreamWriter wr = new StreamWriter( historyStream ); foreach( string quote in this.textBoxHistory.Lines) wr.WriteLine(quote); foreach( string quote in this.textBoxCurrent.Lines) wr.WriteLine(quote); wr.Close(); } |
Этот код достаточно ясен, кроме первых двух строк. Метод
IsolatedStorageFile.GetUserStoreForDomain() возвращает объект
IsolatedStorageFile, который представляет пространство Isolated Storage для
этого приложения и пользователя. В Windows XP хранилище обычно размещается
C:\Documents and Settings\
private void Form1_Load(object sender, System.EventArgs e) { IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForDomain( ); string[] files = isoStore.GetFileNames("QuoteHistory.txt"); if ( files.Length > 0 ) { StreamReader reader = new StreamReader( new IsolatedStorageFileStream( "QuoteHistory.txt", FileMode.Open,isoStore)); string quote = reader.ReadLine(); while( quote != null ) { textBoxHistory.Text += quote; textBoxHistory.Text += System.Environment.NewLine; quote = reader.ReadLine( ); } reader.Close(); } } |
И вновь код должен быть достаточно ясным для вас – мы исследуем папку нашего
хранилища на предмет наличия файла истории. Если он найден – его содержимое
считывается и добавляется на панель истории.
Используйте этот шанс
Как ни крути, возможность такой инсталляции – шаг вперёд по сравнению с веб-формами. И вы уже не сможете использовать отсутствие необходимости инсталляции веб-приложений на машинах клиентов в их пользу. Но используйте такой подход только для приложений, которые достаточно малы – чтобы пользователь не ждал слишком долго их загрузки. (Microsoft Word в данном случае – не лучший пример :). Также учитывайте, какие в действительности ресурсы системы вам необходимы. Ведь многие приложения, которые вы пишите день ото дня, в действительности нуждаются в минимуме локальных ресурсов. В общем, при случае имейте ввиду приложение Windows Forms, которое может быть доступно с веб-страницы. CLR использует CAS и проверяемый код для того, чтобы убедиться в безопасности пользователей, также вы им можете дать большую функциональность и более простой путь к получению новых версий приложения.
Время кода
Сворачиваем приложение на C# в системный трей
ЯЗЫК: C#
АВТОР:
Tom Archer
Код к статье :
Демонстрационный код к статье
ПЕРЕВОД: Чужа В.Ф ака hDrummer
Вступление
Часто возникает необходимость разместить иконку приложения в системном трее.
Например, файерволлы и антивирусы, а также приложения для быстрого обмена
сообщениями так и поступают – для того, чтобы продолжать работать в фоновом
режиме, не загромождая без надобности панель задач.
1. Для начала откроем существующее приложение WinForms (или создадим новое).
2. Откроем панель компонент Visual Studio.
3. Перетащим компонент NotifyIcon на форму. Компонент по умолчанию получит имя
notifyIcon1 и разместится под формой, поскольку у него нет собственного
визуального представления на форме.
4. Установим свойство Text компонента NotifyIcon в тот текст, который должен
появиться при наведении пользователем мышки на иконку приложения. Например,
этот текст может быть таким "KillerApp 1.0".
5. Установим свойство Icon в ту иконку, которая должна появиться в системной
области. Подсказка: Если у вас есть файл в формате BMP, который вы хотите
конвертировать в файл формата иконки, то можно воспользоваться программой
QTam Bitmap to Icon 3.5 application.
6. Добавим обработчик события формы Resize, который скроет приложение при его
минимизации. Т.е. оно не появится в панели задач.
private void Form1_Resize(object sender, System.EventArgs e) { if (FormWindowState.Minimized == WindowState) Hide(); } |
private void notifyIcon1_DoubleClick(object sender, System.EventArgs e) { Show(); WindowState = FormWindowState.Normal; } |
На этом этапе ваше приложение работает так, как и задумывалось – отображается
иконка в трее при нормальной работе приложения, приложение не отображается на
панели при минимизации и восстанавливается в нормальный вид после двойного
щелчка на иконке в трее.
Теперь займёмся добавлением контекстного меню к иконке.
1. С панели компонент Visual перетащим элемент управления ContextMenu на форму.
2. Правой кнопкой щёлкнем на элементе управления ContextMenu и выберем опцию Edit Menu.
3. Наберём те опции, которые нам нужны - например «Восстановить» и «Закрыть приложение».
4. Так же как и для любого меню, дважды щёлкнем на пункте меню и напишем обработчик события для каждого из пунктов меню. В качестве примера можно скопировать код из обработчика DoubleClick в обработчик нажатия подменю «Восстановить», а для обработчика нажатия на меню «Закрыть» просто нужно вызвать метод Close.
5. В итоге необходимо установить свойство ContextMenu элемента управления NotifyIcon во вновь созданное меню – и на этом всё!
{К содержанию}
Форумы .Net на SQL.RU - вопросы оставшиеся без ответа
Проблема с доступом к COM-объекту, написанному на C#Непонятная проблема в Server 2003 (UnsafeNativeMethods.CallWindowProc)
как закинуть данные из грида в dataset?
Как запретить удаление определенных контролов из панели в дизайн-тайме?
Передача OLE объекта из COM+
Локализация DevExpress.XtraEditors
Неточности ADO под Oracle или невидимые свойства некоторых БД Oracle?
Помогите, плиз, начинающему
Просьба знающих решение обратить внимание (из форума по Oracle)
smartnavigation
На этом двадцать пятый выпуск .Net Собеседника закончен.
До следующего номера.
Чужа Виталий Ф. aka hDrummer,
hdrummer@sql.ru - жду ваши предложения, вопросы и замечания.
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.dotnetgrains |
Отписаться |
В избранное | ||