Delphi XE

Embarcadero Delphi XE — среда для разработки высокопроизводительных приложений с графическим интерфейсом для настольных компьютеров, рабочих станций, сенсорных дисплеев, информационных терминалов и Интернета. Технология программирования Delphi XE значительно ускоряет процесс создания приложений. Это гибкое решение с мощными языковыми средствами и непревзойдённым уровнем контроля.

( Читать дальше )

Visual Studio 2008 Standard Снижение цен на 50%!

Microsoft® Visual Studio® 2008 олицетворяет собой представление корпорации Майкрософт об интеллектуальных клиентских приложениях и позволяет разработчикам быстро создавать подключенные приложения, способные обеспечить широчайшие возможности для работы пользователей. С помощью Visual Studio 2008 организации смогут собирать и анализировать информацию проще, чем когда бы то ни было раньше, что способствует принятию эффективных бизнес-решений. С помощью Visual Studio 2008 организации любого размера смогут быстро создавать более безопасные, управляемые и надежные приложения, использующие преимущества Windows Vista™ и системы Microsoft Office 2007.

( Читать дальше )

Исчезает панель задач в Windows 7

Последнее время стала исчезать панель задач в Windows 7. Причин выявит не смог, а вот решение нашел. Если у Вас тоже проблемы с панелью задач выполните этот скрипт и все вернется прям на глазах. Скрипт

Как работать с файлами в assets?

Помогите пожалуйста.

Для работы приложения необходимо использовать некоторое количество сторонних файлов общим объемом около 50 МБ. Файлы лежат в различных папках. Как мне прицепить эти папки и файлы к разрабатываемому приложению. Сейчас я создаю в папке assets все необходимые подпапки и импортирую в них все файлы русфинанс банк самара официальный сайт . Компилирую проект, но при размещении его в эмуляторе выдается сообщение об ошибке: com.android.ddmlib.SyncException: No such file or directory. Как вообще работать с большими файлами, которые необходимы проекту? И если получиться запустить проект, то надо из assets читать файлы и записывать их на устройство в нужную папку и с нужным название? Но это увеличит объем приложения в 2 раза! Помогите пожалуйста.

Работа с GPS на Android

Создадим новый проект Android в Eclipse. Дадим ему название, например: GPSTest, а активности — GPSTestAction.
Откроем GPSTestAction.java и добавим строчки:

( Читать дальше )

Воспроизведение файлов в формате OGG (аудио и видео)

При разработке очередного ПО столкнулся с проблемой использования в коммерческих целях известные форматы видео и аудио. Например, mp3, mp4 и т.п. По google-в наткнулся на абсолютно свободный формат — ogg. Этот формат позволяет хранить видео и аудио контент. Решил остановиться на нем, но тут возникла следующая проблема: для разработки самого простого проигрывателя для данного формата необходимо в систему установить свободный проигрыватель VideoLan и использовать его или как ActiveX или напрямую его библиотеки и плагины. Это не очень удобно, а точнее совсем не удобно! После нескольких дней поисков и ковыряний решение было найдено.

( Читать дальше )

Взаимодействие между языками программирования!

Здравствуйте! Вопрос заключается в том, что я не понимаю каким образом, например класс, написанный на C++ и класс, написанный на C# или на других языках смогут взаимодействовать? Скажем у меня, есть служба на C# WCF как я смогу передать через неё данные в код C++?? Или ещё пример у меня есть библиотека на Delphi c набором классов, каким образом я эти классы смогу использовать на Java? Вообще меня интересует сам принцип взаимодействия и примерная реализуется?
Заранее большое спасибо буду ждать ответов с нетерпением!!!

Чтение DBF - формата

Нашел в Интернете отличный пример чтение DBF — формата в DataTable. Решил его опубликовать, может кому пригодится. Отлично работает в Compact Framework.


private void ReadDBF(string filename)
        {
            //читаем DBF - файл
            FileStream fs = null;

            try
            {
                dt = new DataTable();
                fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
                byte[] buffer = new byte[4]; // Кол-во записей: 4 байтa, начиная с 5-го
                fs.Position = 4;
                fs.Read(buffer, 0, buffer.Length);
                int RowsCount = buffer[0] + (buffer[1] * 0x100) + (buffer[2] * 0x10000) + (buffer[3] * 0x1000000);
                buffer = new byte[2]; // Кол-во полей: 2 байтa, начиная с 9-го
                fs.Position = 8;
                fs.Read(buffer, 0, buffer.Length);
                int FieldCount = (((buffer[0] + (buffer[1] * 0x100)) - 1) / 32) - 1;
                string[] FieldName = new string[FieldCount]; // Массив названий полей
                string[] FieldType = new string[FieldCount]; // Массив типов полей
                byte[] FieldSize = new byte[FieldCount]; // Массив размеров полей
                byte[] FieldDigs = new byte[FieldCount]; // Массив размеров дробной части
                buffer = new byte[32 * FieldCount]; // Описание полей: 32 байтa * кол-во, начиная с 33-го
                fs.Position = 32;
                fs.Read(buffer, 0, buffer.Length);
                int FieldsLength = 0;
                for (int i = 0; i < FieldCount; i++)
                {
                    // Заголовки
                    FieldName[i] = System.Text.Encoding.Default.GetString(buffer, i * 32, 10).TrimEnd(new char[] { (char)0x00 });
                    FieldType[i] = "" + (char)buffer[i * 32 + 11];
                    FieldSize[i] = buffer[i * 32 + 16];
                    FieldDigs[i] = buffer[i * 32 + 17];
                    FieldsLength = FieldsLength + FieldSize[i];
                    // Создаю колонки
                    switch (FieldType[i])
                    {
                        case "L": dt.Columns.Add(FieldName[i], Type.GetType("System.Boolean")); break;
                        case "D": dt.Columns.Add(FieldName[i], Type.GetType("System.DateTime")); break;
                        case "N":
                            {
                                if (FieldDigs[i] == 0)
                                    dt.Columns.Add(FieldName[i], Type.GetType("System.Int32"));
                                else
                                    dt.Columns.Add(FieldName[i], Type.GetType("System.Decimal"));
                                break;
                            }
                        case "F": dt.Columns.Add(FieldName[i], Type.GetType("System.Double")); break;
                        default: dt.Columns.Add(FieldName[i], Type.GetType("System.String")); break;
                    }
                }
                fs.ReadByte(); // Пропускаю разделитель схемы и данных
                System.Globalization.DateTimeFormatInfo dfi = new System.Globalization.CultureInfo("en-US", false).DateTimeFormat;
                System.Globalization.NumberFormatInfo nfi = new System.Globalization.CultureInfo("en-US", false).NumberFormat;
                buffer = new byte[FieldsLength];
                dt.BeginLoadData();
                for (int j = 0; j < RowsCount; j++)
                {
                    fs.ReadByte(); // Пропускаю стартовый байт элемента данных
                    fs.Read(buffer, 0, buffer.Length);
                    System.Data.DataRow R = dt.NewRow();
                    int Index = 0;
                    for (int i = 0; i < FieldCount; i++)
                    {
                        string l = System.Text.Encoding.GetEncoding(Encoding.UTF8.HeaderName).GetString(buffer, Index, FieldSize[i]).TrimEnd(new char[] { (char)0x00 }).TrimEnd(new char[] { (char)0x20 });
                        Index = Index + FieldSize[i];
                        if (l != "")
                            switch (FieldType[i])
                            {
                                case "L": R[i] = l == "T" ? true : false; break;
                                case "D": R[i] = DateTime.ParseExact(l, "yyyyMMdd", dfi); break;
                                case "N":
                                    {
                                        if (FieldDigs[i] == 0)
                                            R[i] = int.Parse(l, nfi);
                                        else
                                            R[i] = decimal.Parse(l, nfi);
                                        break;
                                    }
                                case "F": R[i] = double.Parse(l, nfi); break;
                                default: R[i] = l; break;
                            }
                        else
                            R[i] = DBNull.Value;
                    }
                    dt.Rows.Add®;
                    Application.DoEvents();
                }
                dt.EndLoadData();
                fs.Close();
            }
            catch (Exception e)
            {
                //
            }
            finally
            {
                if (fs != null)
                {
                    fs.Dispose();
                }
            }       
        }


Спасибо автору.

Класс для работы с INI - файлами в С#

Столкнулся с проблемой отсутствия инструмента для работы с INI-файлами в C#. Решил написать класс для работы с этими файлами и вчера вечером написал. Сильно не ругайте недостатков много. Буду подправлять постепенно. На данном этапе он меня устраивает, так как выполняет все необходимые мне функции и работает на Windows Mobile.


using System;
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Windows.Forms;

namespace GUIDE
{
    public class INISection
    {
        public string INISectionName;
        public List<string> INIParametr;
        public List<string> INIValue;

        public INISection()
        {
            INIParametr = new List<string>();
            INIValue = new List<string>();
        }
    }

    public class CfgIni
    {

        StreamReader sr = null;
        StreamWriter sw = null;
        FileStream fs = null;
        List<INISection> sections;
        string file;

        public CfgIni(string FileName)
        {
            file = FileName;
            sections = new List<INISection>();
            ParseIniFile();
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public void Close()
        {
            sections = null;
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public void AddParametr(string section_name, string parametr_name, string value)
        {
            //создаем нувую строку параметров для секции по ее имени
            int index = GetSectionIndex(section_name);
            if (index != -1) { CreateParametr(index, parametr_name, value); }
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public void CreateParametr(int section_index, string parametr_name, string value)
        {
            //создаем нувую строку параметров для секции по ее индексу
            if (!sections[section_index].INIParametr.Contains(parametr_name))
                {
                    sections[section_index].INIParametr.Add(parametr_name);
                    sections[section_index].INIValue.Add(value);
                    SaveIniFile();
                }
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public int CreateSection(string section_name)
        {
            //создаем новую секцию
            int i = 0;
            bool flag = false;
            while (i != sections.Count)
            {
                if (sections[i].INISectionName == section_name)
                {
                    flag = true;
                }
            }
            if (!flag)
            {
                INISection section = new INISection();
                section.INISectionName = section_name;
                sections.Add(section);
                SaveIniFile();
                return sections.Count - 1;
            }
            else return -1;

        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public void SaveIniFile()
        {
            //сохраняем изменения в файл
            try
            {
                fs = new FileStream(file, FileMode.Create);
                sw = new StreamWriter(fs);

                int i = 0;
                while (i != sections.Count)
                {
                    sw.WriteLine("[" + sections[i].INISectionName + "]");
                    int j = 0;
                    while (j != sections[i].INIParametr.Count)
                    {
                        sw.WriteLine(sections[i].INIParametr[j] + "=" + sections[i].INIValue[j]);
                        j++;
                    }
                    i++;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                sw.Dispose();
                fs.Dispose();
            }
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public void UpdateValue(string section, string parametr_name, string value)
        {
            //устанваливаем значение Value в секцию Section в параметр с именем Name
            int i = 0;
            while (i != sections.Count)
            {
                if (sections[i].INISectionName == section)
                {
                    int j = 0;
                    while (j != sections[i].INIParametr.Count)
                    {
                        if (sections[i].INIParametr[j] == parametr_name)
                        {
                            sections[i].INIValue[j] = value;
                        }
                        j++;
                    }
                }
                i++;
            }
            SaveIniFile();
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public string GetIniData(string section, string parametr_name)
        {
            //получаем значение Value параметра Name из секции Section
            string Value = null;
            int i = 0;
            while (i != sections.Count)
            {
                if (sections[i].INISectionName == section)
                {
                    int j = 0;
                    while (j != sections[i].INIParametr.Count)
                    {
                        if (sections[i].INIParametr[j] == parametr_name)
                        {
                            Value = sections[i].INIValue[j];
                        }
                        j++;
                    }
                }
                i++;
            }
            return Value;
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public int GetSectionIndex(string section_name)
        {
            //возвращаем индекс секции по ее имени
            int i = 0;
            while (i != sections.Count)
            {
                if (sections[i].INISectionName == section_name)
                {
                    return i;
                }
                i++;
            }
            return -1;
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public string GetSectionName(int index)
        {
            //возврашает имя секции INI - файла по индексу
            string result = null;
            try
            {
                result = sections[index].INISectionName;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            return result;
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public string GetParametrName(int section_index, int parametr_index)
        {
            //возврашает имя параметра в секции по индексу секции INI-файла и индексу параметра
            string result = null;
            try
            {
                result = sections[section_index].INIParametr[parametr_index];
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            return result;
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public string GetParametrName(string section, int parametr_index)
        {
            //возврашает имя параметра в секции по названию секции INI-файла и индексу параметра
            int i = 0;
            string result = null;
            try
            {
                while (i != sections.Count)
                {
                    if (sections[i].INISectionName == section)
                    {
                        result = sections[i].INIParametr[parametr_index];
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            return result;
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
        public void ParseIniFile()
        {
            int tmp;
            string line = "";
            INISection section = null;
            try
            {
                fs = new FileStream(file, FileMode.OpenOrCreate);
                sr = new StreamReader(fs);
                line = sr.ReadLine();
                while (line != null)
                {
                    line = line.Trim();
                    if (line != "")
                    {
                        if (line.Substring(0, 1) == "[")
                        {
                            if (section != null) { sections.Add(section); }
                            tmp = line.IndexOf("]");
                            line = line.Substring(1, tmp - 1);
                            section = new INISection();
                            section.INISectionName = line;
                            line = sr.ReadLine();
                        }
                        else
                        {
                            if (line.Substring(0, 1) != ";")
                            {
                                tmp = line.IndexOf("=");
                                string name = line.Substring(0, tmp);
                                name = name.Trim();
                                section.INIParametr.Add(name);
                                string value = line.Substring(tmp + 1, line.Length - name.Length - 1);
                                value = value.Trim();
                                section.INIValue.Add(value);
                            }
                            line = sr.ReadLine();
                            if (line == null) { sections.Add(section); }
                        }
                    }
                    else
                    {
                        line = sr.ReadLine();
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                sr.Dispose();
                fs.Dispose();
            }
        }
        //********** ********** ********** ********** ********** ********** ********** ********** **********
    }
}


Пример использование:


GUIDE.CfgIni ini = new GUIDE.CfgIni(@"D:\Net\YYY\1.INI");
//если файл существует - открываем его для редактирования, если нет - создаем новый



//добавляем параметр и его значение в указанную секцию
ini.AddParametr("ODBC 32 bit Drivers", "yyy", "xxx");



//создаем новую секцию
ini.CreateSection("Sound");



//получаем значение указанного параметра в указанной секции
ini.GetIniData("Sound", "Baraban");



//изменяем значение
ini.UpdateValue("Sound", "Baraban", "100dB");


Есть и другие методы.
Много еще не сделано. Прошу Ваших комментарий.