<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3915290062440498658</id><updated>2012-02-17T01:03:27.505+06:00</updated><category term='эффекты'/><category term='слои'/><category term='панель управления'/><category term='событие'/><category term='статитстика'/><category term='буфер обмена'/><category term='открытие'/><category term='процессы'/><category term='позиционирование'/><category term='Math'/><category term='parsing'/><category term='MultiThread'/><category term='железо'/><category term='дочерняя форма'/><category term='помощники'/><category term='InlineCode'/><category term='заработок'/><category term='код'/><category term='проигрыватель'/><category term='hion'/><category term='сайт'/><category term='sha'/><category term='type'/><category term='WebBrowser'/><category term='электронная почта'/><category term='арифметика'/><category term='файловый поток'/><category term='программы'/><category term='информация'/><category term='список строк'/><category term='memory'/><category term='конструктор'/><category term='блогун'/><category term='символы'/><category term='память'/><category term='заставка'/><category term='интерфейс'/><category term='двоичные'/><category term='компонент'/><category term='MathParse'/><category term='надпись'/><category term='электронная книга'/><category term='label'/><category term='видеоуроки'/><category term='математика'/><category term='hiasm'/><category term='dll'/><category term='проекты'/><category term='рисование'/><category term='MT-потоки'/><category term='переключатели'/><category term='команды'/><category term='программа'/><category term='ссылка'/><category term='бинарные файлы'/><category term='картинки'/><category term='паять'/><category term='BASS'/><category term='свойства'/><category term='браузер'/><category term='данные'/><category term='таблицы'/><category term='регионы'/><category term='экран'/><category term='параметры'/><category term='блог'/><category term='бинарные'/><category term='пароль'/><category term='панель'/><category term='интернет'/><category term='звук'/><category term='матрицы'/><category term='графика'/><category term='kol'/><category term='сжатие'/><category term='будильник'/><category term='рабочий стол'/><category term='sqlite'/><category term='точки'/><category term='схема'/><category term='сканер'/><category term='морзе'/><category term='мультимедиа'/><category term='mediaplayer'/><category term='метод'/><category term='архив'/><category term='напоминание'/><category term='запись'/><category term='принтер'/><category term='блокнот'/><category term='мультиэлементы'/><category term='файл'/><category term='меню'/><category term='sql'/><category term='activex'/><category term='служебные'/><category term='фоновое приложение'/><category term='шифрование'/><category term='wav'/><category term='группа элементов'/><category term='конвертирование'/><category term='ферзь'/><category term='базы данных'/><category term='dodata'/><category term='компоненты'/><category term='логика'/><category term='настройка'/><category term='подписка'/><category term='секрет'/><category term='zip'/><category term='медиаплеер'/><category term='рисунки'/><title type='text'>HiAsm - программирование без кода</title><subtitle type='html'>Блог о HiAsm: уроки по HiAsm, примеры HiAsm, программы на HiAsm. Всё о HiAsm.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>84</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-1445730432970036062</id><published>2010-08-19T14:04:00.008+06:00</published><updated>2011-07-02T11:45:32.182+06:00</updated><title type='text'>Программирование без компилятора</title><content type='html'>Если вы сейчас подумали, что создавать программы Win32 мы будем без компилятора, то это не так. Компилятор нам понадобится. Суть здесь немного другая. Бывают ситуации, когда у пользователя должен быть достаточно широкий выбор вариантов действий программы. Можно сказать, он должен смочь сделать и свой интерфейс программы, и логику приложения, пусть и для какого-то определённого круга задач.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Например, вы распространяете программу, которая должна позволять пользователю создавать свои программы, нацеленные на узкий круг задач. Это уже смахивает на создание нового HiAsm. Чтобы пользователя смог создать программу с помощью вашей программы, ваша программа, как и HiAsm, должна уметь составлять файлы кода (pas, dpr), общаться с компилятором, подключать ресурсы и т. д. естественно, это сложно. Гораздо проще поступить по-другому: сделать шаблон программы, который пользователь сможет настраивать по-своему, каждый раз получая, по сути, новую программу. Но при этом компилятор ему не понадобится, так как шаблон уже готов и скомпилирован вами.&lt;br /&gt;&lt;br /&gt;Возьмём для примера такой вариант: ваша программа должна предоставлять возможность создавать пользовательские программы, которые должны уметь выключать/перезагружать компьютер, при этом интерфейс должен полностью определяться пользователем. Конечно, можно сразу предоставить готовый вариант, но, во-первых, это только пример, во-вторых же, маленькая собственноручно созданная программа будет удобнее для пользователя, чем одна большая, со множеством настроек.&lt;br /&gt;&lt;br /&gt;У вас должно быть два файла exe: первый - программа для создания пользовательских приложений, второй - шаблон пользовательского приложения. Шаблон должен выводить на себе кнопки, флажки и т. д. так, как задал пользователь. И завершать работу системы, конечно, в соответствии с заданными действиями. Все настройки должны храниться в самом шаблоне (т.е. exe-файле), чтобы пользовательское приложение было самодостаточным и не таскало за собой разные файлы.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Посмотрим, как можно сделать редактор интерфейса в своей программе.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh259.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Итак, в дочерней форме у нас находится редактор интерфейса. Также есть панель, на которой можно выбрать, какие визуальные элементы добавлять. Внизу расположена панель прокрутки, а в ней - панель. Эта панель служит подложкой, чтобы расставляемые компоненты не улетали в верхний левый угол панели прокрутки. И уже в этой панели находится IndexToChanel. Естественно, ведь нам нужно как-то определять, какую кнопку на панели инструментов нажали.&lt;br /&gt;&lt;br /&gt;Первое событие уводит нас в новую дочернюю панель. Заметьте, что это ChilPanelEx, а не ChildPanel, и параметр Mode=Dynamic. Это означает, что создаваться панель будет динамически в ходе выполнения программы и любое количество раз. Это нам и нужно, потому что когда зайдёте в эту панель, то увидите в ней картинку с изображением кнопки. Размеры панели соответствуют размерам кнопки. Она и будет представлять у нас этот компонент.&lt;br /&gt;&lt;br /&gt;Нажмите кнопку «Кнопка» на панели, и изображение кнопки появится, если вы продолжите нажимать, то будут появляться новые копии изображения, но все они будут находиться точно друг под другом, так что их вы не заметите.&lt;br /&gt;&lt;br /&gt;Сейчас следует научить программу перемещать компоненты, изменять их размеры и удалять. Для демонстрационного примера этого хватит.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh260.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Итак, перемещать кнопки достаточно легко. Теперь вы сможете увидеть, что при каждом нажатии клавиши на панели действительно создаётся новая копия компонента «кнопка».&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh261.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;А здесь уже реализовано изменение размера «кнопки». Как видите, при нажатии правой кнопкой мыши запоминаются текущие координаты мыши и размеры динамической панели (именно панели, а на изображения, потому что изменяться размеры будут у панели, а у изображения Align=caClient, оно и так растянется). При перемещении мыши с нажатой правой кнопкой вычисляется разница между текущими координатами и запомненными, а разница прибавляется к запомненным размерам динамической панели.&lt;br /&gt;&lt;br /&gt;Сделаем и удаление компонента.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh262.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Удаление происходит из контекстного меню. Как видите, схема выходит за пределы динамической панели. Всё дело в том, что элемент не может удалить самого себя, т.е. динамическая схема не может взять и удалить себя своим же событием. Таково правило, и потому мы выводим связь за пределы панели. Но там код тоже сложнее, чем мог бы быть. Сначала запоминается идентификатор схемы-источника события. Это необходимо, чтобы знать, какую копию динамической панели удалять. Затем включается таймер. На этом события панели заканчиваются, и удаление панели производит событие таймера, а не событие самой панели, так что всё правильно.&lt;br /&gt;&lt;br /&gt;Здесь важно задать Interval=1, Enable=False и AutoStop=1, чтобы таймер сработал практически сразу и всего 1 раз. Ну а дальше всё просто.&lt;br /&gt;&lt;br /&gt;Не будем усложнять демонстрационную схему и делать реализацию остальных компонентов. Лучше доработаем кнопку.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh263.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Теперь вы можете видеть в списке созданный элемент и удаление его. На основе этого списка будем назначать кнопкам события.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh264.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Итак, теперь у нас появился ещё один список, в который заносятся действия. Всё очень просто, и здесь важно следить, чтобы количество элементов и действий совпадало. Сами действия, конечно, примитивны, но никто не мешает вам в своей программе сделать что-то более осмысленное и сложное.&lt;br /&gt;&lt;br /&gt;Теперь надо как-то сохранять в шаблоне пользовательского приложения (которого у нас пока нет) данные об элементах и действиях. Шаблон у нас - это простой файл exe. Дописывать данные мы будем просто в его конец. Они не повлияют на работу программы, но программа сможет извлечь их оттуда и использовать.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh265.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь программа подготавливает данные для записи. Конечно, нет смысла писать идентификатор кнопки (ведь он каждый раз генерируется автоматически), нет смысла словами писать действия - достаточно индексов. Например, индекс 1 означает, что действие - выключение, 2- перезагрузка и т. д.&lt;br /&gt;&lt;br /&gt;Давайте проследим все действия от нажатия кнопки «Сохранить в шаблон». Первым делом перебирается массив элементов. В нём могут быть кнопки, флажки и прочие компоненты. Но у нас реализованы только кнопки, чтобы было проще. Однако в программе, где будут и другие компоненты, необходимо указывать, какой именно компонент надо создавать (в шаблоне). Поэтому и создан невизуальный список доступных элементов. Из визуального списка извлекается строка, которая разбивается на имя компонента, дефис и идентификатор. Имя входит в doGetIndex, на выходе которого - уникальный индекс. Например, для кнопки это будет 0, для флажка - 1 и пр.&lt;br /&gt;&lt;br /&gt;Дефис нам не нужен. А вот идентификатор динамической панели нам нужен, чтобы узнать её размеры и положение. Но здесь мы задействуем ещё и МТ-поток. Первый элемент этого потока - индекс элемента, второй - идентификатор панели. Когда мы входим в нужный мультиэлемент, МТ-поток разбивается на элементы. Первый элемент - индекс компонента - нужен, чтобы определить какую динамическую панель использовать: панель кнопки, флажка или др. Второй элемент - идентификатор - определяет копию динамической панели. Он её и устанавливает текущей, а затем снимает с нижней точки идентификатор компонента (Handle). Его мы предварительно подключили внутри панели.&lt;br /&gt;&lt;br /&gt;Далее этот идентификатор заносится в глобальную переменную id. И всё, в мультиэлементе ничего более не происходит. Возвращаемся к основной схеме.&lt;br /&gt;&lt;br /&gt;Там вторым событием разветвителя извлекается индекс действия. Это происходит точно так же, как извлекался индекс компонента, так что здесь всё просто. Ну а затем формируются данные для одного компонента: индекс компонента, положение и размеры, индекс действия. И заносится в список. Следом за ним происходит новая итерация цикла, и так пока не переберётся весь список компонентов.&lt;br /&gt;&lt;br /&gt;В конце просто для демонстрации выдаётся содержимое списка. Там одни цифры, что и должно быть. Главное, что мы знаем: на каждый компонент расходуется 6 строк. Большего нам и не надо.&lt;br /&gt;&lt;br /&gt;Запишем теперь это в exe-файл шаблона. Его пока нет, так что запускать схему не нужно. Когда будет сделан шаблон, вы запустите всё вместе.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh266.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Наконец, запись. Здесь всё просто: файл открывается в режиме ReadWrite, чтобы можно было записать, не стирая предыдущие данные. Указатель ставится в самый конец, записываются потоковые данные, а затем - их размер, чтобы можно было считать их в шаблоне. Конечно, перед этим можно было упаковать данные по zip-алгоритму (благо компонент такой есть в HiAsm), но для упрощения я этого не делал. Если у вас большое количество данных, их, несомненно, надо паковать.&lt;br /&gt;&lt;br /&gt;Пора перейти к шаблону.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh267.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Это просто форма. Скомпилируйте её и откройте затем в блокноте (можете сменить расширение на txt). Посмотрите в конец и запомните его. Затем верните расширение обратно, запустите создатель пользовательских приложений, сформируйте кнопки и сохраните в шаблоне (кнопкой из программы). Затем файл bh267.exe опять откройте в блокноте и убедитесь, что в конце появились ваши данные.&lt;br /&gt;&lt;br /&gt;Но ведь программа пока не интерпретирует их! Значит, надо добавить в шаблон эту функцию.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh268.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Тут данные извлекаются из exe. Сначала указатель устанавливается за 4 байта до конца файла - эти байты несут в себе размер данных. Затем указатель откидывается назад на размер данных и на 4 байта (т.к. он в процессе чтения этих 4-х байт сместился на них к концу).&lt;br /&gt;&lt;br /&gt;Сообщение показывает, что данные выданы. Остаётся лишь их интерпретировать. Это несложно. Помните только, что файл шаблона теперь называется по-другому, а потому в программе-создателе его надо исправить. Ну и, конечно, при каждой компиляции шаблона надо вновь заносить в него данные - компилятор ведь собирает программу заново, никаких других данных там не остаётся. Когда вы будете использовать программу вместе с шаблоном, шаблон компилировать не придётся, так что заботиться об этом вам не придётся.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh269.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;А здесь реализуется расстановка кнопок в соответствии с заданными условиями. Число строк в списке делится на 6 - ведь именно столько компонентов и должно быть сделано (на каждый компонент - по 6 строк, не забывайте). Затем запускается цикл, количество итераций которого равно количеству компонентов, в каждой итерации - ещё цикл, у которого 6 итераций (от 0 до 5), каждая вынимает верхнюю строку, а затем удаляет её, так что следующая строка становится верхней.&lt;br /&gt;&lt;br /&gt;Строка интерпретируется в соответствии с её индексом: первая - это индекс компонента (у нас только кнопка, поэтому может быть только 0), следующие 4 - габариты, последнее - индекс действия. Но его я реализовывать не стал, оставив это для вас.&lt;br /&gt;&lt;br /&gt;Для проверки не забудьте поменять в программе-создателе имя файла-шаблона (bh269.exe) и создать нужную конфигурацию, а затем сохранить её в шаблоне. Запускайте этот шаблон и наблюдайте за появлением кнопок. Кстати, в шаблоне это уже не рисунки, а настоящие кнопки.&lt;br /&gt;&lt;br /&gt;Доделать выполнение действие достаточно просто, поэтому я решил предоставить это сделать вам самостоятельно. Подумайте, и у вас получится!&lt;br /&gt;&lt;br /&gt;Напоследок стоит сказать, что удалять данные из шаблона также можно, но лучше, если шаблон у вас будет храниться в каком-либо файле с другим расширением. Когда потребуется записать данные - копируете такой файл, меняете расширение на exe и записываете. Если понадобится что-то изменить - просто удаляете этот файл шаблона и делаете копию нового.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://narod.ru/disk/17824569001/v067.7z.html" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;br&gt;Если файла по ссылке не окажется, напишите в комментариях, и я перезалью его.&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-1445730432970036062?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/1445730432970036062/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/08/blog-post.html#comment-form' title='Комментарии: 44'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/1445730432970036062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/1445730432970036062'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/08/blog-post.html' title='Программирование без компилятора'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>44</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-7936838079975443458</id><published>2010-06-27T14:14:00.006+06:00</published><updated>2010-08-26T14:34:12.568+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='компоненты'/><category scheme='http://www.blogger.com/atom/ns#' term='activex'/><title type='text'>Визуальные компоненты ActiveX</title><content type='html'>&lt;img style="float:left; margin:0 10px 0px 0;width: 217px; height: 80px;" src="http://3.bp.blogspot.com/_g1EvW_ks9UI/TCcJVT0sMrI/AAAAAAAAANY/LXBzuuXMAsI/s400/hiasm.jpg" border="0" alt="Визуальные компоненты ActiveX" id="BLOGGER_PHOTO_ID_5487364932677415602" /&gt;&lt;br /&gt;Если вам не хватает стандартных визуальных компонентов HiAsm, а делать их вы не умеете и ждать не хочется, то можно воспользоваться сторонними разработками в формате ActiveX. Компоненты ActiveX находятся в отдельных файлах *.ocx и могут быть использованы в программе.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Эти компоненты выложил на форуме один из участников в &lt;a href=http://www.hiasm.com/forum.html?q=3&amp;p=151271 target=_blank&gt;этой теме&lt;/a&gt;.  Но это не обычные компоненты для HiAsm, которые можно установить и использовать, а это отдельные файлы ActiveX. В HiAsm есть компонент для работы с ActiveX, однако в предложенном на форуме архиве файлы ActiveX ещё отыскать надо. Там находятся примеры (не для HiAsm, а для Delphi), xml-файлы, справка, много других файлов, но сами ActiveX извлекаются из установочного exe-файла. Чтобы вам так не мучиться, я выбрал самые важные файлы и поместил их &lt;a href=http://hi-asm.narod.ru/compact.rar0&gt;сюда&lt;/a&gt;. Вам надо будет только распаковать архив, а дальше читать эту статью.&lt;br /&gt;&lt;br /&gt;Сами файлы ActiveX находятся во внутренней папке «ActiveX». Каждый из них содержит несколько визуальных элементов. Чтобы эти компоненты можно было использовать в программе, ActiveX должны быть зарегистрированы в системе. Там есть bat-файл для регистрации всех компонентов сразу, но вы можете открыть его в Блокноте и оставить только те, которые вам будут нужны. На другом компьютере тоже понадобится регистрация ActiveX и, естественно, сам файл *.ocx, иначе компоненты не будут отображаться в программе. Поэтому при распространении программы заботьтесь об этом.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Какие же компоненты можно увидеть? В архиве есть файл справки, зайдите в раздел «Iocomp Components» и в «Components by category». На любой странице там вы найдёте картинки возможных компонентов. Нажав на компоненте, можно посмотреть более подробное его описание, правда, только на английском. Компонентов достаточно много, и если они вам нужны, читайте дальше и узнавайте, как их подключать.&lt;br /&gt;&lt;br /&gt;Итак, надеюсь, ActiveX вы уже зарегистрировали. Тогда открывайте HiAsm и на вкладке «Контролы» берите компонент UseActiveX. В редакторе формы он отображается как простая кнопка без надписи. Это естественно, ведь на этом этапе ещё неизвестно, какой компонент вы подключите. Точки для взаимодействия с Activex у компонента уже есть, а другие общие точки прячутся на вкладке «Точки». Они необязательны.&lt;br /&gt;&lt;br /&gt;Для подключения того или иного компонента используется параметр CLSID. Вообще, CLSID - это универсальный идентификатор, у каждого ActiveX он свой. Этот идентификатор генерируется на этапе разработки компонента и становится константой. Однако есть ещё вариант подключения: в том же параметре указать prog.name, которые легко нам узнать из справки. Их мы и будем использовать.&lt;br /&gt;&lt;br /&gt;Выберем какой-либо компонент. Например, на странице справки «Knob and Slider Components» я выбрал Single Turn. Правда, Mutli-Turn и другие - это тот же самый компонент, но с другим оформлением, поэтому о них написано на одной странице.&lt;br /&gt;&lt;br /&gt;Чтобы подключить этот компонент, надо знать название компонента ActiveX. Вверху вы можете видеть: «isAnalogLibrary». Это соответствует одному из ocx-файлов, который и содержит этот элемент. А его имя написано в самом верху - «iKnobX». Точно так же называется и страница справки. Поэтому в параметр CLSID записываем &lt;font color=blue&gt;isAnalogLibrary.iKnobX&lt;/font&gt;. Запускаете программу и видите регулятор.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh253.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;В той же справке страницей выше есть виртуальная клавиатура. Она уже находится в библиотеке «iProfessionalLibrary», называется «iKeyBoardX», поэтому в CLSID будет &lt;font color=blue&gt; iProfessionalLibrary.iKeyBoardX &lt;/font&gt;.&lt;br /&gt;&lt;br /&gt;Но остановимся на предыдущем регуляторе. Ведь без взаимодействия с другими компонентами он бесполезен. А для взаимодействия необходимы методы, свойства, события. В UseActiveX есть три метода: первый вызывает метод ActiveX, второй считывает свойство, третий устанавливает свойство. А также есть события для получения события от ActiveX и получения значения указанного свойства. Это немного необычно для тех, кто привык работать только с компонентами HiAsm, но всё же ради таких компонентов стоит привыкнуть. Тем более что это универсально для всех ActiveX, а их много, вы сможете использовать в программе практически любой.&lt;br /&gt;&lt;br /&gt;Самое главное - узнать названия методов, свойств и событий данного ActiveX, а точнее - используемого элемента. Ведь в UseActiveX дана только одна точка, например, для вызова всех методов. А названия легко узнать из той же справки: в самом верху страницы элемента есть ссылки «Properties», «Methods», «Events», то есть свойства, методы и события. Зайдём, например, в Properties нашего регулятора. Там есть свойство «IndicatorStyle». Зайдите в него, и вы увидите, что возможны 6 значений: от 0 до 5.&lt;br /&gt;&lt;br /&gt;Но как это подать в UseActiveX? Делается это через MT-потоки. Первым элементом указывается имя свойства, затем - значение.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh254.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Очень важно не перепутать точки и значения. Как видите, используется обычный компонент UpDown, чтобы менять значения. Только в его параметре Max установлено 5, потому что для IndicatorStyle это максимум.&lt;br /&gt;&lt;br /&gt;Теперь попробуем вызвать метод у iKnobX. Для этого вернёмся на страницу назад и выберем «Methods». Вот, например, «SavePropertiesToFile». Этот метод сохраняет свойства компонента в файл. Вместе с именем метода нужно передать также имя файла, куда сохранять свойства.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh255.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Разумеется, можно потом загружать свойства из файла другим методом.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh256.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Наконец, события. Без события, происходящего после изменения положения, компонент практически бесполезен. Возвращаемся на страницу компонента, заходим в «Events». Подходящее событие - «OnPositionChangeUser». Но, зайдя в него, видим, что оно ничего не выдаёт (т.к. в скобках после называния события пусто). То есть, позицию это событие получить не позволит. Но это не беда. Ведь есть же свойство «Position», которое можно как установить, так и просто прочитать. Второе мы и будем делать тогда, когда произойдёт нужное событие.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh257.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь я убрал всё лишнее, чтобы не мешало. Как только происходит событие, мы сразу проверяем, называется ли оно «OnPositionChangeUser». Если так, то происходит OnTrue у компонент Case, которое выдаёт строку «Position» (она прописана в параметре «DataOnTrue»). Эта строка передаётся на doGetProp, что означает считывание свойства с заданным именем. На OnGetProp возвращается прочитанное значение.&lt;br /&gt;&lt;br /&gt;Как видите, всё не так просто, как с обычными компонентами HiAsm. Но преимущество ActiveX состоит в том, что их можно использовать не только в HiAsm, а практически в любой среде программирования. И конечно, после освоения компонента UseActiveX вы сможете уже использовать любые ActiveX-компоненты.&lt;br /&gt;&lt;br /&gt;А напоследок посмотрите, как выглядит текст на матрице.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh258.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;И в заключение. Чтобы отменить регистрацию компонентов ActiveX, просто запустите bat-файл отмены. Можете также посмотреть его текст в Блокноте, при необходимости - изменить. В Интернете достаточно сведений об этом формате.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v066.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-7936838079975443458?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/7936838079975443458/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/06/activex.html#comment-form' title='Комментарии: 37'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/7936838079975443458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/7936838079975443458'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/06/activex.html' title='Визуальные компоненты ActiveX'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_g1EvW_ks9UI/TCcJVT0sMrI/AAAAAAAAANY/LXBzuuXMAsI/s72-c/hiasm.jpg' height='72' width='72'/><thr:total>37</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-814777321614488185</id><published>2010-06-15T22:14:00.021+06:00</published><updated>2010-08-26T14:34:47.299+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ссылка'/><category scheme='http://www.blogger.com/atom/ns#' term='браузер'/><title type='text'>Ловим нажатие ссылки в браузере</title><content type='html'>Эта статья для тех, кто хочет получить Url нажатой ссылки в WebBrowser, а затем использовать его по своему усмотрению, а не открывать ссылку.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;На форуме HiAsm не раз проскальзывали сообщения об этом, меня также просили помочь сделать подобное, и вот я взялся за это дело. Всё оказалось гораздо легче, чем можно предположить. Для этого только немного надо подредактировать код компонента WebBrowser. Если вы читали статьи про InlineCode, то быстро поймёте все действия. Стоит лишь напомнить, что код компонента открывается клавишами Ctrl+F, а конфигаруция - Ctrl+G при выделенном компоненте в HiAsm.&lt;br /&gt;&lt;br /&gt;Самое сложное здесь - это отловить нажатие, то есть получить событие по нажатии ссылки. Такого события в компоненте нет. И onMouseDown тоже не подойдёт, потому что при загруженной странице оно не действует.&lt;br /&gt;&lt;br /&gt;Но в файле &lt;font color=blue&gt;KOLSHDocVw.pas&lt;/font&gt;, где описан PKOLWebBrowser (в коде hiWebBrowser есть эта библиотека, только подключается она чуть ниже, чем остальные), есть события &lt;b&gt;OnBeforeNavigate2&lt;/b&gt; и &lt;b&gt;OnNewWindow2&lt;/b&gt;. Первое происходит при активации ссылки, которая открывается в этом же окне, второе - когда открывается новое окно.&lt;br /&gt;&lt;br /&gt;В коде (&lt;font color=blue&gt;hiWebBrowser.pas&lt;/font&gt;) этим событиям назначены процедуры-обработчики: &lt;b&gt;OnNavigate&lt;/b&gt; и &lt;b&gt;OnNewWindow&lt;/b&gt; соответственно. То есть при срабатывании этих процедур можно выполнять какие-то свои действия, связанные со ссылкой. Однако процедуры работают лишь внутри кода и не выведены в компонент в виде события. Это и предстоит сделать.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Делается это очень просто. Добавляем в раздел &lt;i&gt;public&lt;/i&gt; (самое начало кода) переменную типа THI_Event. Например:&lt;br /&gt;&lt;br /&gt;&lt;font color=green&gt;_event_OnUrlActivate:THI_Event;&lt;/font&gt;.&lt;br /&gt;&lt;br /&gt;Эта переменная и отвечает за событие в компоненте.&lt;br /&gt;&lt;br /&gt;Теперь её нужно задействовать в процедурах &lt;b&gt;OnNavigate&lt;/b&gt; и &lt;b&gt;OnNewWindow&lt;/b&gt;. Делается это так:&lt;br /&gt;&lt;br /&gt;&lt;font color=green&gt;_hi_OnEvent(_event_OnUrlActivate,0);&lt;/font&gt;.&lt;br /&gt;&lt;br /&gt;На первом месте стоит имя переменной, а на втором - выдаваемые данные. Пусть в случае &lt;b&gt;OnNavigate&lt;/b&gt; это будет 0, а &lt;b&gt;OnNewWindow&lt;/b&gt; - 1. Это нужно, чтобы отличать, в каком окне открывается ссылка.&lt;br /&gt;&lt;br /&gt;Этот код должен стоять в самом начале процедуры, чтобы выполнялся первым. Дело в том, что в этих процедурах происходит проверка верхних точек компонента: Navigate и NewWindow. Если они равны 0, но соответствующее открытие ссылки произведено не будет. А так как написанный нами код стоит первым, то у нас будет возможность узнать, какая ссылка открывается, решить, стоит ли прерывать её загрузку.&lt;br /&gt;&lt;br /&gt;После этого сохраняйте код компонента и переходите в его конфигурацию. В секции &lt;b&gt;Methods&lt;/b&gt; прописываете такую строку:&lt;br /&gt;&lt;br /&gt;&lt;font color=green&gt;*OnUrlActivate=Событие происходит всякий раз при активации гиперссылки в браузере и выдаёт в поток 0, если ссылка должна открыться в этом же окне, и 1 - если в новом.|2|&lt;/font&gt;.&lt;br /&gt;&lt;br /&gt;OnUrlActivate - это имя точки, оно отличается от имени переменной лишь отсутствием «_event_» (так задумано в HiAsm).&lt;br /&gt;&lt;br /&gt;Звёздочка означает, что точка будет находиться на вкладке «Точки» и по умолчанию в компоненте не видна.&lt;br /&gt;&lt;br /&gt;Затем следует описание точки, а цифра «2» между вертикальными линиями указывает, что это - событие, а не метод, свойство, точка данных. Сохраняйте конфигурацию и перезагружайте HiAsm. Проверьте - точка должна работать.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Теперь надо как-то реализовать запрет загрузки страницы и полчение адреса ссылки. О запрете на загрузку мы уже говорили - достаточно подать на верхние точки - Navigate и NewWindow - нули, и открытия ссылок не произойдёт. А OnUrlActivate произойдёт в любом случае. Получить адрес можно из строки статуса (событие onStatus). Проверьте, если перыве символы равны «http», то это ссылка по соответствующему протоколу (ещё ссылки могут начинаться с «ftp» и др.).&lt;br /&gt;&lt;br /&gt;На всякий случай - вот &lt;noindex&gt;&lt;a href=http://hi-asm.narod.ru/webbrowserurl.rar0 rel="nofollow"&gt;код и конфигурация&lt;/a&gt;&lt;/noindex&gt; компонента (если не хотите самостоятельно изменять код, можете просто установить новый компонент взамен старого).&lt;br /&gt;&lt;br /&gt;Вот схема использования.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh252.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v065.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-814777321614488185?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/814777321614488185/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/06/blog-post.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/814777321614488185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/814777321614488185'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/06/blog-post.html' title='Ловим нажатие ссылки в браузере'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-6352194700114065070</id><published>2010-04-04T14:40:00.012+06:00</published><updated>2010-08-26T14:36:59.535+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='сайт'/><category scheme='http://www.blogger.com/atom/ns#' term='parsing'/><title type='text'>Parsing сайта</title><content type='html'>Вот как раз на днях опять делал небольшую программу, которая существовала у меня недолго, потому что быстро сделала то, что предназначалось, но без неё я затратил бы раз в десять больше времени.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Есть такой сайт - knigka.info, на котором можно скачать книги. Я решил глянуть там литературу по компьютерам, ну и по другим разделам пройтись. Но дело в том, что на каждой странице там выводится только по 10 книг, а ещё надоедливая реклама постоянно мелькает. Это существенно замедляет работу. И я решил скачать все описания к книгам раздела, собрать их в одном файле, а потом уже сидеть и изучать его. Конечно, всё в автоматическом режиме. Без HiAsm - никуда!&lt;br /&gt;&lt;br /&gt;Адреса всех разделов сайта имеют примерно одинаковую структуру. В разделе может быть много страниц, и адрес каждой указывается номером в конце типа http://www.knigka.info/category/pc/page/40/. Передо мной стояла задача пройтись через все страницы и собрать описания книг. Именно описания книг, а не весь HTML-код страницы: зачем он мне с рекламой и прочими ненужными вещами?&lt;br /&gt;&lt;br /&gt;Прежде всего, нужно скачать HTML-код страницы.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh242.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;В HTTP_Get должно быть установлено Wait=False, чтобы программа не зависала на время загрузки. Закачивать данные мы будем не в файл, а в программу, потому указывать имя файла не нужно.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh243.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;HTTP_Get выдаёт на onDownload данные типа файловый поток, и их нужно преобразовать в текстовые данные, что и делает конвертор. А затем уже разбирать HTML-код.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Но сильный разбор здесь не нужен. Я стремился к тому, чтобы было как можно меньше действий. Пусть оформление описания остаётся таким же, как на сайте, главное - чтобы на одной странице были собраны сразу все книги.&lt;br /&gt;&lt;br /&gt;Если открыть HTML-код любой страницы разбираемого сайта, то можно увидеть, что каждое описание - это отдельная таблица, которая заключена в такие теги:&lt;br /&gt;&lt;br /&gt;&lt;font color=blue&gt;&lt; table class="cblock"&gt;&lt;br /&gt;&lt; /table&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Вот мы и вытаскиваем данные из таблиц компонентом BlockFind. Но проблема в том, что в такие теги заключены не только описания книг - в такие теги заключена одна из реклам, самая первая в HTML-коде. И её нужно отсеять. Для этого и нужен счётчик. У него всего 11 возможных значений: от 0 до 10. При нахождении каждой таблицы значение счётчика увеличивается. Первым будет 0; программа проверяет его на равенство нулю и при равенстве - не пропускает такую таблицу. А остальные 10 таблиц (они содержат описания книг) - пропускает.&lt;br /&gt;&lt;br /&gt;После этого указанные таблицы на странице кончаются, загружается новая страница, и всё повторяется. А счётчик со значения 10 переходит на 0, и рекламная таблица опять не попадает в файл. Файл же сохраняется после разбора каждой страницы.&lt;br /&gt;&lt;br /&gt;Но так мы загружаем только одну страницу, а нужно - все из данного раздела.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh244.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;В данном случае мы просто меняем адрес страницы в поле ввода, но разбор этого адреса - не такое просто дело, как может показаться. Для начала мы отделяем число. Оно идёт после 6-го слеша, поэтому это легко делается одним компонентом. Затем отнимаем единицу и проверяем, не равно ли оно нулю. Если равно - ничего не происходит, потому что нулевых страниц на сайте нет.&lt;br /&gt;&lt;br /&gt;Если число не равно нулю, то предыдущее нужно заменить новым, которое меньше на 1. Просто Replace здесь может не помочь, потому что если такое же число будет в названии какого-то раздела сайта, то заменится и оно, а нам нужно только изменить страницу. Удалить N-ное количество последних символов тоже не получится, потому что страница может иметь и номер 1, и номер 144, и количество цифр будет разным.&lt;br /&gt;&lt;br /&gt;Возможно, можно было как-то по-другому решить эту проблему, более красиво, но я думать над этим не стал, потому что программа эта одноразовая, и чем скорее я её сделаю, тем лучше. В данном случае я просто сравниваю символы с конца на равенство «/» и при неравенстве - удаляю символ. Когда дело дойдёт до «/», это будет значить, что номер страницы полностью стёрт. Конечно, в этом случае самый последний слеш (который после номера страницы) нужно убирать ещё в поле ввода вручную, иначе алгоритм удаления на нём и остановится, не добравшись до номера страницы.&lt;br /&gt;&lt;br /&gt;А потом оставалось только найти файл CSS в Temporary Internet Files и поместить его рядом с файлом HTML, прописав в последнем положение файла CSS, чтобы форматирование было одинаковым.&lt;br /&gt;&lt;br /&gt;Конструирование этой программы заняло у меня минут 15 (это ещё с небольшим перерывом, чтобы ответить по телефону), а сэкономило мне пару часов как минимум....&lt;br /&gt;Вот так.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v064.part01.rar0" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;a href="http://hi-asm.narod.ru/video/v064.part02.rar0" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;a href="http://hi-asm.narod.ru/video/v064.part03.rar0" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Хотите что-нибудь интересного и новенького, а ещё и полезного? Рекомендую посмотреть &lt;a href='http://samodelki.org/'&gt;компьютерные самоделки&lt;/a&gt;. Там реально прикольные вещи, которые можно сделать самостоятельно!&lt;br /&gt;&lt;br /&gt;В изучении английского языка очень помогает запоминание &lt;a href="http://sasmp-magnet.narod.ru/"&gt;английских слов&lt;/a&gt;. Вы получаете мощнейший инструмент для работы со своей памятью и усвоения иностранных слов.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-6352194700114065070?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/6352194700114065070/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/04/parsing.html#comment-form' title='Комментарии: 34'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/6352194700114065070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/6352194700114065070'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/04/parsing.html' title='Parsing сайта'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>34</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-4896137890156658435</id><published>2010-03-20T10:47:00.006+05:00</published><updated>2010-08-26T14:37:38.736+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hion'/><title type='text'>HiOn - HiAsm Online</title><content type='html'>Сегодня я расскажу про новый проект от разработчиков HiAsm - &lt;a href="http://hion.hiasm.com/" target=_blank rel=nofollow&gt;HiAsm Online&lt;/a&gt;. Правда, он уже не совсем новый - открылся в начала этого месяца. С того времени в него добавилось несколько новых компонентов, хотя он всё ещё очень примитивен по сравнению с настоящим HiAsm. Но большинство людей на форуме видят в нём перспективу.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Что же такое HiOn? Это тот же HiAsm, только на веб-странице. Прямо в онлайн можно конструировать схему в браузере и запускать прямо из браузера готовую программу. Но не всё так просто, как кажется. Реального приложения EXE не получается. Вся сборка идёт с помощью Javascript, и это лишь грубая имитация программы EXE. Соответственно, не могут быть реализованы компоненты, функционал которых не поддерживается JavaScript.&lt;br /&gt;&lt;br /&gt;HiOn работает практически во всех браузерах, кроме IE. На данный момент в нём насчитывается 19 компонентов. Компоненты напоминают аналогичные из HiAsm, но с гораздо меньшим функционалом. Способны выполнять примитивные действия типа вывода сообщения в окне. А компонента «Форма» вообще имеет только одну точку - метод изменения надписи в заголовке.&lt;br /&gt;&lt;br /&gt;Есть кнопки сохранения и открытия проектов, но они сами ничего не сохраняют и не загружают, а лишь показывают или принимают код схемы. Есть также редактор формы.&lt;br /&gt;&lt;br /&gt;В целом это напоминает HiAsm первых версий. В нём тоже сначала было очень мало компонентов, функций и удобств, но постепенно всё добавлялось. HiOn же реализовать гораздо труднее, потому что на JavaScript, как уже говорилось, много не реализовать. Но значит ли это, что HiOn бесполезен?&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;В том виде, в каком он сейчас, - да, он представляет «чисто научный интерес». Поэтому я сейчас рассмотрю плюсы и минусы для версии HiOn, которая будет хотя бы чуть-чуть подтянута к уровню HiAsm. Например, можно будет сохранять файла на сервере в своём профиле.&lt;br /&gt;&lt;br /&gt;+ Сохранение файлов в своём профиле и доступ к ним из любой точки мира. С этим, конечно, можно поспорить, ведь нетрудно, наверное, взять с собой флэшку со схемами. Но её можно и забыть, и на сервере схемы останутся.&lt;br /&gt;+ Обмен схемами с участниками форума. Это тоже немаловажно. Если будет возможность собирать схему не одному человеку, а сразу нескольким иметь доступ к схеме, то это может представлять интерес.&lt;br /&gt;&lt;br /&gt;- Если нет Интернета или накрылся сервер, то вся информация в лучшем случае может быть «временно недоступна».&lt;br /&gt;- Некоторые браузеры не поддерживают эту технологию, например IE. А кто-то пользуется только этим браузером и уже привык к нему.&lt;br /&gt;&lt;br /&gt;Это предварительные наброски достоинств и недостатков. Те, кто пользовался HiOn, могут высказывать свои мнения в комментариях.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Если у вас сломался ноутбук, то пора  сделать &lt;a href="http://noteplus.ru/"&gt;ремонт ноутбуков м. Новокузнецкая&lt;/a&gt;. Производится также обслуживание ноутбуков, например, восстановление данных.&lt;br /&gt;&lt;br /&gt;Если вам нужно место для ведения бизнеса, то вы &lt;a href='http://www.kr-pro.ru/'&gt;можете снять помещение под офис&lt;/a&gt;. Никаких посредников - только собственник!&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-4896137890156658435?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/4896137890156658435/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/03/hion-hiasm-online.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4896137890156658435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4896137890156658435'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/03/hion-hiasm-online.html' title='HiOn - HiAsm Online'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-982350433891674368</id><published>2010-03-13T16:25:00.005+05:00</published><updated>2010-08-26T14:38:15.741+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hiasm'/><title type='text'>В чём вам помог HiAsm?</title><content type='html'>В последнее время мои читатели всё чаще стали намекать мне, что пора бы выложить новые видеоуроки. Вчера я как раз собрался записать несколько новых видеоуроков, но как только я прикоснулся к микрофону, он стрельнул искрой и навсегда замолк… Вывод: надо быть аккуратнее со статическим электричеством.&lt;br /&gt;Но это отступление. Тема поста совсем другая.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Я уже настолько привык к HiAsm, что считаю его естественной частью компьютера, почти не замечая, что это всё-таки отдельная программа. Но о незаменимости этой незаметной программы я задумался недавно. Ведь на протяжении всего времени с помощью HiAsm мне удавалось сделать то, что вручную и делал бы несколько часов, а то и дней…&lt;br /&gt;&lt;br /&gt;Я познакомился с HiAsm в 2005 году. Тогда я ещё не знал сайт и форум HiAsm, а первую свою версию HiAsm скачал с сайта &lt;a href=http://www.freeware.ru/ target=_blank&gt;Freeware.ru&lt;/a&gt;. Это была версия 2.13. В ней была ошибка: сохранённые проекты не открывались, и поэтому я не мог делать в ней более-менее серьёзных проектов, ведь доделать их было невозможно (тем более что с мультиэлементами там тоже была критическая ошибка).&lt;br /&gt;&lt;br /&gt;Первая программа, которую я сделал на HiAsm, была очень простой и при нажатии кнопки на форме просто выводила новую строку из заранее приготовленного файла. Изменяя текст в файле, можно было делать что-то вроде пошаговых руководств.&lt;br /&gt;&lt;br /&gt;Когда я скачал более позднюю версию HiAsm, в которой не было такой ошибки, то первыми моими идеями были создание плеера и просмотрщика картинок (наверно, не я один такой :). Конечно, фотошоп и ворд я не создал, но это были одни из самых крупных моих проектов. Только файл проекта просмотрщика весил около мегабайта!&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Со временем такие замашки прошли. Я и сейчас хочу сделать для себя плеер, который будет заточен под мои надобности, но встраивать в него код «на все случаи жизни» не собираюсь.&lt;br /&gt;&lt;br /&gt;Дальше были в основном небольшие программы, например программа для отображения рисунка, которая располагает его мозаикой. Это удобно при просмотре картинок-узоров для веб-страниц. Преимущество состоит в быстроте работы с программой.&lt;br /&gt;&lt;br /&gt;Также была программа для фотографирования экрана, потому что одна электронная книга блокировала кнопку PrentScreen. Была программа для выполнения операций над числами в разных системах счисления. И очень много было проектов (много - потому что они маленькие, и после однократной работы программы сразу удалялись) для замены символов в тексте. С простой заменой справится и Блокнот, но когда заменить нужно, допустим, с символа '&lt;' по символ ‘&gt;’ во многих файлах, то работать через Блокнот - о-очень долго…&lt;br /&gt;&lt;br /&gt;В общем, HiAsm очень упростил мою работу за компьютером. И мне интересно у знать, кому как ещё помог HiAsm. Оставляйте комментарии.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Если вы хотите выучить английский язык, то начните с &lt;a href="http://sasmp-magnet.narod.ru/"&gt;запоминания английских слов&lt;/a&gt;! Система АСМП "Магнит" позволяет запоминать по несколько сотен слов в день.&lt;br /&gt;&lt;br /&gt;Скачать &lt;a href="http://eng-audio.narod.ru/audio2/audio008.html"&gt;бесплатно аудиокнигу&lt;/a&gt; "Собака Баскервиллей" на английском языке. А также много других аудиокниг на английском языке.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-982350433891674368?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/982350433891674368/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/03/hiasm.html#comment-form' title='Комментарии: 41'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/982350433891674368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/982350433891674368'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/03/hiasm.html' title='В чём вам помог HiAsm?'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>41</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-3974495835409698172</id><published>2010-03-05T17:00:00.006+05:00</published><updated>2010-08-26T14:38:46.948+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='код'/><category scheme='http://www.blogger.com/atom/ns#' term='InlineCode'/><title type='text'>Время работы Windows</title><content type='html'>Сегодня снова поговорим про IC, но сейчас я покажу функции, которых нет в стандартных компонентах HiAsm. Вы также узнаете, где хранятся такие функции и как их использовать.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Работать будем на примере функции WinAPI, которая возвращает время, прошедшее с последней перезагрузки системы. Стоит отметить, что функции WinAPI - это стандартные функции операционной системы Windows, поэтому для их использования нужно подключить библиотеку Windows, а другие функции WinAPI искать в справочниках по WinAPI.&lt;br /&gt;&lt;br /&gt;Нужная нам функция - это &lt;font color=blue&gt;GetCurrentTime&lt;/font&gt;. Она не имеет параметров. Именно так её и прописывают в коде.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh235.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Время возвращается в миллисекундах. Это самый простой код, который здесь возможен. Но нас это вряд ли устроит. Гораздо удобнее видеть часы, минуты и секунды, чем миллисекунды. И прямо в IC мы переведём наше время.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh236.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Разберём этот код.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;var gct,h,m,s:integer;&lt;/b&gt; - это объявление переменных. Все они идут через запятую, потому что принадлежат одному типу - integer, то есть целое число.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;gct := GetCurrentTime;&lt;/b&gt; - это присваивание переменной gct результата функции GetCurrentTime.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;h := gct div 3600000;&lt;/b&gt; - это математическая операция. DIV - это целочисленное деление, то есть деление без остатка. Например, 5 div 3 = 1. А здесь мы получаем количество часов, потому что в одном часе 3 600 000 миллисекунд.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;gct := gct mod 3600000;&lt;/b&gt; - тут мы узнаём остаток, потому что MOD - это остаток от деления. Например, 5 mod 3 = 2. Нам это необходимо, чтобы исключить часы, которые уже записаны в переменную h, и теперь в переменной gct останутся уже минуты.&lt;br /&gt;&lt;br /&gt;Следующие операции аналогичны вышеописанным, только происходит извлечение уже не часов, а минут и секунд. После последней операции mod в переменной gct содержатся только миллисекунды.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;При выводе мы пользуемся функцией &lt;font color=blue&gt;int2str&lt;/font&gt;, потому что нужно преобразовать числа в строки (при сложении чисел и сложении строк получаются разные результаты. Например, при сложении числе 23 и 56 получится 79, а при сложении строк 23 и 56 получится 2356). Также мы добавляем двоеточие между часами, минутами, секундами и миллисекундами.&lt;br /&gt;&lt;br /&gt;Теперь программ уже неплохо отображает время, но осталась одна маленькая неприятность: если число однозначное, то оно так и выводится, например 33:1:560 вместо 33:01:560. Ведь ноль слева не нужен для чисел, а вот для нас он нужен.&lt;br /&gt;&lt;br /&gt;И сейчас мы изменим код, чтобы к однозначным числам добавлялся ноль (точнее, не числам, а строкам, потому что только строкам можно приписывать любые символы, а числам приписать ничего нельзя - можно только прибавить или отнять).&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh237.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Обратите внимание на изменения! Самое первое - изменился тип переменных h, m, s. Дело в том, что теперь мы присваиваем им не числа, а строки, потому что результаты математических операций сразу преобразовываем в строки. А затем идёт конструкция if…then…else, про которую я рассказывал в предыдущих статьях. Мы проверяем длину строки, и если она равна 1, то слева добавляем ноль. Помните, что ноль добавляется именно в виде строки, а не в виде числа, а потому заключён в кавычки.&lt;br /&gt;&lt;br /&gt;И только переменная gct остаётся у нас числовой переменной, поэтому при выводе на событие мы преобразовываем её в строку.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Теперь о том, где можно найти разные функции. Как уже говорилось, WinAPI нужно искать в справочниках по WinAPI. Различные функции KOL можно найти в самом KOL (compiler\fpc\KOL.pas). Там к ним есть описание. Помните только, что для использования функций какой-либо библиотеки она должна быть подключена в разделе uses.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v063.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Заболела кошка - вам поможет &lt;a href='http://www.biocontrol.ru/uslugi-i-ceny/vyzov-vracha-na-dom.html'&gt;вызов ветеринара на дом&lt;/a&gt;. На дому выполняются разные услуги, например ультразвуковое исследование органов.&lt;br /&gt;&lt;br /&gt;Запоминание английских слов происходит легко и естественно с &lt;a href="http://sasmp-magnet.narod.ru/"&gt;системой АСМП "Магнит"&lt;/a&gt;.  Выучите английский язык с этой системой!&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-3974495835409698172?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/3974495835409698172/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/03/windows.html#comment-form' title='Комментарии: 12'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3974495835409698172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3974495835409698172'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/03/windows.html' title='Время работы Windows'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-8228820046864910140</id><published>2010-03-02T23:47:00.005+05:00</published><updated>2010-08-26T14:39:13.340+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='видеоуроки'/><title type='text'>Видеоуроки по HiAsm-2, или как сжимать видео</title><content type='html'>В HiAsm появились новые видеоуроки. Но не это толкнуло меня на написание этого поста, а то, как эти видеоуроки создавались. Дело в том, что раньше видеоуроки были в формате exe, они проигрывались uvPalyer'ом, и в них нельзя было установить позицию проигрывания и много другое. Преимуществом их был малый размер. И я стал искать кодек, который бы хорошо сжимал фильмы, чтобы выкладывать именно файлы avi, а не exe.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Раньше я никогда не сталкивался с необходимостью сжимать видеофайлы, так как большинство их у меня на разных дисках DVD и место на винчестере не занимают. Так что я даже не представлял, с чего мне начать поиск. Я пробовал разные кодеки, установленные в системе, но все давали неутешительный результат. Хотелось, чтобы конечные файлы были не больше 5 Мб, потому что это максимальный размер файла на Narod.ru.&lt;br /&gt;&lt;br /&gt;Файлы, которые получались при сжатии DivX или XviD, были не очень большими, но всё же больше 5 Мб. А главное - их практически невозможно было упаковать в архив, потому что эти файла и так сжаты практически до предела. Казалось, что положение безвыходное, и придётся пока всё оставить так, как есть.&lt;br /&gt;&lt;br /&gt;Но совершенно случайно я, когда наводил порядок у себя на компе, нашёл архив с видеоуроком по установке SoftIce. Архив весил 377 Кб, а распакованное из него видео - 120 Мб! Это поразило меня (особенно с учётом того, что я вёл поиски способов хорошего сжатия файлов). Я скорее посмотрел, каким кодеком сжат файл. Это был CRAM (Microsoft Video 1).&lt;br /&gt;&lt;br /&gt;Поскольку у меня все видеоуроки были в формате exe, то открыть их в UVScreenCamera ( где они и создавались) не представляло сложности. Через UVScreenCamera я и переконвертировал их с найденным кодеком. Размер файла, конечно, меня ужаснул: 1,24 Гб! Но после сжатия архив весил довольно мало: всего 4 Мб.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;С другими видеоуроками, которые сами по себе были большими, всё получилось хуже: они весили больше 5 Мб. Я пробовал ухудшать качество видео, но приемлемый размер достигался только при очень низком качестве.&lt;br /&gt;&lt;br /&gt;Меня удивляло вот что. Когда я запаковывал видео в архив 7z, архиватор показывал степень сжатия 1% или даже 0%. Размер файла постепенно увеличивался, но не должен был достигнуть даже 5 Мб! Однако в самом конце, когда до конца архивирования оставалось 1-2%, размер архива вдруг резко увеличивался.&lt;br /&gt;&lt;br /&gt;Аудио, подумал я. И не ошибся. Действительно, архиватор хорошо сжимает видео, запакованное кодеком CRAM, а аудио по-прежнему жмёт плохо. И я решил править аудио. Впрочем, битрейт его и так был низок: я устанавливал самые экономные настройки в UVScreenCamera. Но всё же я хотел ужать немного ещё.&lt;br /&gt;&lt;br /&gt;С помощью VirtualDub я вынул WAV из видео и решил пересохранить его через NeroWaveEditor. Но у меня ничего не получалось: даже при самом низком качестве конечный файл всё равно был больше, чем вынутый из видео. Тогда я решил глянуть, какие же характеристики у него. В K-Lite Codec Pack есть отличная программка - mediainfo. Она показала, что…это не wav, а mp3! Несмотря на то, что расширение у файла было wav и заголовок был RIFF. Вот почему размер файла был небольшим: это был mp3 с заголовком wav! А настоящий wav так хорошо сжать никогда бы не удалось (с приемлемым качеством, разумеется).&lt;br /&gt;&lt;br /&gt;Хотел я пересохранить файл как mp3, но опять ничего не вышло: NeroWaveEditor упорно отказывается сохранять mp3 с битрейтом ниже 32 Kbps! Пришлось мне искать в Интернете lame.exe и через командную строку приводить битрейт к 16 Kbps. Получившийся mp3-файл был в 2 раза меньше оригинала.&lt;br /&gt;&lt;br /&gt;Но это был mp3, а VirtualDub (в котором я и собирался назначить видеофайлу новое аудио) принимает только wav. Поэтому мне пришлось скачивать ещё одну программу, которая бы прописывала в ,p3-файл заголовок wav. И только тогда VirtualDub принял у меня файл, пересохранил видео, а архиватор наконец-то сжал его до приемлемого размера.&lt;br /&gt;&lt;br /&gt;Я надеюсь, что мой опыт будет полезен для тех, кто собирается создавать свои видеоуроки или сжимать своё видео. Только следует помнить, что размер avi не может быть больше 2 Гб, поэтому если оригинальное видео достаточно большое, то кодеком CRAM его лучше не пытаться сжать: ничего не получится. А для небольших видеоуроков - в самый раз.&lt;br /&gt;&lt;br /&gt;Конечно же, я дам ссылки на программы, которыми я пользовался. Без любимого HiAsm тоже не обошлось: запускать lame из командной строки очень неудобно, и я сделал на HiAsm программу-надстройку над lame.exe.&lt;br /&gt;&lt;br /&gt;&lt;a href=http://hi-asm.narod.ru/lame.rar0&gt;lame&lt;/a&gt; - это и сама lame, и проект HiAsm - надстройка.&lt;br /&gt;&lt;br /&gt;&lt;a href=http://hi-asm.narod.ru/wavemp3.rar0&gt;WaveMp3&lt;/a&gt; - это программа для прописывания wav-заголовка файлу mp3, чтобы его можно было использовать в VirtualDub.&lt;br /&gt;&lt;br /&gt;Напоминаю, что появились новые видеоуроки по HiAsm, а старые заменены видеофайлами вместо exe. Приятного просмотра!&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Если вам нужны услуги профессионального агентства по рекламе, обратитесь в &lt;a href='http://www.connexx.nl/website.laten.maken/'&gt;website maken&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Учим английский язык вместе с &lt;a href="http://eng-audio.narod.ru/"&gt;Илоной Давыдовой&lt;/a&gt;. Много аудиоуроков Илоны Давыдовой и Риты Беловой.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-8228820046864910140?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/8228820046864910140/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/03/hiasm-2.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8228820046864910140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8228820046864910140'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/03/hiasm-2.html' title='Видеоуроки по HiAsm-2, или как сжимать видео'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-8720758024477757831</id><published>2010-02-27T13:27:00.007+05:00</published><updated>2010-08-26T14:46:38.567+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hiasm'/><title type='text'>Новый дизайн сайта HiAsm</title><content type='html'>Совсем недавно изменился дизайн главной страницы сайта HiAsm &lt;a href=http://hiasm.com target=_blank&gt;hiasm.com&lt;/a&gt;. Разговор об этом начался ещё в начале февраля. Теперь же страница приведена, как выразился Dilma, к более строгому «коммерческому» виду.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;На форуме отношение к этому разное, но большинству новый дизайн понравился. Однако посмотрим, что же там на самом деле.&lt;br /&gt;&lt;br /&gt;Начать стоит с того, что страница оптимизирована под разрешение экрана 1024*768. У тех, кто использует 800*600, часть страницы будет скрыта, и придётся прокручивать, чтобы увидеть её.&lt;br /&gt;&lt;br /&gt;Все основные ссылки, ведущие на форум, видеоуроки, скачивание, теперь расположены сверху. Только вот ссылку на Upload там не видно. Пока причина этого мне не ясна, но ссылка на Upload была очень удобна. Также убрана ссылка на старый форум, что радует.&lt;br /&gt;&lt;br /&gt;Ниже идёт картинка с названием сайта, а затем - картинка со схемой HiAsm. На этой картинке дана ссылка на скачивание последней версии, причём её расположение очень символично: она присоединена связью к компонентам «схемы». Справа есть три рисунка, которые тоже похожи на ссылки (Windows, PocketPC и Web), но в IE6 они отображаются просто как картинки.&lt;br /&gt;&lt;br /&gt;Вообще это стало модой - картинка в пол-экрана. Но в данном случае картинка сразу показывает, с чем предстоит столкнуться пользователям HiAsm. Пускай новички смотрят и привыкают.&lt;br /&gt;&lt;br /&gt;Ниже показывается, видимо, последняя тема форума, а ещё ниже - три категории (среда, дополнения и ресурсы). Под каждой из них есть ссылка «подробнее», но у меня ссылка не работает, к сожалению, так что проверить не могу. Наверное, это связано с ie6 либо страница ещё недоделана.&lt;br /&gt;&lt;br /&gt;Форум же по-прежнему остаётся в старом стиле, с очень неудобной навигацией из-за невозможности использовать кнопки браузера «назад» и «вперёд».&lt;br /&gt;&lt;br /&gt;Если сравнивать с предыдущим дизайном, то красивость главной страницы, несомненно, увеличилась. Однако теперь придётся привыкать к новому расположению ссылок, а рука так и тянется в левую сторону, туда, где раньше были все основные ссылки.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Раскрутке вашего сайта определённо нужна контекстная реклама. Хороша &lt;a href='http://www.web-promo.com.ua/kontekstnaja-internet-reklama/'&gt;реклама в интернете&lt;/a&gt; тем, что вы сами определяете, сколько тратьи на рекламу, а платите вы только при переходе на ваш сайт по рекламной ссылке.&lt;br /&gt;&lt;br /&gt;Пройдите разные &lt;a href="http://eng-tests.narod.ru"&gt;тесты по английскому языку&lt;/a&gt; и проверьте своё знание английского! Есть тесты по грамматике (артикль, части речи и др.), есть и тесты по английским словам.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-8720758024477757831?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/8720758024477757831/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/hiasm_27.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8720758024477757831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8720758024477757831'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/hiasm_27.html' title='Новый дизайн сайта HiAsm'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-5180123433833933005</id><published>2010-02-25T20:24:00.007+05:00</published><updated>2010-08-26T14:47:28.526+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='код'/><category scheme='http://www.blogger.com/atom/ns#' term='InlineCode'/><title type='text'>Код для IC</title><content type='html'>Из прошлых статей вы знаете, как создавать основные вещи в InlineCode, например процедуры, другие точки, переменные. Но всё это вспомогательная вещь, а самая главная - рабочий код, который будет выполнять действия. Откуда же его брать?&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;InlineCode может использоваться в HiAsm в двух целях:&lt;br /&gt;1. для написания кода, который нельзя реализовать на стандартных компонентах;&lt;br /&gt;2. для объединения кода нескольких стандартных компонентов для оптимизации занимаемого в схеме места.&lt;br /&gt;&lt;br /&gt;Второй пункт немаловажен, потому что иногда для построения какого-либо алгоритма приходится ставить очень много компонентов, а в IC тот же алгоритм реализуется на нескольких строчках кода. Поэтому у вас теперь есть выбор: в некоторых случаях можно использовать компоненты HiAsm, в других случаях - IC. Это оптимизирует схему.&lt;br /&gt;&lt;br /&gt;Именно про второй способ я расскажу сегодня. Про первый - уже в следующей статье.&lt;br /&gt;&lt;br /&gt;Итак, например, нам нужно обработать много строк. Скажем, взять из каждой строки последний символ, сравнить его со вторым, и если они совпадают, то удалить последний символ, если нет - заменить последний символ вторым.&lt;br /&gt;&lt;br /&gt;Посмотрим, как это реализуется на стандартных компонентах HiAsm.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh232.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Вы видите, сколько компонентов и связей нужно сделать для реализации такой несложной идеи. Если такой алгоритм часто встречается в программе, то лучше всего его поместить во вложенную схему и вставлять копии по мере необходимости.&lt;br /&gt;&lt;br /&gt;Теперь посмотрим, как то же самое реализуется в IC.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh233.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Код для вас здесь пока непонятен. Но сразу можно сказать, что здесь не две строки кода. Самое объёмное (по коду) - это создание диалога открытия файла и создание списка строк и загрузка в него файла. Поэтому эти вещи делать в IC невыгодно, их лучше оставлять в виде компонентов HiAsm. А теперь смотрим окончательный вариант.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh234.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Симбиоз стандартных компонентов HiAsm и IC даёт отличные результаты. В IC написано практически три строки кода (блок &lt;b&gt;if…the…else&lt;/b&gt; - это один блок, но я разбил его на две строки только для удобства чтения кода).&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Разберём этот код. Как вы видите, на метод &lt;b&gt;doBegin&lt;/b&gt; подаётся строка, причём несколько раз - столько, сколько строк в файле. Значит, код должен просто обрабатывать строку.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;var s:string;&lt;/b&gt; - это объявление локальной переменной, про неё я рассказывал в прошлой статье блога. Имя переменной - s, тип - string (строковая переменная).&lt;br /&gt;&lt;br /&gt;Ещё бывают такие виды переменных:&lt;br /&gt;&lt;b&gt;integer - целое число в 4 байта;&lt;br /&gt;real - число с плавающей точкой (8 байт);&lt;br /&gt;boolean - логический тип, который может принимать только два значения: true (истина) и false (ложь).&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;На деле типов переменных может быть гораздо больше, если учитывать объекты, например PstrList, Pstream, PopenSaveDialog. Но о них нужно вести отдельный разговор, поскольку это объекты и имеют много своих свойств.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;if ToString(dt)&amp;#60;&amp;#62;'' then s := ToString(dt);&lt;/b&gt; - это условный блок в сокращенной форме. Полная выглядит так: &lt;font color=blue&gt;if…the…else&lt;/font&gt;, что переводится как &lt;font color=green&gt;если…то….иначе&lt;/font&gt;. Если выполняется условия после if, происходят действия после then, если не выполняется - происходят действия после else.&lt;br /&gt;&lt;br /&gt;ToString(dt) - это вы уже знаете по прошлой статье. С помощью этой функции мы получаем строку из потока. А вот дальше мы сравниваем её со строкой-константой (все строки в Pascal заключаются в одинарные кавычки). Символы &lt;font color=green&gt;&amp;#60;&amp;#62;&lt;/font&gt; - это сравнение на неравенство. А сравниваем мы с пустой строкой, так как между кавычками ничего нет.&lt;br /&gt;&lt;br /&gt;Если строка не пуста, то переменной s присваивается эта самая строка из потока. То есть, переменная s теперь содержит эту строку. Это необходимо - помещать данные из потока или с точек в переменные, если происходит дальнейшая работа с ними. Ведь если мы удалим из такой строки символ, то как потом узнать, что получилось? Повторный вызов ToString(dt) прочитает исходную строку, а не ту, из которой мы удаляли.&lt;br /&gt;&lt;br /&gt;Переведу эту строчку кода на русский язык:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ЕСЛИ строка_из_потока не пуста, ТО переменной_s присвоить строку_из_потока;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Дальше идёт более сложный код.&lt;br /&gt;&lt;br /&gt;&lt;b&gt; if copy(s,length(s),1)=copy(s,2,1) then delete(s,length(s),1)&lt;br /&gt;  else s[length(s)] := s[2];&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color=green&gt;copy&lt;/font&gt; - это функция копирования части строки. У неё три параметра: первый указывает саму строку, второй - позицию символа, с которого начинать копирование, а третий - количество копируемых символов.&lt;br /&gt;&lt;br /&gt;&lt;font color=green&gt;length&lt;/font&gt; - это функция определения длины строки. Возвращает количество символов в ней. Она имеет только один параметр - строку, длину которой надо узнать.&lt;br /&gt;&lt;br /&gt;Итак, мы копируем последний символ из строки s и сравниваем его со вторым. Затем начинает действовать THEN.&lt;br /&gt;&lt;br /&gt;&lt;font color=green&gt;delete&lt;/font&gt; - это функция удаления символов из строки. У неё такие же параметры, как и у функции copy. Ей мы удаляем последний символ.&lt;br /&gt;&lt;br /&gt;Если условие не соблюдается, то действует ELSE. В нём мы обращаемся к строке как к массиву. В квадратных скобках после строки мы указываем позицию символа и можем либо прочитать, либо изменить его. Конечно, можно было поступить так, как на стандартных компонентах: сначала удалить символ, а потом вставить другой, но это более сложный вариант для использования в коде. Помните только, что обращение происходит здесь лишь к одному символу строки, но не к нескольким.&lt;br /&gt;&lt;br /&gt;_hi_OnEvent(onEnd,s); выдаёт строку в поток, откуда мы и записываем её в редактор текста.&lt;br /&gt;&lt;br /&gt;Все эти действия можно реализовать и на стандартных компонентах, а значит, можно посмотреть код стандартных компонентов, чтобы выяснить, какие функции они используют. Для этого выделите компонент и нажмите Ctrl+F. Можно также вывести в контекстное меню компонента пункт для открытия кода компонента.&lt;br /&gt;&lt;br /&gt;Для этого выполните «Сервис» - «Редактор команд» и выберите «контекстное меню элемента рабочего стола» из левого выпадающего списка. В правом списке можно выбрать для него команды меню. Найдите там пункт «исходник компонента» и нажмите «&gt;&gt;».&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v062.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Если вы создали сайт, то вам понадобится &lt;a href='http://www.web-promo.com.ua/'&gt;раскрутка сайтов&lt;/a&gt;. Компания предлагает поэтапную раскрутку сайтов: поисковая оптимизация сайта, ссылочное окружение и поддержание выигранных позиций. В дополнение используется контекстная реклама.&lt;br /&gt;&lt;br /&gt;Не знаете, как выучить английский язык? Отличный ресурс по &lt;a href="http://eng-audio.narod.ru/audio1/audio001.html"&gt;аудиокнигам на английском языке&lt;/a&gt;. Есть, например, аудиокурсы Илоны Давыдовой и Риты Беловой, а также много других аудиокниг на английском. И всё это бесплатно.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-5180123433833933005?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/5180123433833933005/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/ic_25.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5180123433833933005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5180123433833933005'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/ic_25.html' title='Код для IC'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-4572844342389478960</id><published>2010-02-20T17:28:00.009+05:00</published><updated>2010-08-26T14:48:17.559+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InlineCode'/><title type='text'>Точки и переменные в IC</title><content type='html'>Продолжаем тему InlineCode в HiAsm. Сегодня нам предстоит познакомиться с остальными точками компонента InlineCode (в прошлой статье я рассказывал только про методы), а также с использованием переменных в IC.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Сначала познакомимся с переменными. Это проще.&lt;br /&gt;&lt;br /&gt;Если в на рабочем поле HiAsm компонент Memory (который как раз и является компонентом-переменной) можно поставить в любое место, то в коде Pascal переменные объявляются в строго отведённых для этого местах. Переменные в коде Pascal бывают глобальные и локальные. В HiAsm тоже есть глобальные переменные, но там они носят чисто условный характер, потому что тот же компонент Memory можно использовать в любой части схемы (через нижнюю его точку).&lt;br /&gt;&lt;br /&gt;В коде всё более очевидно. Локальные переменные - это переменные для какой-то одной процедуры или функции. При выходе из процедуры значение переменной теряется. Другая процедура/функция может использовать эту же переменную (т.е. переменную с таким же именем) уже как свою собственную, ничего не зная о её прошлых значениях.&lt;br /&gt;&lt;br /&gt;Совсем другое дело - глобальные переменные. Они существуют на всём выполнении программы. К ним может обращаться любая процедура/функция, читать значение, изменять его. И для всех значения этой переменной будут одинаковы, из какой бы процедуры/функции их ни изменили.&lt;br /&gt;&lt;br /&gt;Но хватит теории, пора к практике. Мы воспользуется тем кодом, который был у нас в прошлой статье.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh226.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Как видите, локальные переменные объявляются в разделе &lt;b&gt;var&lt;/b&gt; для каждой процедуры/функции перед begin…end. Процедура и функция используют переменную &lt;font color=blue&gt;i&lt;/font&gt;, но для каждой из них эта переменная имеет разные значения. Сначала переменной присваивается значение 10 в процедуре &lt;font color=blue&gt;Proba&lt;/font&gt;. В сообщении же вызывается функция &lt;font color=blue&gt;mat&lt;/font&gt;, у которой своя переменная &lt;font color=blue&gt;i&lt;/font&gt;, и значение там совсем другое. И следует понимать, что это две разные переменные, несмотря на одинаковое имя.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Обратите также внимание на тип переменной. Он указывается после названия переменной через двоеточие. Результату нашей функции мы присваиваем именно эту переменную, поэтому тип результата функции и тип переменной должны совпадать здесь.&lt;br /&gt;&lt;br /&gt;Но давайте теперь рассмотрим глобальную переменную.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh227.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Глобальная переменная объявлена в разделе &lt;b&gt;Private&lt;/b&gt;. Причём очень важно, что объявлена она до объявления там же функции. Это следует помнить: сначала объявляются переменные, потом - процедуры и функции.&lt;br /&gt;&lt;br /&gt;К этой переменной мы обращаемся и из процедуры, и из функции. Она одна для всех.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;С переменными вроде бы разобрались (если что непонятно - пишите в комментариях). Перейдём теперь к точкам. Как известно, их 4 вида: методы, события, данные и свойства. Точки методов и точки свойств задаются через процедуры, а точки данных и точки событий - через специальные переменные.&lt;br /&gt;&lt;br /&gt;Для начала создадим наше первое событие.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh228.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color=green&gt;ev:THI_Event;&lt;/font&gt; - это и есть та самая переменная. Тип у неё - THI_Event. Это специальный тип в HiAsm, как раз предназначенный для событий. ev - это, конечно, имя, которое вы выбираете произвольно.&lt;br /&gt;&lt;br /&gt;В процедуре больше сообщение не вызывается, я и библиотеку windows из uses убрал, чтобы не мешала. Зато мы вызываем здесь процедуру &lt;font color=blue&gt;_hi_OnEvent&lt;/font&gt;. Это специальная процедура в HiAsm и генерирует событие. Процедура описана в модуле Share, он уже есть в HiAsm, поэтому нам ни о чем больше заботиться не нужно.&lt;br /&gt;&lt;br /&gt;Но процедура эта имеет два параметра: имя переменной и выдаваемые данные. Второй параметр необязателен. Как видите, первый параметр у нас как раз эта самая переменная ev (и событие произойдёт на соответствующей точки IC), а данные для выдачи - это результат функции mat.&lt;br /&gt;&lt;br /&gt;Теперь зададим ещё точку данных для нашего IC.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh229.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Как видите, точки данных задаются почти так же, как события: через переменную типа THI_Event. У нас это переменная d.&lt;br /&gt;&lt;br /&gt;Самое главное здесь - это обращение к точке. Мы ведь не указываем, какие данные будут передаваться на точку данных: число, строка или массив, например. И здесь всё определяется функцией чтения. У нас используется &lt;font color=blue&gt;ToInegerEvent(d)&lt;/font&gt;. Эта функция прописана также в модуле Share. Она читает данные с точки d как число. Существуют следующие функции чтения с точек данных:&lt;br /&gt;&lt;b&gt;ToStringEvent - читает строку&lt;br /&gt;ToIntegerEvent - читает целое число&lt;br /&gt;ToRealEvent - читает число с точкой&lt;br /&gt;ToStreamEvent - читает файловый поток Stream&lt;br /&gt;ToBitmapEvent - читает картинку bmp&lt;br /&gt;ToIconEvent - читает иконку&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Для разных типов данных - свои функции. Но все эти функции читают данные только с точек данных. А у нас ведь ещё есть поток, в который также можно передавать данные. Для выемки информации из потока существуют следующие функции:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ToString&lt;br /&gt;ToInteger&lt;br /&gt;ToReal&lt;br /&gt;ToStream&lt;br /&gt;ToBitmap&lt;br /&gt;ToIcon&lt;br /&gt;ToObject&lt;br /&gt;ToFont&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Здесь добавилось несколько новых функций - для чтения шрифта, чтения объектов. Но большинство пока вам не понадобится. Для работы с такими типами данных нужно знать функции и процедуры для работы с ними.&lt;br /&gt;&lt;br /&gt;Эти функции читают данные только из потока. А вот если данные могут поступать и в потоке, и через точки данных существует третья группа функций:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ReadString&lt;br /&gt;ReadInteger&lt;br /&gt;ReadReal&lt;br /&gt;ReadBool&lt;br /&gt;ReadMTData&lt;br /&gt;ReadData&lt;br /&gt;ReadStream&lt;br /&gt;ReadBitmap&lt;br /&gt;ReadIcon&lt;br /&gt;ReadMatrix&lt;br /&gt;ReadArray&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Здесь уже добавлены функции для чтения матрицы и массивов, также MT-потока.  Но всё это на данном этапе пока нам не нужно. Это пока всего лишь обзор.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh230.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь применена функция&lt;br /&gt;&lt;br /&gt;&lt;font color=green&gt;ReadInteger(dt,d,0);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;У неё три параметра. Первый - это переменная dt. Посмотрите-ка в раздел Public, на объявление нашей процедуры Proba. Увидели в параметрах переменную dt? Вот это она и есть. При вызове процедуры ей передаются данные через эту переменную. Так что из потока данные извлекаются через эту переменную.&lt;br /&gt;&lt;br /&gt;d - это наша точка данных. Ну а 0 это значение по умолчанию, когда ничего не передано ни на точку данных, ни в поток. У нас тогда используется ноль. Кстати, не забывайте про приоритет извлечения данных: сначала - с точек данных, потом - из параметров (в данном случае - это последний параметр, который у нас=0) и только затем уже из потока.&lt;br /&gt;&lt;br /&gt;Напоследок расскажу о точках свойств. Они задаются практически так же, как и точки методов.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh231.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь точка свойств - это процедура с именем v. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;dtInteger&lt;/b&gt; - записывает данные в переменную dt (просто присвоить значение переменной dt нельзя, поскольку она имеет особый тип, к которому сначала нужно привести желаемые данные). Данные берутся из второго параметра, где у нас стоит функция. Записывается, естественно, её результат.&lt;br /&gt;&lt;br /&gt;Пожалуй, на сегодня всё. В следующий раз мы будем рассматривать уже более интересные вещи, поскольку освоили азы.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v061.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Защитите себя и свой компьютер: скачайте &lt;a href='http://masseffecton.ru/'&gt;бесплатно антивирус&lt;/a&gt; и будьте под его надёжной защитой. Самые разные антивирусные программы.&lt;br /&gt;&lt;br /&gt;Пройдите &lt;a href="http://eng-tests.narod.ru/"&gt;бесплатные тесты по английскому&lt;/a&gt; языку и узнайте, насколько хорош ваш английский. Вы можете пройти тесты по грамматике английского и по словам.&lt;br /&gt;&lt;br /&gt;Если плохо запоминаются английские слова, то программа для &lt;a href="http://sasmp-magnet.narod.ru"&gt;запоминания английских слов&lt;/a&gt; вам поможет. Используя методику мультирежимного повтора, она эффективно воздействует на ваш головной мозг и память.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-4572844342389478960?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/4572844342389478960/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/ic.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4572844342389478960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4572844342389478960'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/ic.html' title='Точки и переменные в IC'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-4170553427079878316</id><published>2010-02-17T17:21:00.008+05:00</published><updated>2010-08-26T14:49:20.069+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InlineCode'/><title type='text'>Продцедуры и функции</title><content type='html'>Продолжаем знакомиться с InlineCode и, естественно, с языком Pascal. Сегодня мы рассмотрим, как заставить выполняться желаемый код, и напишем (да, напишем, раз уж речь идёт о коде) нашу первую программу с использованием InlineCode.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;В тот InlineCode (для краткости я буду именовать его просто IC), который мы поставили на рабочее поле, ещё нельзя писать какие-либо действия. Дело в том, что весь код разбивается на логические участки - процедуры и функции, а вот в них уже можно писать какие-либо действия. Но у нас пока нет ни одной процедуры или функции. Давайте же сделаем хотя бы одну.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh220.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Итак, здесь записана процедура Proba. В разделе Public написано следующее:&lt;br /&gt;&lt;br /&gt;&lt;font color=blue&gt;procedure Proba(var dt:TData; index:word);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;В этом разделе мы только объявляем процедуры, то есть даём понять, что они у нас будут использоваться.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;procedure&lt;/b&gt; - это ключевое слово, которое и обозначает начало процедуры.&lt;br /&gt;&lt;b&gt;(var dt:TData; index:word);&lt;/b&gt; - это параметры процедуры, то есть информация которая может быть передана процедуре при вызове этой процедуры.&lt;br /&gt;&lt;br /&gt;В данном случае параметра два: dt и index, а имеют они типы соответственно TData и word. TData - это специальный тип, который используется в HiAsm. Он может содержать практически любые данные: картинку, звук, строку, число и т. д. Word - это число, состоящее из двух байт. Я уже про это рассказывал, можете &lt;a href=http://hi-asm.blogspot.com/2009/11/blog-post_19.html target=_blank&gt;почитать тут&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Есть ещё слово var, оно означает, что данный параметр является переменной и его можно менять в процедуре, но об этом - позже.&lt;br /&gt;&lt;br /&gt;Ниже, в разделе implementation, записано следующее:&lt;br /&gt;&lt;br /&gt;&lt;font color=blue&gt;procedure THiAsmClass.Proba;&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;end;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Здесь уже процедура записывается для выполнения в ней действий. При этом следует помнить, что она относится к модулю ThiAsmClass, а потому перед её именем стоит название этого класса.&lt;br /&gt;&lt;b&gt;begin и end&lt;/b&gt; - это особые ключевые слова, которые очень часто используются в Pascal. Они обозначают начало и конец чего-либо. В данном случае - это начало и конец процедуры. То есть, при вызове процедуры Proba будет выполняться только то, что написано между begin и end. Обратите внимание на точку с запятой. Они ставятся почти после каждой строки, крое некоторых, например begin. Именно точка с запятой отделяет команды друг от друга.&lt;br /&gt;&lt;br /&gt;Наверняка у вас возник вопрос: а как вызывать процедуру? В HiAsm процедуры вызываются через точки. Вы уже заметили, что у IC есть точка метода? Она появилась не автоматически - её надо прописывать в соответствующем параметре компонента, её имя должно совпадать с именем процедуры. Имя процедуры можно писать только на латинице и цифрах, но начинаться обязательно должно с буквы. Большие и маленькие буквы в названиях процедур, переменных, функций равнозначны (т.е. proba и ProBa - одно и то же).&lt;br /&gt;&lt;br /&gt;Обратите также внимание, что наша процедура объявлена в разделе Public, но не Private! Только из процедур раздела Public можно сделать внешние точки у IC, иначе программа не будет запускаться.&lt;br /&gt;&lt;br /&gt;Кстати, давайте-ка запустим нашу программу и посмотрим.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh221.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Конечно же, у нас ничего не происходит, потому что в процедуре ещё ничего не написано. Однако программа запускается - это уже хорошо. А вот если она не запускается, не компилируется, значит, вы где-то допустили ошибку при написании кода. В этом случае выполните «Вид» - «Панель Отладка» и посмотрите, в какой строке у вас ошибка. Сообщения с ошибками в Отладке написаны красным цветом.&lt;br /&gt;&lt;br /&gt;Теперь хочется что-нибудь вставить в процедуру, чтобы убедиться, что она действительно вызывается. Для начала попробуем простое сообщение, такое, какое можно видеть на вкладке «Контролы». Конечно, для этого надо знать функцию, которая вызывает это сообщение. Это внешняя функция, нам её писать не надо, она уже написана в других файлах. Нам нужно лишь указать её имя в процедуре, это и будет вызов функции.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh222.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color=blue&gt;MessageBox(0,'Привет!','Сообщение',0);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Итак, разберём всё по порядку.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;MessageBox&lt;/b&gt; - собственно название функции, которую мы вызываем. Она-то и показывает сообщение. Только обратите внимание, что сама функция прописана в модуле windows, поэтому мы его подключаем в раздел uses.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(0,'Привет!','Сообщение',0);&lt;/b&gt; - параметры функции. У каждой функции свои параметры, у этой вот - четыре. Первый параметр определяет идентификатор родительского окна. У нас 0, значит, у нашего сообщения не будет родительского окна.&lt;br /&gt;Второй параметр определяет текст сообщения. Любой текст в языке Pascal всегда берётся в одинарные кавычки.&lt;br /&gt;Третий параметр определяет заголовок сообщения.&lt;br /&gt;Четвёртый параметр определяет иконку в окне сообщения и набор кнопок. У нас самый простой, под номером 0 - это отсутствие иконки и одна кнопка «ОК».&lt;br /&gt;&lt;br /&gt;И, конечно, точка с запятой в конце.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;А теперь выясним, что же такое функция. По сути, это то же самое, что и процедура, только функция может возвращать после своего выполнения каое-либо значение. И это значение можно использовать. Например, можно написать функцию вычисления какого-то математического выражения и использовать эту функцию множество раз.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh223.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Итак, здесь написана функция mat, а в объявлении этой функции после скобок стоит двоеточие и тип integer. Integer - это целое число, помещающееся в 4 байта. &lt;a href=http://hi-asm.blogspot.com/2009/11/blog-post_19.html target=_blank&gt;Здесь&lt;/a&gt; об этом тоже написано. Это значит, что функция будет возвращать число. А какое - зависит от кода в этой функции, который мы пока не написали.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh224.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь в функции уже написано математическое выражение. Употреблён новый для вас символ «:=» - символ присваивания. Это значит, что переменно Result мы присваиваем то, что получается при выполнении математической операции. А Result - это специальная переменная, которая и возвращается функцией. Она нигде специально не указывается, и ей можно сразу присваивать значения в функции.&lt;br /&gt;&lt;br /&gt;x и y - это параметры функции, они тоже типа integer.&lt;br /&gt;&lt;br /&gt;Ну а теперь давайте-ка вызовем функцию из нашей процедуры и выведем в сообщении результат.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh225.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Что же означает эта конструкция: &lt;font color=blue&gt;PChar(int2str( mat(1,7) ))&lt;/font&gt;?&lt;br /&gt;&lt;br /&gt;Разберёмся по порядку.&lt;br /&gt;&lt;b&gt;mat(1,7)&lt;/b&gt; - это вызов нашей функции с параметрами 1 и 7. Они будут соответственно использованы как x и y.&lt;br /&gt;&lt;b&gt;int2str&lt;/b&gt; - это функция преобразования числа в строку, она тоже внешняя. Дело в том, что в Pascal различаются разные типы данных, и в сообщении вывести можно только строку, а функция возвращает число. Для пользователя, конечно, разницы не видно, но Pascal упрям… В скобках передаётся наша функция, а точнее - её результат, который является, в свою очередь, параметром к функции int2str.&lt;br /&gt;&lt;b&gt;PChar&lt;/b&gt; - указатель на строку. Функция MessageBox принимает строки через указатели на них. Если вы незнакомы с Pascal и указателями, то это для вас пока будет сложно понять. Просто запомните, что желательно все строки в MessageBox передавать через указатель. И если для прямо указанных строк это необязательно (например, строку «Сообщение» мы передали просто так), то для строк через функции это обязательно.&lt;br /&gt;&lt;br /&gt;На сегодня всё. Потренируйтесь в написании кода в IC, поэкспериментируйте, приобретайте навыки.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v060.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Портал для веб-программистов, желающих заработать в Сети и других - &lt;a href='http://web20.su/'&gt;web 2.0&lt;/a&gt;. Вы найдёте статьи о соц.сетях, AJAX, SEO. И конечно, статьи о веб-программировании и заработке в Интернете.&lt;br /&gt;&lt;br /&gt;Хотите сделать себе кофе - &lt;a href='http://1coffee.ru/index.php?categoryID=133'&gt;большой выбор jura&lt;/a&gt; - швейцарских кофемашин. Качественные приборы, вкусный кофе.&lt;br /&gt;&lt;br /&gt;Хотите приобрести &lt;a href='http://www.tourexpress.ru/countries/mexico/tours/'&gt;тур в Мексику&lt;/a&gt; - сходите на этот сайт. Там вы найдёте разную информацию о Мексике, стоимость туров, отели Мексики, фотографии страны и другие интересные вещи о Мексике.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-4170553427079878316?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/4170553427079878316/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/blog-post_17.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4170553427079878316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4170553427079878316'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/blog-post_17.html' title='Продцедуры и функции'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-3593050639375746560</id><published>2010-02-13T22:51:00.012+05:00</published><updated>2011-08-08T20:54:44.498+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kol'/><category scheme='http://www.blogger.com/atom/ns#' term='код'/><category scheme='http://www.blogger.com/atom/ns#' term='InlineCode'/><title type='text'>InlineCode</title><content type='html'>Эта статья отличается от остальных. Необычного в ней то, что в ней я расскажу, как вставлять код в HiAsm. А необычное это потому, что HiAsm - это программирование без кода, и во всех предыдущих статьях ни о каком коде речи не было (за исключением SQL, ну да это не очень сложно и не всем нужно). Однако сегодня я сделаю вводную статью по вставке кода в HiAsm.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Зачем это нужно? А нужно это затем, что далеко не все компоненты являются полностью безошибочными и удобными. Кроме того, компонентов для многих функций просто нет. И здесь без кода никак не обойтись. Кто читает мой блог сначала, тот уже давно не новичок. И наверняка сталкивался с несовершенством некоторых компонентов, исправить которое не позволяла безграмотность.&lt;br /&gt;&lt;br /&gt;Но для начала небольшой ликбез относительно самого использования кода в HiAsm. Я уже в какой-то статье рассказывал об этом, но теперь не помню. Итак, главным языком, используемым HiAsm, является Pascal. С появлением новых пакетов появились и другие языки, но в пакете Windows используется по-прежнему Pascal. А потому знание синтаксиса Pascal - необходимое условие для самостоятельной работы с кодом. Впрочем, синтаксис этот не слишком сложный, и большинство вещей я расскажу.&lt;br /&gt;&lt;br /&gt;Здесь следует понять отличие HiAsm от Delphi (кроме приёмов программирования, разумеется). Delphi использует VCL - Vusual Components Library - библиотека визуальных компонентов. VCL содержит огромное количество готовых к использованию компонентов, из которых и строятся программы Delphi.&lt;br /&gt;&lt;br /&gt;В HiAsm используется KOL - Key Objects Library - библиотека ключевых объектов. Её создатель - Владимир Кладов. Конечно, он писал библиотеку не специально для HiAsm, а для использования в той же Delphi - для уменьшения размеров программ. Но библиотека эта бесплатна и отлично подходит для HiAsm. Потому и стала там использоваться. Что касается размеров программ, то в Delphi только одна скомпилированная форма, без других компонентов, весит около 400 Кб!&lt;br /&gt;&lt;br /&gt;С KOL нам ещё не раз придётся столкнуться, а пока вернёмся к коду. Код в HiAsm используется как в компонентах (напомню, что файлы компонентов пакета Windows находятся в папке &lt;font color=blue&gt;\Elements\Delphi&lt;/font&gt;: conf - файлы конфигурации, отвечающие за отображение компонента в среде, code - файлы кода, из которых HiAsm вместе с компилятором и собирает программу), так и внутри схем - в виде того самого InlineCode, про который эта статья. И там и там используется код Pascal. Но компоненты обычно делаются тогда, когда они необходимы для частого использования. Если же код делается по конкретную ситуацию, то лучше всего использовать именно InlineCode.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Сам компонент находится на вкладке «Инструменты», в группе «Языки». Это довольно необычный компонент, потому что он похож на мультиэлемент (у него есть 4 параметра, задающие названия точек), но нет никакого редактора мультиэлемента и внутренних компонентов. А весь код пишется в параметре Code. При открытии этого параметра появляется новая вкладка рядом со вкладками проектов, а внутри - КОД…&lt;br /&gt;&lt;br /&gt;Пока что внутри находятся одни ключевые слова, которые никаких действий не выполняют. Разберёмся в них.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;unit&lt;/strong&gt; - ключевое слово языка Object Pascal, объявляющее начало нового модуля. Модуль у нас находится в InlineCode  и называется HiAsmUnit.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;interface&lt;/strong&gt; - ключевое слово языка Object Pascal, объявляющее начало интерфейсной (управляющей взаимодействием) части модуля.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;uses&lt;/strong&gt; - ключевое слово языка Object Pascal, объявляющее используемые внешние модули (исходники). kol,Share,Debug - собственно имена этих модулей, разделяемых запятой, и оканчивающихся на знак «;».&lt;br /&gt;KOL - это и есть та самая библиотека, функции из которой  и используются практически во всех компонентах.&lt;br /&gt;Share и Debug - библиотеки, созданные специально для HiAsm его автором. Они содержат основные, часто используемые функции.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;type&lt;/strong&gt; - ключевое слово языка Object Pascal, объявляющее раздел объявления типов классов.&lt;br /&gt;THiAsmClass = class(TDebug) - означает, что THiAsmClass - это новый класс, а его родителем является TDebug. Это значит, что ThiAsmClass наследует все функции от TDebug.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;private&lt;/strong&gt; - ключевое слово языка Object Pascal, объявляющее раздел переменных и процедур, которые могут использоваться только внутри этого модуля.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; - ключевое слово языка Object Pascal, объявляющее раздел переменных и процедур, которые могут использоваться внутри и вовне этого модуля. Применительно к InlineCode это означает, что здесь будут описаны точки компонента InlineCode.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;implementation&lt;/strong&gt; - ключевое слово языка Object Pascal, означающее начало отдела реализации объявленных процедур и функций. Если в private и public мы только объявляли процедуры и функции (т.е. просто писали их названия), то в implementation мы уже пишем код для этих процедур и функций, который будет выполняться при их вызове.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;end.&lt;/strong&gt; - с точкой - означает конец модуля.&lt;br /&gt;&lt;br /&gt;Здесь много непонятных с первого раза вещей. Но не стоит волноваться. Реально нам потребуются только несколько из этих вещей, про которые я подробно всё расскажу. А расписал я всё здесь для того, чтобы вы имели представление о строении модуля.&lt;br /&gt;&lt;br /&gt;Составление первого кода в InlineCode займёмся в следующий раз, а пока расскажу ещё несколько полезных вещей.&lt;br /&gt;&lt;br /&gt;Чтобы открыть код компонента, нужно выделить компонент и нажать Ctrl+F. Эту команду можно вывести и в контекстное меню компонента - из «Сервис» - «Редактор команд». Ctrl+G открывает конфигурацию компонента. У некоторых компонентов нет файла кода, в том числе и у InlineCode, потому InlineCode сам содержит код.&lt;br /&gt;&lt;br /&gt;Для интересующихся кодом полезно будет почитать &lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/kol.rar0" rel=nofollow&gt;книгу о KOL&lt;/a&gt;&lt;/noindex&gt;.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Мы подскажем вам, как правильно &lt;a href="http://sasmp-magnet.narod.ru"&gt;запоминать английские слова&lt;/a&gt;. С помощью системы АСМП "Магнит" это будет очень эффективно и легко! Не 25 кадр.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://usedthings.ru/2009/12/05/provodnaya-lazernaya-mysh-sniper-m7630-defender/"&gt;Проводная лазерная мышь Sniper M7630 * DEFENDER&lt;/a&gt; - рассказ пользователя про использование мыши.&lt;br /&gt;&lt;br /&gt;Скачать бесплатно аудиокнигу Конан Дойла &lt;a href="http://eng-audio.narod.ru/audio2/audio008.html"&gt;Собаку Баскервиллей на английском&lt;/a&gt;. На сайте есть и другие бесплатные аудиокниги.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-3593050639375746560?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/3593050639375746560/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/inlinecode.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3593050639375746560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3593050639375746560'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/inlinecode.html' title='InlineCode'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-5020305262532090954</id><published>2010-02-12T08:42:00.005+05:00</published><updated>2010-08-26T14:50:45.512+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='базы данных'/><title type='text'>Редактирование базы данных SQL</title><content type='html'>В прошлой статье я рассказывал про создание таблиц в базе данных на языке SQL. Пришла пора их редактировать. Операции-то, собственно, небогатые: обновление и удаление, но зато приёмов их использования немало.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Мы не будем сегодня заострять внимание на создании таблиц, и потому таблица будет создаваться автоматически при входе в программу.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh216.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь, как вы видите, при входе происходит открытие пока ещё не существующей у вас базы данных. Имя берётся из поля ввода, но изменять вы его не можете (параметр ReadOnly=True), потому что работа с несколькими БД не предусмотрена в схеме. А потому не будет усложнять задачу.&lt;br /&gt;&lt;br /&gt;Таблица имеет незамысловатое название - &lt;font color=blue&gt;table1&lt;/font&gt;, изменять которое тоже не будем. После открытия БД сразу происходит чтение из этой таблицы и отображение данных в визуальной таблице. Столбцы, как вы видите, не передаются из БД, так как они в визуальной таблице уже есть и стандартны для нас.&lt;br /&gt;&lt;br /&gt;А затем выполняется код для создания этой самой table1. Дело в том, что мы ведь не знаем, есть там эта таблица или ещё пока нет. И потому на всякий случай каждый раз будем создавать. Не стоит опасаться: перезаписи данных при существующей таблице не происходит, всё остаётся на своих местах.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh217.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь мы при добавлении новой строки в таблицу добавляем новую запись в БД. Но нам известно лишь поле номера, поэтому и вносим только его. Обратите внимание, что в записи &lt;font color=green&gt;INSERT INTO table1 (number) VALUES (%1)&lt;/font&gt; после названия таблицы в скобках указан её столбец. Это означает, что значения мы будем записывать только в это поле строки. Можно использовать и несколько полей, отделяя их запятыми, например: &lt;font color=green&gt;INSERT INTO table1 (number, lastname) VALUES (%1, 'Иванов')&lt;/font&gt;.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh218.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;А здесь уже реализована замена значений в полях. Событие onLineChange выдаёт номер отредактированной строки, и мы затем через массив строк получаем её содержимое, которое разбиваем на части (ячейки). А затем выполняем код SQL&lt;br /&gt;&lt;br /&gt;&lt;font color=green&gt;UPDATE table1 SET firstname='%2', lastname='%3' WHERE number=%1&lt;/font&gt;&lt;br /&gt;&lt;font color=blue&gt;ОБНОВИТЬ table1 УСТАНОВИВ firstname='%2', lastname='%3' ГДЕ number=%1&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Этот код немного неочевиден для понимания. Сразу возникает вопрос: как мы находим в БД строку, которую нужно изменить? Дело в том, что в БД не существует понятия «порядковый номер», и мы не может обратиться, например, к пятой строке, а может лишь обратиться к строке, ГДЕ какое-либо поле = известному нам значению. Естественно, что это поле должно быть уникальным для всех строк, а если будут повторения, то при обращении к строкам по значению поля могут измениться несколько строк, у которых это поле имеет одинаковое значение.&lt;br /&gt;&lt;br /&gt;Поле number у нас уникальное (если только вы не изменяли его вручную, чего делать не следует). А раз так, то мы можем найти строку в БД по значению этого поля. Собственно, для этого оно и создавалось.&lt;br /&gt;&lt;br /&gt;Попробуйте создавать и изменять строки, а потом закройте программу и снова откройте. Всё сохранилось в БД и вывелось в таблице.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh219.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;А здесь мы реализовали удаление. Код SQL должен быть без проблем понятен. А находим удаляемую строку мы опять же по значению поля number.&lt;br /&gt;&lt;br /&gt;Теперь у вас есть готовая программа для работы с базами данных. Конечно, для реальных целей вы её должны изменить и «заточить» под себя, однако ключевые моменты вы теперь знаете.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v059.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Надёжное, экологически чистое, привлекательное по цене &lt;a href='http://www.ldsp.w-market.ru/'&gt;лдсп продажа тут&lt;/a&gt;. ЛДСП EGGER имеет очень большое разнообразие по текстуре, цвету, узорам, и вы обязательно подберёте что-то для себя.&lt;br /&gt;&lt;br /&gt;Если вы изучаете английский язык, то вам пригодятся бесплатные &lt;a href="http://eng-audio.narod.ru/"&gt;аудиокниги на английском&lt;/a&gt;, а также аудиокурсы Илоны Давыдовой и Риты Беловой бесплатно.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-5020305262532090954?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/5020305262532090954/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/sql_12.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5020305262532090954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5020305262532090954'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/sql_12.html' title='Редактирование базы данных SQL'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-8904301641568018847</id><published>2010-02-10T23:12:00.006+05:00</published><updated>2010-08-26T14:51:58.743+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='таблицы'/><category scheme='http://www.blogger.com/atom/ns#' term='базы данных'/><title type='text'>Создание таблицы в SQL</title><content type='html'>Сегодня я снова возвращаюсь к теме баз данных, и мы будет учиться создавать таблицы на языке SQL. Это довольно просто, если не вникать в глубокие подробности.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Рассмотрим такую простую таблицу, как список имён и фамилий.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh213.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Как вы &lt;a href="http://hi-asm.blogspot.com/2009/10/hiasm.html" target=_blank&gt;помните&lt;/a&gt;,  для добавления строки в таблицу в потоке нужно передать строку с разделителями, чтобы заполнить каждую ячейку. Но тут нужно заполнить только первую ячейку, потому и разделитель нам не нужен.&lt;br /&gt;&lt;br /&gt;Таблицу можно редактировать вручную. Добавьте несколько строк и попробуйте это сделать. А теперь приступим к сохранению таблицы в базу данных.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh214.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Схема тоже несложная. Но для начала вам нужно добавить несколько строк в таблицу и заполнить их. Когда вы нажмёте «Сохранить», то появится окно для ввода имени таблицы. Именно таблицы, а не самой базы данных. Указывайте только на латинице.&lt;br /&gt;&lt;br /&gt;Потом выберите в диалоге имя уже самой базы (файла) для сохранения. При этом БД будет открыта, хотя самого файла ещё нет. Он создаётся дальше. Наверняка вы заметили, что компонент для работы с SQLite уже другой. Он находится в группе «Data Source» вкладки «Базы данных». Я использую его потому, что он поддерживает &lt;a href="http://hi-asm.blogspot.com/2009/11/blog-post_13.html" target=_blank&gt;технологию менеджеров&lt;/a&gt;, то есть беспроводной связи. Но можно использовать и тот, что я показывал в прошлых статьях.&lt;br /&gt;&lt;br /&gt;После этого приступаем к выполнению запроса SQL. Здесь используется компонент DSC_Exec - запрос на выполнение, а не просто запрос к базе данных, но это здесь не имеет значения. Отличие компонентов для простого запроса и запроса на выполнение лишь в том, что при простом запросе выдаются полученные столбцы и строки таблицы, а в запросе на выполнение соответствующих точек нет. А сам запрос будет выполняться в любом из этих компонентов (но понятно, что из компонента запроса на выполнение извлечь данные не удастся, так что если нужно получить данные, то используется компонент для простого запроса, а если записать - любой компонент).&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;font color=green&gt;CREATE TABLE %1 (number int, firstname char, lastname char)&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;CREATE TABLE&lt;/strong&gt; - создаёт новую таблицу, имя которой указывается вместо %1. В скобках пишутся имена столбцов (полей), а через пробел - тип (int - число, char - строка).&lt;br /&gt;&lt;br /&gt;И наконец, происходит перечисление строк таблицы, ячейки вычленяются по разделителю и форматируются по маске, составляя новый SQL-запрос.&lt;br /&gt;&lt;br /&gt;&lt;font color=green&gt;INSERT INTO %1 VALUES (%2, '%3', '%4') &lt;/font&gt;&lt;br /&gt;&lt;strong&gt;INSERT INTO&lt;/strong&gt; - вставляет в таблицу с именем %1 новую строку, а значения для ячеек указываются после VALUES в скобках через запятую. Обратите внимание, что для числовой тип в кавычки брать не надо, а строки - надо.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh215.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Ну а здесь реализуется чтение. Так как столбцы в таблице уже есть, то новые мы не добавляем, а добавляем лишь записи-строки.&lt;br /&gt;&lt;br /&gt;Конечно, это довольно простые примеры, а на самом деле существует много настроек таблиц, индексы и т. д. Но для одной статьи это было бы слишком много.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v058.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;&lt;a href='http://knopka.net.ua/'&gt;Электронная коммерция&lt;/a&gt; - блог об электронной коммерции, продвижениии сайта, SEO. Много интересных статей.&lt;br /&gt;&lt;br /&gt;Компания Almacor предлагает профессиональный &lt;a href='http://solutions.almacor.ru/'&gt;нейминг&lt;/a&gt; для вашей продукции, соответствующий важнейшим требованиям нейминга.&lt;br /&gt;&lt;br /&gt;Избавиться от проблем со здороьвем и красотой поможет &lt;a href='http://www.neo-med.biz/women/mezoterapija.htm'&gt;мезотерапия&lt;/a&gt; - микроинъекции с помощью тончайшей иглы, которые действуют только на выбранный участок, а не весь организм.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-8904301641568018847?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/8904301641568018847/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/sql_10.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8904301641568018847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8904301641568018847'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/sql_10.html' title='Создание таблицы в SQL'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-8465648710811834504</id><published>2010-02-09T20:19:00.007+05:00</published><updated>2010-08-26T14:53:43.071+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BASS'/><category scheme='http://www.blogger.com/atom/ns#' term='dll'/><title type='text'>BASS без bass.dll</title><content type='html'>&lt;img style="float:left; margin:0 10px 2px 0; ;width: 79px; height: 82px;" src="http://2.bp.blogspot.com/_g1EvW_ks9UI/S3F_mVd9OMI/AAAAAAAAAMk/xsIGGfdzoXA/s400/exedll.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5436266521787447490" /&gt;&lt;br /&gt;Сегодня у меня статья про упаковщиков исполняемых файлов, которые могут присоединить ещё и разные модули к exe-шнику. Кто работал с компонентами BASS, знают, что без bass.dll программа отказывается запускаться. Или те же проги, использующие SQLite. А следить за наличием dll-ки хлопотно и можно про неё забыть при выкладывании программы в Интернет.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Я уже давно пытался найти решение этой проблемы. При моих довольно скромных познаниях в программировании проблему могла решить только сторонняя программа. Нет, был, конечно, другие варианты, например вложить dll как бинарные данные в программу и при запуске сохранять их в файл dll, но программа без dll (конкретно - BASS) даже не запускается. Поэтому требовалось что-то другое.&lt;br /&gt;&lt;br /&gt;Сначала я попробовал программу MoleBox. Она присоединяет dll к exe, но, видимо, что-то изменяет в dll, так что программа с BASS отказывается запускаться. В него, насколько я понял на официальном сайте, встроена защита от изменений.&lt;br /&gt;&lt;br /&gt;Потом нашёл программу PEBundle. У неё, кстати, интерфейс на русском, да и настроек поменьше. Большинство из них хорошо понятны даже новичкам. Версия программы, правда, старовата - 2.44, но замечательно работать ей это не мешает. Проблем с запуском программ с BASS больше нет.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hi-asm.narod.ru/pebsetup.rar0"&gt;Вот эта программа&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Просто установите её и выберите русский язык. Работать с программой очень просто. Сначала выберите EXE, затем добавьте модуль (DLL). Можно добавить несколько модулей, если ваша программа в них нуждается.&lt;br /&gt;&lt;br /&gt;Выделив мышью модуль в окне, можно изменить его настройки присоединения. В основном они связаны с извлечением модуля при запуске программы. Для каждого модуля можно задать свои. Можно либо извлекать модуль на диск, либо запускать его из памяти. Но на второй вариант часто ругаются антивирусы (у меня Касперский сразу перекрыл доступ к такому файлу).&lt;br /&gt;&lt;br /&gt;Если выбран вариант «на диск», то можно указать и папку для извлечения. Рекомендуется, конечно, &lt;font color=blue&gt;{Temporary folder}&lt;/font&gt;, так как это папка для временных файлов. Также можно выбрать удаление модуля после закрытия программы. Это рекомендуется делать, чтобы не засорять и так не всегда чистую папку временных файлов.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Примечательно и то, что размер программы увеличивается только на размер модуля, но распаковка UPX (это упаковщик, через который HiAsm упаковывает программы для уменьшения веса) не происходит. В довершение стоит скачать, что программа просит регистрацию, но и без неё работает отлично. Так что пользуйтесь на здоровье!&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v057.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Если ваш продукт нуждается в сертификации, то обратитесь в &lt;a href='http://www.rospromtest.ru'&gt;www.rospromtest.ru&lt;/a&gt;. Благодаря сертификации повышается доверие клиентов к вашему товару, а это успешно повлияет на ваш бизнес.&lt;br /&gt;&lt;br /&gt;Если вам срочно нужен документ, подтверждающий образование, то вы можете &lt;a href='http://pokupkadiploma.ru/yslygi.html'&gt;купить диплом Техникума, Колледжа, ВУЗа&lt;/a&gt;. Можно купить диплом старого или нового образцов.&lt;br /&gt;&lt;br /&gt;Для красоты вашего дома сделайте себе красивый козырёк. А &lt;a href='http://www.bagplus.ru/catalog/section.php?IBLOCK_ID=42&amp;SECTION_ID=232'&gt;козырьки стеклянные&lt;/a&gt; изготавливает фирма "Багплюс" и предлагает различные их варианты.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-8465648710811834504?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/8465648710811834504/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/bass-bassdll.html#comment-form' title='Комментарии: 14'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8465648710811834504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8465648710811834504'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/bass-bassdll.html' title='BASS без bass.dll'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_g1EvW_ks9UI/S3F_mVd9OMI/AAAAAAAAAMk/xsIGGfdzoXA/s72-c/exedll.jpg' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-4709553132025229841</id><published>2010-02-07T15:23:00.006+05:00</published><updated>2010-08-26T14:54:44.762+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='базы данных'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><title type='text'>Некоторые операторы SQL</title><content type='html'>Сегодня мы продолжим знакомство с языком SQL. Вы узнаете некоторые операторы, которые значительно упрощают написание запросов. А использовать мы будем всё ту же SQLite и базу Elements.db.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;В &lt;a href="http://hi-asm.blogspot.com/2010/02/sqlite_05.html" target="_blank"&gt;прошлый раз&lt;/a&gt; мы вы выбирали строки, у которых tab=3. Однако возможности выбора в SQL гораздо шире.&lt;br /&gt;&lt;br /&gt;Итак, выберем все строки из Elements, где tab больше 4, но меньше 7.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh209.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;После WHERE вы видите два условия, объединённые оператором AND. Это слово переводится как «И», то есть оба условия должны выполняться, тогда только будет выведена соответствующая строка из базы данных.&lt;br /&gt;&lt;br /&gt;Также есть команда ORDER BY, после которой стоят два названия поля (столбца). Сортировка производится сначала по первому, а затем, если значения этого поля у нескольких строк одинаково, - по второму.&lt;br /&gt;&lt;br /&gt;Писать можно и более сложные запросы, здесь действуют все операторы сравнения, которые можно увидеть в параметре Type компонента If_else (вкладка «Инструменты»).&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh210.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;В этом примере выводятся первые три компонента каждой вкладки, кроме первой. Выводится также и поле tab.&lt;br /&gt;&lt;br /&gt;В SQL также существуют операторы IN и BETWEEN, которые переводятся как «В» и «МЕЖДУ». Они полностью оправдывают своё название.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh211.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Этот запрос выбирает все строки, где tab равно 1, 3 или 4, а pos находится между 1 и 6 включительно. То есть мы выбрали первые 6 компонентов с трёх вкладок.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh212.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Ну а здесь у нас новый оператор – LIKE. Он является чем-то вроде знака равенства, но только для текста. И если значение поля - текст, то использовать нужно этот оператор, а также текст заключать в кавычки. У нас в кавычках стоит «A%». Это значит, что выбраны будут все строки, у которых значение в поле name начинается на A (регистр неважен). Процент же заменяет любые символы здесь.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v056.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;И опять о Тайланде. На этот раз - &lt;a href='http://www.tourister.ru/world/asia/thailand/city/phuket/responses/'&gt;остров Пхукет, отзывы&lt;/a&gt;, фотографии, погода... Также вы найдёте карту Пхукета, почитаете о достопримечательностях острова, которые стоит посетить.&lt;br /&gt;&lt;br /&gt;На Туристер.Ру вы найдёте информацию об &lt;a href='http://www.tourister.ru/responses/?tag=%D2%F3%F0%F6%E8%FF'&gt;отдыхе в Турции, отзывы&lt;/a&gt;, фотографии. А также узнаете о десяти вещах, которые стоит сделать в Стамбуле.&lt;br /&gt;&lt;br /&gt;Что такое Хургада? Хургада - это экзотическое место в Египте, где можно хорошо отдохнуть. Посмотрите &lt;a href='http://www.tourister.ru/world/africa/egypt/city/hurghada/responses/'&gt;отели Хургады отзывы&lt;/a&gt; туристов и решите, когда стоит туда съездить.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-4709553132025229841?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/4709553132025229841/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/sql.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4709553132025229841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4709553132025229841'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/sql.html' title='Некоторые операторы SQL'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-8212210162066579654</id><published>2010-02-05T21:07:00.006+05:00</published><updated>2010-08-26T14:55:47.546+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='базы данных'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><title type='text'>SQLite и базы данных</title><content type='html'>Раз уж в прошлом посте я упомянул о базах данных, то хочется продолжить разговор о них. Использовать будем библиотеку SQLite.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Раз уж в прошлом посте я упомянул о базах данных, то хочется продолжить разговор о них. Использовать будем библиотеку SQLite.&lt;br /&gt;&lt;!-- more --&gt;&lt;br /&gt;Для начала - что такое база данных, а точнее - реляционная база данных? РБД - это файл с обычными таблицами со столбцами и строками, где каждый столбец имеет свой тип, и все ячейки этого столбца имеют только этот тип данных, например строка или число.&lt;br /&gt;&lt;br /&gt;Работать с базами данных мы будем через SQLite, про что уже говорилось. Про SQLite можно прочитать &lt;noindex&gt;&lt;a href="http://phpclub.ru/detail/article/sqlight" target=_blank rel="nofollow"&gt;здесь&lt;/a&gt;&lt;/noindex&gt;, в главе «Что такое SQLite?». Информация в остальных главах даётся для использования с языком PHP, мы же используем, естественно, HiAsm с его Pascal/KOL, и нам эти сведения не понадобятся. Примите к сведению, что нужна библиотека sqlite3.dll, которая находится рядом с HiAsm, так что лучше всего скопировать её в папку Windows.&lt;br /&gt;&lt;br /&gt;Для работы с базами данных используется особый язык запросов - SQL. Он справедлив как для использования в HiAsm, так и в любом языке программирования, том же PHP, например. По сути, с этим языком мы в основном и будем знакомиться, потому что сами компоненты для работы с SQLite очень просты и понятны.&lt;br /&gt;&lt;br /&gt;И конечно, мы будем использовать нашу локальную базу данных - Elements.db. Так что SQLite подойдёт лучше всего. Наша основная вкладка в HiAsm сегодня - «Базы данных». Ну а единственная пока база данных - Elements.db, которая находится по адресу  &lt;font color=”blue”&gt;Elements\Delphi\Elements.db&lt;/font&gt;.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh204.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Итак, вот он, пример запроса к базе данных. После нажатия кнопки выберите в диалоге базу данных. Затем, как рассказывалось в прошлой статье, делается перекодировка текста ANSI в UTF-8, чтобы правильно воспринимались русские символы (возможно, в пути к вашей Elements.db их нет, но всё-таки…). Компонент SQLite_DB открывает базу данных для работы с ней. А SQLite_Query делает запрос к базе данных. Самое главное здесь - текст из параметра SQL, который мы разберём позже.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;А сейчас посмотрите на то, что выдаёт нам SQLite_Query. Выдаёт он столбцы и строки, причём в формате многомерных потоков. Это просто необходимо, ведь ячейка таблицы базы данных может содержать практически любой символ, и символ-разделитель здесь вообще неуместен. А значит, и таблица нужна продвинутая, умеющая работать с MT-потоками. Воспользуемся StringTableMT. У неё методы для работы с многомерными потоками спрятаны на вкладке «Точки» панели параметров, так что их сначала нужно вывести, что я и сделал.&lt;br /&gt;&lt;br /&gt;А теперь про SQL-запрос.&lt;br /&gt;&lt;strong&gt;SELECT&lt;/strong&gt; - с этой команды начинается любой запрос к базе данных. В переводе с английского означает «выбрать». Обратите внимание, что писать нужно большими буквами. После этой команды пишутся названия полей, которые нужно выбрать. Если стоит звёздочка, то это означает все поля.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;FROM&lt;/strong&gt; - указывает таблицу для выбора. Название таблицы тут совпадает с именем файла.&lt;br /&gt;&lt;br /&gt;Благодаря запросу вы увидели, какие столбцы (их ещё называют полями) находятся в таблице. Ведь теперь выборку можно сделать только по требуемым полям.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh205.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Вот так мы выбираем только интересующие нас поля (столбцы). Здесь следует отметить, что разработчик HiAsm в этой базе данных сделал столбец tab определяющим номер вкладки, на которой расположен компонент, а pos - позицию компонента на вкладке.&lt;br /&gt;&lt;br /&gt;Зная это, хотелось бы выбрать компоненты, например, только с вкладки «Контролы». Кажется, что здесь должен быть номер 2, однако он, видимо, зарезервирован, и компоненты этой вкладки имеют tab=3.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh206.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Итак, у нас новая команда - &lt;strong&gt;WHERE&lt;/strong&gt;. Эта команда переводится как «ГДЕ», и тогда текст запроса становится понятен:&lt;br /&gt;&lt;br /&gt;&lt;font color=blue&gt;SELECT tab,pos,name,info FROM Elements WHERE tab=3&lt;/font&gt;&lt;br /&gt;&lt;font color=green&gt;ВЫБРАТЬ tab,pos,name,info ИЗ Elements ГДЕ tab=3&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Мы выбираем те строки из 4-х столбцов, где tab=3. Разумеется, сам столбец tab можно вообще не отображать, но отбирать только те строки, где tab=3.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh207.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Самое естественное теперь - отсортировать столбцы таблицы. Для этого используется команда &lt;strong&gt;ORDER BY&lt;/strong&gt;, после которого ставится имя столбца, по которому нужно отсортировать.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh208.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Напоследок отмечу, что текст запроса можно подавать на точку SQL в компонент, так что строить запросы можно прямо из программы.&lt;br /&gt;&lt;br /&gt;Ну а на сегодня всё. В следующий раз расскажу ещё что-нибудь интересное.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v055.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Интехстрой-М - это качественный &lt;a href='http://www.itstroy.ru'&gt;евроремонт квартир в Москве&lt;/a&gt;. Дизайнеры по вашему желанию составят дизайн помещения, и специалисты выполнят в вашем доме самые разные работы, не отнимая у вас много времени.&lt;br /&gt;&lt;br /&gt;Если ваш коммерческий сайт плохо продаёт, то вам нужна &lt;a href='http://web-promo.com.ua/organicheskaja-optimizacija-sajta/'&gt;оптимизация сайта&lt;/a&gt;. Компания выполнит качествуенную раскрутку и поднятие сайта в поисковой выдаче. А если не сумеет - полностью вернёт ваши деньги.&lt;br /&gt;&lt;br /&gt;Узнайте всё об &lt;a href='http://www.tourister.ru/world/asia/thailand/city/ban_phattha_ya/responses/'&gt;отдыхе в Паттайе, отзывы&lt;/a&gt;, фотографии, погода и другие интересные материалы на Туристер.Ру. Тем, кто хочет поехать в Тайланд, рекомендую.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-8212210162066579654?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/8212210162066579654/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/sqlite_05.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8212210162066579654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8212210162066579654'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/sqlite_05.html' title='SQLite и базы данных'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-4901249281633005978</id><published>2010-02-04T15:37:00.006+05:00</published><updated>2010-08-26T14:56:21.747+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='базы данных'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><title type='text'>SQLite и пути с русскими буквами</title><content type='html'>Эта статья для тех, кто работал или планирует работать с базами данных SQLite в HiAsm. Да и остальным почитать было бы неплохо. Проблема заключается в интерпретации русских букв в имени файла при открытии базы данных.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Для примера возьмём базу данных &lt;font color=blue&gt;Elements\Delphi\Elements.db&lt;/font&gt; и попробуем прочитать из неё данные о компонентах. Именно в этом файле находятся сведения обо всех компонентах палитры HiAsm.&lt;br /&gt;&lt;br /&gt;Если вы не знаете язык запросов SQL, не беда. Схему я привожу, а язык - дело времени.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh202.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;При запуске программы может появиться сообщение, что файл sqlite3.dll не найден. Он находится в папке HiAsm, так что скопируйте его в папку Windows. Тогда всё должно работать.&lt;br /&gt;&lt;br /&gt;Ну а в открывшемся после запуска программы диалоге выберите файл по указанному выше пути. Вы сразу увидите названия компонентов из палитры и подсказки для них. Однако если вы переименуете базу данных, включив в её название русские буквы, то программа ничего показывать не будет. Именно по этой причине HiAsm нельзя устанавливать в папку с русскими буквами.&lt;br /&gt;&lt;br /&gt;Однако теперь решение найдено. На форуме HiAsm вы можете найти обсуждение этой проблемы, я лишь скажу суть. Дело оказалось в том, что передача имени файла должна происходить в кодировке UTF-8, а стандартная передача - это ANSI. Если ANSI конвертировать в UTF-8, то компоненты начинают работать и с русскими путями.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh203.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Как видите, всё очень просто. Можете для проверки скопировать базу данных, изменить имя копии и попробовать.&lt;br /&gt;&lt;br /&gt;Остаётся лишь добавить, что следующие версии компонентов для работы с SQLite будут самостоятельно заниматься конвертированием, и не нужно будет следить за этим вручную.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v054.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Нужны &lt;a href='http://moiidei.com/'&gt;новые идеи бизнеса&lt;/a&gt;? Замечательный сайт с большой аудиторией заинтересованных лиц. Продвижение идей, поиск инвесторов и партнёров для новых идей бизнеса.&lt;br /&gt;&lt;br /&gt;Вам задолжали денег и не отдают? Существует &lt;a href='http://www.vnp-ekb.ru/uslugi/jur_ob/arbitr.html'&gt;взыскание долгов через суд&lt;/a&gt;, арбитраж. Решаются споры с физическими и юридическими лицами.&lt;br /&gt;&lt;br /&gt;Мобильное электричество - это незаменимый во многих областях источник энергии. Мощные &lt;a href='http://www.power-machines.ru/catalog/power_6.htm'&gt;дизельные электростанции 100 квт&lt;/a&gt; способны обеспечить электричесвом в любом месте.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-4901249281633005978?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/4901249281633005978/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/sqlite.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4901249281633005978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4901249281633005978'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/sqlite.html' title='SQLite и пути с русскими буквами'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-3708062187838298967</id><published>2010-02-03T10:09:00.005+05:00</published><updated>2010-08-26T14:57:19.647+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hiasm'/><title type='text'>Недокументированные возможности HiAsm</title><content type='html'>Не могу на сто процентов утверждать, что вещи, о которых я собираюсь рассказать, действительно не документированы, однако по среде с интуитивно понятным интерфейсом справку вряд ли кто-то читать будет, разве что про компоненты, да и то. Тем не менее некоторые интересные и удобные вещи замечаются не сразу, и именно о них эта статья.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Начнём с главного меню. Любое меню в HiAsm можно изменять. Для этого достаточно выполнить Сервис - Редактор команд. Там можно выбрать меню и пункты для него. Это наверняка знают многие. Но немногие знают, что на команду можно назначить сочетание клавиш. А между тем такая возможность находится совсем рядом - в виде белой кнопки-клавиши над кнопками «ОК» и «Помощь». Сначала выберите команду, на которую хотите назначить сочетание, из &lt;strong&gt;левого&lt;/strong&gt; списка. А потом нажимайте кнопку-клавишу и нажимайте желаемое сочетание. Только помните, что некоторые сочетание уже заданы для других команд.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Скриншот схемы&lt;/strong&gt;. Можно воспользоваться, конечно, и PrintSreeen, но он снимет всё окно HiAsm, а не только схему. А в том же «Сервисе» есть команда «Скриншот». Можно вызвать её и с помощью Ctrl+Q. После этого нужно выделить участок схемы мышью, и он будет скопирован в буфер обмена.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Диалоги HiAsm&lt;/strong&gt;. В HiAsm много специфических диалоговых окон. Одни из самых распространённых - это редактор текста (например, при вводе комментария или редактировании текстового параметра компонента) и редактор данных (его можно увидеть, если дважды щёлкнуть по кнопке, но чаще всего он используется в компоненте DoData и Memory). Многие знакомы и редактором массивов, например, через компонент BitmapArray. А ведь эти диалоги можно изменять, настраивая по своему вкусу!&lt;br /&gt;&lt;br /&gt;Зайдите в папку &lt;font color=blue&gt;int\ru&lt;/font&gt;. Там находятся sha-файлы, в которых и есть схемы этих диалогов. Например, _DataEdit. Если вы посмотрите на него через редактор формы, то сразу узнаете. А схему-то можно изменить! Правда, для этого нужно разобраться с компонентами. Ведь здесь используются не те компоненты, что в стандартном пакете Windows. И хотя они очень похожи, но всё же имеют свои особенности.&lt;br /&gt;&lt;br /&gt;Изменив схему, сохраните её. Компиляция не нужна, да и невозможна.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;strong&gt;Мультиэлементы HiAsm&lt;/strong&gt;. Для показа этого примера нужна достаточно большая вложенность мультиэлементов. Во-первых, теперь в мультиэлементы можно входить двойным щелчком, а не только стрелкой на панели инструментов, как это было раньше. Если на вашей мыши есть кнопки «вперёд» и «назад», то они тоже работают. Для выхода из мультиэлемента также работает кнопка Backspace.&lt;br /&gt;&lt;br /&gt;Во-вторых, теперь есть возможность быстро возвращаться из самых глубин вложенных мультиэлементов наверх, на любой уровень вложенности. Обратите внимание на небольшую полоску под горизонтальной полосой прокрутки. Там обычно написано «ROOT\», то есть корневой мультиэлемент. При переходе по «мультикам» туда будут добавляться новые уровни (кстати, их название зависит от комментария к мультиэлементу). А чтобы вернуться назад, нужно щёлкнуть по названию нужного «мультика».&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Конфигурация компонента&lt;/strong&gt;. Допустим, вы изменили у какого-то компонента разные параметры, вывели у него скрытые точки наружу и часто используете такую конфигурацию компонента. Чтобы каждый раз заново не настраивать вот так компонент, можно сохранить его состояние, а потом просто загрузить.&lt;br /&gt;&lt;br /&gt;Поставим на рабочее поле компонент Memo и растянем его на всю форму (в редакторе формы). А затем в самом низу панели параметров (свойств) введём в поле-список название для такой конфигурации нашего Memo (выбирается произвольно). И нажимаем «+». Всё, конфигурация сохранена. Теперь, когда вы захотите к следующему Memo применить эти параметры, то просто выделите его и выберите из списка конфигурацию. Если конфигурация вам больше не нужна, можете её удалить, выбрав и нажав «-».&lt;br /&gt;&lt;br /&gt;А что делать, если такие параметры к компоненту применяются постоянно (даже в пределах одной схемы), постоянно лезть в список и выбирать конфигурацию? Нет, конечно! И для этого у HiAsm есть команда. Задайте нужные параметры/точки для компонента, а затем, выделив его, нажмите «галочку», что справа от минуса. Теперь, когда вы будете ставить такой компонент на рабочее поле, к нему автоматически будут применяться заданные параметры (только сначала надо перезапустить HiAsm).&lt;br /&gt;&lt;br /&gt;Наконец, расскажу, где все эти конфигурации хранятся. Для каждого пакета - своя папка. Например, для Windows - здесь: &lt;font color=blue&gt;Elements\Delphi\prof&lt;/font&gt;. Из названия файлов сразу понятно, какому компоненту и конфигурации он принадлежит. Эти файлы можно удалять и изменять.&lt;br /&gt;&lt;br /&gt;И напоследок - &lt;strong&gt;разделитель&lt;/strong&gt;. Схему HiAsm можно разделить на две части, как окно в MS Word. Для этого используется маленькая кнопочка справа на полоске, где написано «ROOT\». Однократное нажатие приведёт к горизонтальному разделению, вторичное - двукратному. Третье нажатие возвращает всё на свои места.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v053.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Если вам требуется продвинуть свой блог или сайт, то вам стоит &lt;a href='http://personal-page.org/'&gt;заказать статью&lt;/a&gt;, оптимизированную под поисковые запросы. А также другие услуги (ведение блогов, закупка ссылок и т.д.)&lt;br /&gt;&lt;br /&gt;Как выучить английский язык? Читать любимые книги с переводом на английски! Например, &lt;a href="http://eng-books.narod.ru/books3/book050.html"&gt;толкиен скачать хоббит&lt;/a&gt; на английском и русском языках очень подойдёт.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-3708062187838298967?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/3708062187838298967/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/hiasm.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3708062187838298967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3708062187838298967'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/hiasm.html' title='Недокументированные возможности HiAsm'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-6646750482313644872</id><published>2010-02-01T12:33:00.007+05:00</published><updated>2010-08-26T14:57:56.868+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='блог'/><title type='text'>Немного о блоге</title><content type='html'>Сегодня ничего про HiAsm писать не буду, пожалуй. Пора в блоге порядок навести.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Те, кто читает мой блог с самого начала, знают, что раньше я в тексте не ссылки на файлы давал, а код приводил. Но с этим возникало много проблем. Например, у некоторых javascript в браузерах может быть отключен, а код именно на javascripte и работал.&lt;br /&gt;&lt;br /&gt;Некоторые копировали новый код на старый, а старый нужно было перед этим удалить. Да и поисковики индексировали этот код, что ни к чему хорошему тоже не приводило.&lt;br /&gt;&lt;br /&gt;Потом я заменил код на файлы, которые стал располагать на сайте hi-asm.narod.ru. Но старые статьи остались с кодом. Сегодня я этот код заменил на файлы, так что проблем больше возникнуть не должно. Однако если всё же что-то работать не будет, пишите в комментариях, я исправлю.&lt;br /&gt;&lt;br /&gt;Теперь о видеоуроках по HiAsm. Недавно я разместил ещё несколько видеоуроков, но при проверке оказалось, что два из них после скачивания не открываются. Я закачал ещё раз. Однако после скачивания WinRAR, в котором я пытался открыть скачанные файлы, писал, что в них ошибка CRC. Все закачки я проводил с помощью FileZilla. Тщетно несколько раз перезакачав файлы с помощью FileZilla, я стал закачивать их через веб-интерфейс Narod'а. И только тогда всё получилось нормально. Впрочем, если будут ошибки - пишите в комментариях.&lt;br /&gt;&lt;br /&gt;Ну и немного слов о сайте hi.asm.narod.ru, на котором я располагаю схемы к статьям в блоге. Планируется сделать на сайте некий справочник по компонентам HiAsm. Всё, что я знаю о компонентах, я размещу там. Работы по сайту я уже начал, но пока не загрузил на сайт. Так что скоро, возможно, появится ещё один сайт, где можно прочитать про HiAsm.&lt;br /&gt;&lt;br /&gt;Пожалуй, на этом всё.&lt;br /&gt;P.S. С нетерпением жду, когда будет выпущена новая версия HiAsm. Хочется некоторых улучшений...&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Столица Швеции - &lt;a href='http://www.tourister.ru/world/europe/sweden/city/stockholm'&gt;Стокгольм&lt;/a&gt;. Информация о Стокгольме для туристов на Туристере.Ру. Отзывы туристов, погода в Стокгольме, фотографии Стокгольма.&lt;br /&gt;&lt;br /&gt;Ростпромтест проводит &lt;a href='http://www.rospromtest.ru/content.php?id=15'&gt;сертификацию мебели&lt;/a&gt;, оформляет разные документы: техническое описание медели, сертификат соответствия, гигиенический сертификат. Оптимизация расходов на сертификацию.&lt;br /&gt;&lt;br /&gt;Скачать бесплатно &lt;a href="http://eng-books.narod.ru/books3/book018.html"&gt;Достоевский на английском&lt;/a&gt;. Преступление и наказание, бедные люди, игрок - на английском и русском языках специально для изучающих английский язык.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-6646750482313644872?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/6646750482313644872/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/02/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/6646750482313644872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/6646750482313644872'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/02/blog-post.html' title='Немного о блоге'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-4322968654128842312</id><published>2010-01-30T23:44:00.014+05:00</published><updated>2010-08-26T14:58:35.769+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='компоненты'/><category scheme='http://www.blogger.com/atom/ns#' term='hiasm'/><title type='text'>Красивые компоненты в HiAsm</title><content type='html'>&lt;img style="float:left; margin:0 10px 3px 0; width: 124px; height: 104px;" src="http://hi-asm.narod.ru/led.gif" border="0" alt="Красивые компоненты в HiAsm" /&gt;&lt;br /&gt;Всегда хочется сделать свою программу чем-то выделяющейся, не похожей на другие. Внешний вид программы - далеко не последняя в этом деле вещь. И его можно сделать индивидуальным и красивым, если использовать некоторые компоненты.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Вкладка "Интерфейс" в HiAsm такая большая, что при первом взгляде можно много чего не заметить. Первые, наиболее используемые компоненты чаще других попадаются на глаза, они известны ещё с прошлых версий HiAsm.&lt;br /&gt;&lt;br /&gt;Сейчас много чего изменилось. Например, появилась технология менеджеров, о которой я рассказывал в статье про &lt;a href="http://hi-asm.blogspot.com/2009/11/blog-post_13.html"&gt;красивый список&lt;/a&gt;. Менеджер отрисовки делает списки красивее, но только списки и никакие другие компоненты.&lt;br /&gt;&lt;br /&gt;А сейчас раскройте вкладку "Интерфейс" в HiAsm и посмотрите на две группы элементов: графические и расширенные. На мой взгляд, деление это излишнее: многие графические компоненты тоже являются там расширенными, а большое количество групп элементов ухудшает восприятие. Но разработчикам виднее.&lt;br /&gt;&lt;br /&gt;Посмотрим на сами компоненты.&lt;br /&gt;&lt;strong&gt;Кнопка-картинка (ImgBtn).&lt;/strong&gt; Компонент хорошо подходит для создания кнопок без надписей, с одним только рисунком. В четырёх последних параметрах кнопки задаются рисунки, которые вы сами должны заранее подготовить. Интересный параметр также Split.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh124.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Важно знать некоторые особенности этой кнопки. Если не задать картинку для нажатого состояния, то будет использована картинка как для нормального состояния.&lt;br /&gt;Если Flat=False, то при наведении мыши на кнопку картинка &lt;strong&gt;не&lt;/strong&gt; меняется на картинку для выделенного состояния.&lt;br /&gt;И наконец, для использования параметра Split нужно, чтобы картинка имела прозрачные области. Мне удалось этого добиться переводом картинки png в формат ico, т.е. в иконку. Рекомендую программу IcoFX (её легко найти в Интернете). К сожалению, HiAsm не поддерживает открытие картинок png (имеется в виду встроенный редактор картинок).&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;И конечно, важно правильно выбрать картинку, чтобы было красиво.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Фигура (VisualShape).&lt;/strong&gt; Это довольно бесполезный компонент, однако иногда может пригодиться для вывода каких-то графических примитивов. Важно только обращать внимание на его параметры Pen, Color и другие. Имейте в виду, что если толщину рамки установить больше 1, то стиль её изменить будет нельзя.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh125.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь используется ещё и параметр Transparent, который скрывает все области, которые не закрашены цветом. Именно с помощью него стрелку в примере удалось поместить сверху овала, не показывая при этом серые места, которые у стрелки под заливку не попали.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Светодиод (Led).&lt;/strong&gt; Очень красивый компонент, если использовать его правильно. Он может быть прямоугольным или овальным (параметр Shape).&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh126.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Расстановка светодиодов, думаю, здесь понятна. Главное - разобраться с логикой. У светодиодов задействован метод doChangeValue, который изменяет состояние светодиода. А теперь внимательно посмотрите на начальные значения счётчиков: один отстаёт от другого ровно на 1. Сначала первый счётчик выдаёт -1, но такого индекса у IndexToChanel нет, и ничего не происходит. Зато следом второй счётчик выдаёт 0, и это включает первый светодиод.&lt;br /&gt;&lt;br /&gt;При второй итерации таймера первый счётчик выдаёт уже 0, что гасит первый светодиод, а второй счётчик выдаёт 1, что включает 2-ой светодиод. И так далее.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Панель прогресса (GProgressBar).&lt;/strong&gt; Работать с компонентом довольно просто. Это обычная панель прогресса, только с градиентной заливкой. Те, у кого стоит Download Master, знают, что в окне закачки у него есть панель прогресса, щёлкнув по которой, можно изменить её стиль. Теперь и у HiAsm'овцев есть такая возможность.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Светодиодный индикатор (LedLadder).&lt;/strong&gt; Тоже довольно простой компонент. Интересен тем, что имеет три области: минимальные значения, средние значения и максимальные значения, каждая из которых отображается своим цветом.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Цифровое табло (LedNumber).&lt;/strong&gt; Компонент тоже прост. Выводит на цифровое табло цифры и некоторые другие символы. К сожалению, не выводит текст. В примере указаны все символы, которые можно вывести в этот компонент.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh127.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Градиентная надпись (GLabel).&lt;/strong&gt; Очень красивая надпись. Конечно, для строгих программ она вряд ли подойдёт, но вот для программ-развлечений и им подобных - самое то!&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh128.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Важно правильно выбрать цвет тени - ColorShadow. Впрочем, его можно изменять из программы, как это показано в примере. Затем смотрим на группу параметров Extended. Выбираем глубину тени, а дальше 4 параметра определяют градиент фона, а следующие - градиент самой надписи. Также важен параметр Antialiased, который позволяет сгладить неровности шрифта. С ними надпись выглядит не так красиво.&lt;br /&gt;&lt;br /&gt;Ну а формула для изменения цвета тени очень проста. Каждую миллисекунду счётчик выдаёт число от 0 до 360. Математика подсчитывает синус (не забудьте выбрать AngleMode=Градусы) и находит его модуль. А так как синус изменяется в пределах от -1 до 1, то изменение получается плавным. И при умножении на 255 получается число от 0 до 255. 255 - это красный цвет, 0 - чёрный.&lt;br /&gt;&lt;br /&gt;На самом деле, даже из обычных компонентов при хорошей фантазии можно сварганить что-нибудь интересное. Самое главное - экспериментировать.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v052.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Для дома, дачи, участка в условиях отсутствия электроэнергии подойдёт &lt;a href='http://www.power-machines.ru/'&gt;дизельгенератор&lt;/a&gt;. Очень мощные и неприхотливые, они обеспечат вас электричеством везде.&lt;br /&gt;&lt;br /&gt;В промышленности нужны &lt;a href='http://www.pnevmotech.ru/'&gt;поршневые компрессоры&lt;/a&gt;. Они дешевле винтовых и не могут быть заменены там, где нужен чистый воздух, поскольку поршневые компрессоры работают без масла.&lt;br /&gt;&lt;br /&gt;Защитная &lt;a href='http://www.market-c.ru/catalog/id_2.html'&gt;мастика битумная&lt;/a&gt; нужна для предотвращения вредных воздействий на разные конструкции. Цена битумной мастики также указана на сайте.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-4322968654128842312?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/4322968654128842312/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/01/hiasm_30.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4322968654128842312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4322968654128842312'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/01/hiasm_30.html' title='Красивые компоненты в HiAsm'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-3202755141858461255</id><published>2010-01-29T18:14:00.011+05:00</published><updated>2010-08-26T15:01:09.049+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='символы'/><category scheme='http://www.blogger.com/atom/ns#' term='служебные'/><title type='text'>Служебные символы: \r\n и другие.</title><content type='html'>Новички очень часто встречаются с ситуацией, когда хотят сохранить какой-то файл, а он не сохраняется, т.е. просто не появляется на диске! У меня у самого были такие же проблемы, когда я только начинал своё знакомство с HiAsm. В то время я мало знал компьютер, программирование (если честно, я и сейчас разбираюсь лишь в KOL и Pascal, ну и javascript немного). И тем не менее проблему я свою решил.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Кажется, что уже перепробовано и перепроверено всё: и позиция указателя в stream, и режим открытия файла (Write), но не сохраняется файл и всё тут!&lt;br /&gt;&lt;br /&gt;А виной всему бывают символы, которые используются при задании имени файла, но одновременно являются служебными и в программе преобразовываются в другие символы. Эти символы включают в себя обратынй слеш &lt;strong&gt;\&lt;/strong&gt; и стоящую после него цифру, например: &lt;em&gt;\1&lt;/em&gt;. Но могут быть и некоторые буквы: \n, \r.&lt;br /&gt;&lt;br /&gt;Проведём опыт. Поставим на рабочее поле HiAsm поле ввода Edit и напишем в его параметре Caption что-нибудь содержащее слеши.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh122.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Мы указали здесь путь к одной из папок Windows. В редакторе формы оно отлично отображается, в редакторе параметра Caption - тоже. Но попробуйте запустить эту программу. У вас получится вот что: &lt;strong&gt;C:\WINDOWS\system32f5&lt;/strong&gt;. Откуда там "f" и куда подевались "\102"? А это как раз тот случай, когда произошла замена служебных символов на другой символ. Для того служебные символы и нужны.&lt;br /&gt;&lt;br /&gt;Разберёмся, в чём же дело. Возможно, вы знаете, что в ANSI символ кодируется 1 байтом. 1 байт (8 бит) может иметь 256 вариантов представления, то есть если кодировать 1 байтом 1 символ, то можно закодировать 256 символов. Что с успехом и сделано. И каждый символ имеет свой порядковый номер в специальной таблице. Например, "f" имеет номер 102. Догадались?&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Комбинация "\102" просто вызывает соответствующий символ из таблицы. Так происходит потому, что некотоые символы невозможно ввести в клавиатуры, например разрыв строки и перевод каретки. Табуляцию тоже не всегда можно ввести с клавиатуры. Между тем, часто она бывает нужна. Например, в &lt;a href="http://hi-asm.blogspot.com/2009/10/hiasm.html" target=_blank&gt;таблицах&lt;/a&gt;. Помните, там нужно выбрать символ-разделитель, которым будут разделяться тексты ячеек в строке? Обычные символы использовать нежелательно, потому что они могут присутствовать в тексте ячейки. А вот ту же табуляцию практически всегда можно использовать как символ разделитель.&lt;br /&gt;&lt;br /&gt;Табуляция задаётся сочетанием "\9".&lt;br /&gt;&lt;br /&gt;Однако мы не решили главный вопрос: а как же всё-таки сохранить файл в папку, в имени которой есть служебные символы? Это просто. Нужно вместо одинарных использовать двойные слеши, например:&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh123.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Все двойные слеши в программе заменятся одиночными, но двойные нам и не нужны. Мы выполнили задачу и заставили правильно отображаться строку.&lt;br /&gt;&lt;br /&gt;P.S. Новые видеоуроки по HiAsm появились практически ко всем статьям за октябрь 2009 г.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v051.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Японские &lt;a href='http://www.power-machines.ru/catalog/group_5.htm'&gt;мотопомпы бензиновые&lt;/a&gt; от производителя Мацусака. Вам предлагается широкий выбор моделей высокого качества. С ними вы без труда решите проблему открачивания воды.&lt;br /&gt;&lt;br /&gt;Если у вас кондитерское производство, то обратите внимание на &lt;a href='http://ekma.ru/'&gt;кондитерское оборудование&lt;/a&gt;: охлаждающий шкаф, дробилка для ореха, машина глазировочная и другие незаменимые в производсте питания машины.&lt;br /&gt;&lt;br /&gt;Хотите посетить &lt;a href='http://www.tourister.ru/world/america/united-states/city/new_york_city/'&gt;Нью-Йорк&lt;/a&gt;? Посетите сначала сайт и узнате о Нью-Йорке больше. Посмотрите интересные места города и отзывы туристов.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-3202755141858461255?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/3202755141858461255/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/01/rn.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3202755141858461255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3202755141858461255'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/01/rn.html' title='Служебные символы: \r\n и другие.'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-4245174980410741349</id><published>2010-01-28T10:41:00.016+05:00</published><updated>2010-08-26T15:02:03.739+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='звук'/><category scheme='http://www.blogger.com/atom/ns#' term='эффекты'/><title type='text'>Делаем звуковые эффекты</title><content type='html'>В одной из прошлых статей я обещал рассказать, как делать самостоятельно звуковые эффекты. Причём поскольку работаем мы с байтами звуковых данных, то открывается неисчерпаемое поле экспериментов.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Прежде всего, вспомним, как мы работали со звуковыми данными, как помещали их в файл.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh119.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;При остановке записи сначала записывается заголовок (WaveHeader сам его пишет в файл), а потом открывается этот самый файл, указатель устанавливается в конец файла и пишутся звуковые данные.&lt;br /&gt;&lt;br /&gt;Изменения звука нужно делать перед записью звуковых данных в файл. Делаются они непосредственно с байтами. Наш звук 16-разрядный, значит, одна единица звуковых данных в файле - 2 байта (16 бит). И с этой единицей можно работать.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh120.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь всё сосредоточено во вложенной схеме. Сначала указатель звуковых данных в памяти устанавливается на начало. Затем размер данных делится на 2, потому что размер представлен в байтах, а извлекать надо по 2 байта, тогда цикл должен срабатывать в 2 раза меньше раз, чем размер данных.&lt;br /&gt;&lt;br /&gt;И каждый раз цикл извлекает по 2 байта (у DataToFile Type=dtWord). Именно с этими байтами нужно что-то делать. А что - это целиком и полностью ваша фантазия. Впрочем, кое-какие примеры стоит показать. Помните только, 2 байта могут иметь 655356 вариантов, то есть число в этих пределах (0 - 65535) будет нам выдаваться.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh121.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Здесь реализуется эффект обратного воспроизведения. Точнее, плеер-то воспроизводит правильно, но в файле все байты идут задом наперёд. Посмотрите на схему. При обработке все байты записываются в массив целых чисел, а потом, когда запись закончится (т.е. выдача всех байтов закончится), начинается их обратная выдача (у ArrayEnum Type=Dec). При этом новая последовательность записывается в память, а оттуда - копируется прямиков в файл.&lt;br /&gt;&lt;br /&gt;Что ещё можно сделать? Можно много чего сделать, однако нужно много экспериментировать или хотя бы знать, как делаются уже известные всем эффекты (типа эха, хора и т. д.). Экспериментируя со значениями байт звуковых данных, вы найдёте множество интересных и полезных конкретно для вас эффектов. А также помните, что вы всегда сможете извлечь из файла звуковые данные (их размер можно прочитать из заголовка) и вновь применять к ним эффекты.&lt;br /&gt;&lt;br /&gt;P.S. Следите за обновлениями блога - скоро появятся новые видеоуроки ко многим предыдущим (и, возможно, текущим) статьям.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v050.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Если у вас есть свой сайт, то &lt;a href='http://seobux.ru/?r=seobux'&gt;сервис раскрутки и продвижения сайтов в интернете&lt;/a&gt; вам будет обязательно нужен. От рекламы зависит посещаемость.&lt;br /&gt;&lt;br /&gt;Сайт компании "Недвижимость и кредит" предлагает &lt;a href='http://www.nikvrn.ru/catalog/apartment/'&gt;квартиры в Воронеже купить&lt;/a&gt;. Выгодные цены, хорошие квартиры. Рекомендую.&lt;br /&gt;&lt;br /&gt;Перед поездкой в Тайланд, Флоренцию, Малайзию или куда угодно, узнайте &lt;a href='http://www.tourister.ru/responses'&gt;отзывы туристов об отдыхе&lt;/a&gt;. Сходите на сайт Туристер.ру и поситайте.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-4245174980410741349?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/4245174980410741349/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/01/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4245174980410741349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4245174980410741349'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/01/blog-post.html' title='Делаем звуковые эффекты'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-3084131493413399156</id><published>2010-01-26T11:19:00.011+05:00</published><updated>2010-08-26T15:02:42.546+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='звук'/><category scheme='http://www.blogger.com/atom/ns#' term='wav'/><title type='text'>Доктор WAV</title><content type='html'>&lt;img style="float:left; margin:0 10px 3px 0; width: 121px; height: 100px;" src="http://1.bp.blogspot.com/_g1EvW_ks9UI/S16qwKigwPI/AAAAAAAAAMI/PpZjU1QY6bU/s400/Help.jpg" border="0" alt="Доктор WAV" id="BLOGGER_PHOTO_ID_5430965945094947058" /&gt;&lt;br /&gt;Где-то в Интернете видел программу, которая занимается лечением заголовков wav-файлов, исправляя ошибочные данные. Сегодня попробуем сделать подобную, тем более что компонент WaveHeader я переделал, исправил ошибки и сделал более удобным.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Прежде всего ссылка на новый компонент - &lt;a href="http://hi-asm.narod.ru/waveheader20.rar0"&gt;WavHeader 2.0&lt;/a&gt;. Теперь компоненту не нужен файловый поток - ему нужно только имя файла. И заголовок записывается сразу в файл, и не в поток. Это, конечно, немного меняет последовательность работы с компонентом, но принцип остаётся прежним.&lt;br /&gt;&lt;br /&gt;Самое главное - это то, что при использовании метода doCreate заголовок не просто создаётся и записывается в файл, а может заменить собой существующий заголовок wav-файла! Я специально для этого использовал в коде NewReadWriteFileStream, а не просто NewWriteFileStream. Поэтому для изменения заголовка уже существующего файла не придётся создавать новый файл, записывать туда заголовок, а потом переносить из файла-донора звуковые данные.&lt;br /&gt;&lt;br /&gt;Сегодня мы звук записывать не будем, а будем только слушать. В идеале, конечно, нужен wav-файл с неправильными параметрами заголовка, но сойдёт и нормальный. В таком случае можно, наоборот, изменить правильные параметры и посмотреть, что получится.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh117.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Как видите, теперь загружать файловый поток не нужно. По имени файла всё читается. Теперь файл нужно проиграть и послушать звучание. А затем изменить параметры заголовка, записать его и снова прослушать.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh118.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;А здесь мы уже подключаем проигрывание звука. После загрузки звукового потока сразу начинается проигрывание. Внизу есть поле для изменения частоты дискретизации при проигрывании. Это атрибут канала, т.е. применяется только при проигрывании, а на заголовок никак не влияет. Вы можете пробовать во время воспроизведения разные значения, чтобы подобрать нужное. И только затем уже вписывать его в поле сверху (тоже частота дискретизации).&lt;br /&gt;&lt;br /&gt;Подобрав нужные значения, можно записывать заголовок в файл. А после записи снова нажимать "Пуск" и проверять.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v049.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;А вы знаете, что &lt;a href='http://www.bangkok-guide.ru/'&gt;Бангкок&lt;/a&gt; означает "оливковая деревня"? Посетите сайт и узнайте всё о Бангкоке.&lt;br /&gt;&lt;br /&gt;Нужна качественная эмаль для деревянных и подготовленных металлических поверхностей? &lt;a href='http://www.market-c.ru/catalog/id_1/32'&gt;Эмаль хв 16&lt;/a&gt; - срок службы от 6 лет, время высыхания - до 1,5 ч.&lt;br /&gt;&lt;br /&gt;Скачать бесплатно &lt;a href="http://eng-books.narod.ru/books3/book067.html"&gt;Гарри Поттер и Принц-Полукровка на английском&lt;/a&gt; и русском языках. А также другие книги про Гарри Поттера в оригинале и на русском.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-3084131493413399156?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/3084131493413399156/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/01/wav_26.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3084131493413399156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3084131493413399156'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/01/wav_26.html' title='Доктор WAV'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g1EvW_ks9UI/S16qwKigwPI/AAAAAAAAAMI/PpZjU1QY6bU/s72-c/Help.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-5965407942544310616</id><published>2010-01-24T09:13:00.012+05:00</published><updated>2010-08-26T15:03:23.312+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='звук'/><category scheme='http://www.blogger.com/atom/ns#' term='компонент'/><category scheme='http://www.blogger.com/atom/ns#' term='wav'/><title type='text'>Заголовок WAV-файлов и модификация звука</title><content type='html'>&lt;img style="float:left; margin:0 10px 3px 0; width: 152px; height: 100px;" src="http://3.bp.blogspot.com/_g1EvW_ks9UI/S1yiS-FRPYI/AAAAAAAAAMA/PY9c8G6kPfo/s400/wav.jpg" border="0" alt="Заголовок WAV-файлов и модификация звука" id="BLOGGER_PHOTO_ID_5430393697488420226" /&gt;&lt;br /&gt;В этой статье я обещал рассказать о модификаторах звука. Однако они бесполезны без возможности записать модификацию в файл. А при их использовании стандартными средствами в файл ничего не запишется. Поэтому придётся записывать всё вручную. И для этого я сделал новый компонент для HiAsm.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Но для начала сделаем простейшую схему записи звука.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh114.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Достаточно лишь инициализировать устройство записи по умолчанию и можно уже записывать (правда, это самый простой случай, без возможности выбора устройства). А теперь обратите внимание на параметр Mode у компонента BASS_RecordStart. Он был у нас в прошлой статье "File". Это значит, что запись идёт в файл. А сейчас нам нужно не записывать в файл, а получать звуковые данные в программе, поэтому установим его в "Stream".&lt;br /&gt;&lt;br /&gt;Если вы забыли про файловые потоки, то &lt;a href="http://hi-asm.blogspot.com/2009/11/blog-post_16.html" target=_blank&gt;почитайте здесь&lt;/a&gt; и там ещё две следующие статьи.&lt;br /&gt;&lt;br /&gt;В нашем примере звуковые данные больше не будут записываться в файл, а будут выдаваться на точку onData. Это обычные данные Stream, их можно записывать и в файл. А можно модифицировать. Для этого есть группа "Модификаторы звука". Вот пример с первым компонентом (обратите внимание, что у графика MaxH=0).&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh115.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Это простейший пример преобразования звуковых данных. Компоненты для преобразования можно комбинировать. И выдают они тоже Stream.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;strong&gt;Как же записать модифицированный звук в файл?&lt;/strong&gt; Это не так просто, как может показаться. Одни только звуковые данные, записанные в файл WAV, воспроизводиться не будут. Дело в том, что многие параметры данных - частоту дискретизации, количество каналов - проигрыватель определяет по заголовку WAV-файла. Поэтому сначала в файл нужно записать заголовок. Это первые 44 байта в файле WAV. Назначение каждого из них можно найти в Интернете, а я просто выложу сделанный компонент, который будет создавать заголовок для файла (а также читать заголовок готового файла).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hi-asm.narod.ru/waveheader.rar0"&gt;Скачивайте&lt;/a&gt;. Если будет обновление компонента, просто будет заменён этот файл, а я скажу об этом в комментариях.&lt;br /&gt;&lt;br /&gt;Установить компонент очень просто - сбросьте ini-файл в окно программы и выберите вкладку, куда хотите поместить новый компонент. К сожалению, я не мастер рисовать иконки, поэтому у компонента пока будет стандартная иконка. Возможно, впоследствии иконка появится.&lt;br /&gt;&lt;br /&gt;Поставьте этот компонент на рабочее поле и посмотрите, какие параметры нужно задать для создания заголовка. Частота (Frequency) и количество каналов (Channels) должны быть такими же, как и у BASS_RecordStart. Если выставить в компоненте WaveHeader другие значения, то проигрыватель будет искажённо воспроизводить такой файл. Например, частота дискретизации определяет, какое количество байт в секунду будет браться из файла. Если записано на частоте 44100, а в заголовке указано 22050, то звучание файла будет замедленным в два раза. Так что внимательно следите за этим.&lt;br /&gt;&lt;br /&gt;Обратите также внимание на точку Size сверху. На неё нужно подать размер звуковых данных в байтах. Но до окончания записи он неизвестен. Поэтому заголовок придётся составлять уже после окончания записи (т.е. после нажатия кнопки "Стоп").&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh116.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Сначала происходит открытие файла. При записи звук модифицируется и передаётся в MemoryStream. Однако при каждой новой передаче через метод doCopy предыдущие данные стираются, а нам нужно накапливать их. Поэтому для накапливания используется другой MemoryStream, в который данные копируются без удаления предыдущих (это достигается благодаря StreamCopy).&lt;br /&gt;&lt;br /&gt;При нажатии на "Стоп" размер звуковых данных берётся именно из этого накопителя. Составляется заголовок и записывается в файл (заголовок в компоненте представлен тоже как stream), а затем записываются звуковые данные. Проверьте - всё работает!&lt;br /&gt;&lt;br /&gt;В завершение хочется сказать, что имеющиеся модификаторы звука, конечно, не являются полноценными эффектами, да и их очень мало. Поэтому, если вы хотите делать звуковой редактор, вам нужно придумывать свои эффекты, реализуя их на стандартных компонентах. В следующей статье  я расскажу о примерах таких эффектов.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v048.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Если вам негде разместить коммутационное или серверное оборудование, то компания предоставит вам место в &lt;a href='http://www.di-net.ru/collocation/'&gt;дата центрах&lt;/a&gt;. Аренда серверов.&lt;br /&gt;&lt;br /&gt;Скачать бесплатно английские книги, &lt;a href="http://eng-books.narod.ru/"&gt;учебники английского языка&lt;/a&gt;, двуязычные книги на английском. Гарра Поттер на английском и русском.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-5965407942544310616?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/5965407942544310616/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/01/wav.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5965407942544310616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5965407942544310616'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/01/wav.html' title='Заголовок WAV-файлов и модификация звука'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_g1EvW_ks9UI/S1yiS-FRPYI/AAAAAAAAAMA/PY9c8G6kPfo/s72-c/wav.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-156600164337878463</id><published>2010-01-22T09:06:00.011+05:00</published><updated>2010-08-26T15:03:41.159+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='запись'/><category scheme='http://www.blogger.com/atom/ns#' term='BASS'/><category scheme='http://www.blogger.com/atom/ns#' term='звук'/><title type='text'>Запись звука через BASS</title><content type='html'>&lt;img style="float:left; margin:0 10px 3px 0; width: 154px; height: 100px;" src="http://2.bp.blogspot.com/_g1EvW_ks9UI/S1liEQWpKZI/AAAAAAAAAL4/C8yTLT53_g4/s400/P1000600.JPG" border="0" alt="Запись звука через BASS" id="BLOGGER_PHOTO_ID_5429478651020781970" /&gt;&lt;br /&gt;В позапрошлой статье я писал про воспроизведение звука с помощью BASS. В следующей статье хотел написать и про запись, но неожиданное "открытие" регионов в HiAsm немного поменяло планы. Однако теперь можно и рассказать про запись звука с помощью BASS.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Итак, опять нам понадобится вкладка "BASS", группа "BASS запись". Вся подготовка к записи сводится к следующим шагам:&lt;br /&gt;1. &lt;strong&gt;Выбор устройства для записи.&lt;/strong&gt;&lt;br /&gt;2. &lt;strong&gt;Инициализация этого устройства.&lt;/strong&gt;&lt;br /&gt;3. &lt;strong&gt;Выбор входа на устройстве и установка его параметров.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Для первого шага понадобится компонент BASS_RecordDevices. Он небогат точками и параметрами, так что просто вызовите единственный его метод и соберите выданные устройства в какой-нибудь список. Только нужно помнить, что выдаётся &lt;a href="http://hi-asm.blogspot.com/2009/10/multithread-hiasm.html" target="_blank"&gt;многомерный поток&lt;/a&gt;. Элементы MT-потока написаны в описании события: это имя устройства, драйвер и флаги.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh106.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Из этой схемы вы увидите, какие устройства есть в вашем компьютере для записи звука. Но после выбора устройства нужно инициализировать его и получить доступные входы для записи в нём.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh110.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Посмотрите, что здесь сначала устройство освобождается, потому что перед выбором нового устройства могло быть инициализировано другое - его нужно освободить. А также стирается список входов устройства, иначе к старым входам просто добавлялись бы новые.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;После выбора входа из списка следует получить его текущие параметры, чтобы потом изменять их. Но компонента для получения параметров по устройству нет: параметры выдаются в компоненте BASS_RecordInput через многомерный поток. Поэтому воспользуется массивом многомерных потоков и оттуда будем вынимать нужные сведения.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh111.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Внимание!&lt;/strong&gt; Не перепутайте MT_MTArray и MT_Array! Последний - это не массив многомерных потоков, а массив элементов одного многомерного потока, он нам не нужен. И компонент здесь для работы с массивом MT-потоков MT_MTArrayRW, а не простой ArrayRW.&lt;br /&gt;&lt;br /&gt;А сейчас мы реализуем установку параметров входа.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh112.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь нужно смотреть внимательно, чтобы не запутаться. После инициализации устройства (входа) мы очищаем массив и список, а затем перечисляем все входы. При этом имена попадают в список, а в массив - ещё и другие параметры (громкость и состояние).&lt;br /&gt;&lt;br /&gt;При выборе входа из списка вновь происходит то же самое. Это нужно для того, чтобы обновить состояние входов, ведь мы можем изменять их вручную, и каждый раз ползунок и флажок должны принимать текущие значения, а не устаревшие.&lt;br /&gt;&lt;br /&gt;Но при выборе входа также один из многомерных потоков в массиве выдаётся на разбор, а ещё выделяется строка списка устройств. Принудительное выделение строки нужно потому, что при обновлении параметров устройств список очищается и снова заполняется устройствами, при этом выделение снимается.&lt;br /&gt;&lt;br /&gt;Компонент MT_MultiData разбивает MT-поток на элементы. Начинает он не с 0-го элемента, а с 1-го, потому что это указано в параметре From. Нам так и нужно, потому что в первом элементе хранится имя входа, а оно нам не нужно.&lt;br /&gt;&lt;br /&gt;Громкость изменяется в пределах от 0 до 1, а ползунок может принимать только целые значения. Для этого мы умножаем громкость на 100 и подаём значение на ползунок. А при установке громкости наоборот - делим (обязательно ResultType=Real).&lt;br /&gt;&lt;br /&gt;Подготовка закончена, остаётся лишь начать запись. Для этого поставьте на рабочее поле компонент BASS_RecordStart. Первым делом заполните его параметры (или точки данных, если будете подавать информацию на них). Ну а затем вызывайте соответствующий метод компонента.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh113.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Сегодня я, пожалуй, закончу, а в следующей статье расскажу про модификацию звука при записи и визуальные эффекты.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v047.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Отделайте квартиру или дом в итальянском стиле. Ковры, мебель, гобелены &lt;a href='http://www.krasdom.com/'&gt;смотрим здесь&lt;/a&gt;. Элитные итальянские предметы интерьера.&lt;br /&gt;&lt;br /&gt;Заболел щенок - обращайтесь в &lt;a href='http://www.biocontrol.ru/'&gt;ветеринарную клинику&lt;/a&gt; Биоконтроль. Полный спектр услуг: хирургия, онкология и даже пластическая хирургия.&lt;br /&gt;&lt;br /&gt;Если вам нужно место для собственного серверного оборудования - &lt;a href='http://www.di-net.ru/collocation/colocation/'&gt;colocation москва&lt;/a&gt;. Компания предоставляет места в своих дата-центрах.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-156600164337878463?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/156600164337878463/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/01/bass_22.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/156600164337878463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/156600164337878463'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/01/bass_22.html' title='Запись звука через BASS'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_g1EvW_ks9UI/S1liEQWpKZI/AAAAAAAAAL4/C8yTLT53_g4/s72-c/P1000600.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-472292560847320949</id><published>2010-01-20T19:11:00.014+05:00</published><updated>2010-08-26T15:04:45.551+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='регионы'/><category scheme='http://www.blogger.com/atom/ns#' term='hiasm'/><title type='text'>Регионы в HiAsm</title><content type='html'>В последнюю неделю я выяснил, что, оказывается, недостаточно полно знаю HiAsm. Я задался вопросом, как сделать форму нестандартной формы :) Поискал на эту тему в Google и в Яндексе, хотел уже в WinAPI разбираться, но тут случайно увидел на вкладке "Окно" то, что мне и нужно - регионы.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Там для них даже отдельная группа выделена. Специально для тех, кто тоже хочет узнать, как в HiAsm создавать окна произвольной формы, посвящается эта статья.&lt;br /&gt;&lt;br /&gt;Для начала создайте новый проект HiAsm и откройте вышеуказанную вкладку. В версии HiAsm 4.02 build 179 там находится 6 компонентов. Первые три почти одинаковы в точках и параметрах, а различаются только фигуры регионов. Можно попробовать, например, с третьим компонентом - RGN_Elliptic. Он создаёт регион эллиптической формы. Для этого нужно указать две точки: левый верхний угол и правый нижний.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh107.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь я задаю точки через параметры Point1 и Point2. Нужно нажать на кнопку рядом с параметром, тогда откроется окно для ввода координат. Компонент RGN_SetToWindow служит для применения региона к какому-либо окну. Для этого в точках данных компонента указываем идентификатор окна (Handle) и регион.&lt;br /&gt;&lt;br /&gt;Другие два компонента (RGN_Rect и RGN_RoundRect) очень похожи, поэтому разобраться с ними несложно самостоятельно. Однако один из них пригодится мне для следующего примера - объединения регионов компонентом RGN_Combine. Этот компонент расширяет возможности регионов, позволяя создавать действительно оригинальные нестандартные формы.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh108.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Очень важно здесь - правильно выставить режим Mode у RGN_Combine. Поэкспериментируйте с разными режимами и поймёте, для чего какой нужен.&lt;br /&gt;А для формы здесь применён параметр BorderStyle=bsNone и DragForm=True.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;У нас остаётся один нерассмотренный компонент - RGN_Script. В нём можно написать скрипт своего региона. Это несложно: в редакторе скрипта есть четыре кнопки для добавления команд. Здесь они почти те же самые, что и компоненты, про которые я рассказал. Но наибольший интерес представляет последняя команда - poly. Это многоугольник, компонента для которого нет.&lt;br /&gt;&lt;br /&gt;В этой команде нужно указать точки многоугольника. Все точки задаются через запятую: сначала по оси X, потом - Y.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh109.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;В одном и том же скрипте можно использовать сразу несколько команд. А в этом примере добавлена ещё прозрачность формы: AlphaBlendValue=150.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v046.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Желаете создать свой web-публикатор или портал - обратите внимание на скрипт &lt;a href='http://xoops.ws/'&gt;XOOPS&lt;/a&gt;. Поддержка разных баз данных.&lt;br /&gt;&lt;br /&gt;Для повышения надёжности, производительности и безопасности вашего веб-проекта возьмите &lt;a href='http://www.di-net.ru/collocation/dedicated/'&gt;сервер в аренду&lt;/a&gt;. Сервер на ваш выбор.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-472292560847320949?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/472292560847320949/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/01/hiasm.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/472292560847320949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/472292560847320949'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/01/hiasm.html' title='Регионы в HiAsm'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-3455688498176206663</id><published>2010-01-14T09:54:00.019+05:00</published><updated>2010-08-26T15:05:48.351+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BASS'/><category scheme='http://www.blogger.com/atom/ns#' term='звук'/><category scheme='http://www.blogger.com/atom/ns#' term='мультимедиа'/><title type='text'>Проигрывание звука с помощью BASS</title><content type='html'>Когда-то я рассказывал про &lt;a href="http://hi-asm.blogspot.com/2009/09/blog-post_23.html"&gt;проигрывание звука&lt;/a&gt;. Там для этого использовался компонент MediaPlayer. Однако на нём серьёзных программ для проигрывания не построить. Гораздо лучше воспользоваться профессиональными компонентами BASS, которые в HiAsm находятся на вкладке "Мультимедиа".&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Для работы понадобится библиотека bass.dll. Она находится в папке рядом в HiAsm, её нужно скопировать в папку Windows. Можно, конечно, поместить её в папку с программой, но тогда её придётся помещать в папку с каждой программой, использующей BASS, а при копировании в Windows библиотека будет работать для всех программ на компьютере.&lt;br /&gt;Если распространяете программу в Интернете, тоже не забудьте поставлять эту библиотеку.&lt;br /&gt;&lt;br /&gt;А теперь перейдём к программированию. Найдите группу компонентов "BASS2.4". Это версия текущей библиотеки. Нам понадобится самый первый компонент - BASS_Init. Он инициализирует подсистему BASS, что необходимо для работы с BASS. Идеально это делать сразу при входе в программу, т.е. по событию формы onCreate.&lt;br /&gt;&lt;br /&gt;У компонента также есть события. onInit происходит при успешной инициализации, и по нему можно выполнять какие-нибудь действия. onError - при ошибке инициализации. Это событие выдаёт в поток код ошибки, а его значение можно узнать из файла Elements\Delphi\code\bass.pas. Там они написаны в самом начале.&lt;br /&gt;&lt;br /&gt;Ещё у компонента есть точки данных и параметры. Назначение точек данных вполне понятно, как и некоторых параметров. Но вот в группе параметров Flags назначение параметров не указано, поэтому я их здесь опишу.&lt;br /&gt;&lt;strong&gt;8bit&lt;/strong&gt; - использовать 8-битное разрешение или 16-битное.&lt;br /&gt;&lt;strong&gt;mono&lt;/strong&gt; - использовать моно или стерео.&lt;br /&gt;&lt;strong&gt;3D&lt;/strong&gt; - включить или отключить трёхмерные возможности устройства.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh103.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Кроме этого, в группе "BASS2.4" есть ещё компоненты. BASS_CPU и BASS_Version нужны для получения информации (о загрузке процессора и версии BASS соответственно), а BASS_Device и BASS_Volume - для получения и установки нужных значений (устройства для вывода звука и громкости всей подсистемы BASS). Эти компоненты просты, с ними не составит труда разобраться.&lt;br /&gt;&lt;br /&gt;Теперь посмотрим на группу "BASS потоки". Компоненты здесь нужны для загрузки или создания звука. Возьмём первый - BASS_StreamCreateFile. Даже по названию понятно, для чего он нужен. Он может проигрывать следующие форматы: MP3, MP2, MP1, OGG, WAV, AIFF. У компонента есть множество параметров в группе Flags, некоторые из которых совпадают с рассмотренными выше.&lt;br /&gt;&lt;strong&gt;Loop&lt;/strong&gt; - циклическое проигрывание файла.&lt;br /&gt;&lt;strong&gt;Software&lt;/strong&gt; - не использовать аппаратное микширование.&lt;br /&gt;&lt;strong&gt;FX&lt;/strong&gt; - разрешить использование эффектов DirectX 8.&lt;br /&gt;&lt;br /&gt;Эти определения я брал из справки по bass, к сожалению, в HiAsm никаких справок на эту тему нет.&lt;br /&gt;&lt;br /&gt;Компонент BASS_StreamCreateURL делает то же самое, что и предыдущий компонент, только предназначен для загрузки музыки из Интернета. Он снабжён некоторыми дополнительными параметрами и точками, но в целом работа с ним не сильно отличается от работы с BASS_StreamCreateFile.&lt;br /&gt;&lt;br /&gt;BASS_StreamCreate предназначен для создания звука из потока. Для него не нужен файл - для него нужны 2 байта для создания соответствующего звука. Очень хорошо работу с этим компонентом демонстрирует стандартный пример Elements\Delphi\Example\Media\BASS\PlayStreamMix.sha.&lt;br /&gt;&lt;br /&gt;Остаётся ещё один компонент - BASS_MusicLoad. Он загружает музыку форматов MO3 / IT / XM / S3M / MTM / MOD / UMX. В подсказке к этому компоненту HiAsm версии 4.02 build 179 есть ошибка: неправильно указаны форматы. Поэтому обратите на это внимание.&lt;br /&gt;&lt;br /&gt;Мы разобрались с загрузкой, но теперь надо как-то проиграть загруженный файл. Поэтому переходим к новой группе компонентов - "BASS каналы". Вообще, компоненты с этой вкладки полностью управляют проигрыванием и позволяют получить разную информацию из проигрываемого потока. Самый нужный сейчас для нас - это BASS_ChannelPlay. Он проигрывает звуковой поток.&lt;br /&gt;&lt;br /&gt;Сейчас вам главное - понять, как указать компоненту, какой поток проигрывать (ведь загрузить можно несколько потоков). Раньше, в предыдущих версиях HiAsm, создавался идентификатор потока в виде точки внизу и подключался к верхней точке компонента для управления потоком. Сейчас используется технология менеджеров. В компоненте BASS_StreamCreateFile (и ему подобных) нужно указать имя звукового потока в параметре Name. Оно выбирается произвольно. А в BASS_ChannelPlay нужно выбрать в параметре Channel желаемый поток (имя).&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh104.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;В примере потоку дано имя firststream, но вы можете называть потоки как угодно.&lt;br /&gt;&lt;br /&gt;Рассмотрим и другие компоненты для управления звуковым потоком.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh105.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Разобраться здесь будет несложно, однако обратите внимание на некоторые особенности.&lt;br /&gt;Чтобы после паузы запустить проигрывание, нужно вновь нажать "Пуск", а не "Пауза".&lt;br /&gt;Компонент BASS_ChannelPlay содержит нижнюю точку, по которой можно узнать, проигрывается ли поток.&lt;br /&gt;Громкость в BASS изменяется в пределах от 0 (минимум) до 1 (максимум). Разумеется, возможны дробные значения, но ScrollBar выдаёт только целые числа, поэтому ставить максимум 1 в нём нельзя: не будет градации звука (т.е. возможности плавного изменения). Я в примере выставил максимум 100, а полученные значения делю на 100. У Math при этом ResultType=Real. Вот и получаются дробные значения, которые можно передавать компоненту.&lt;br /&gt;Конечно, можно установить максимум 1000 и делить на 1000 - так будет больше градаций (плавности изменения звука). Можно выбрать любое число.&lt;br /&gt;&lt;br /&gt;Обратите внимание на два последних компонента: BASS_ChannelEnumTags и BASS_ChannelFX_Eq. Первый вытаскивает из звукового потока теги, второй компонент - эквалайзер.&lt;br /&gt;&lt;br /&gt;В первом важно правильно выбрать тип тегов в параметре Type. Обычные mp3-теги - это ID3v2 теги (просто ID3 - это старая версия таких тегов).&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v045.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;&lt;img src="http://www.oxny.ru/images/product_0112_small.jpg"&gt;Экологически чистый продукт - капсулы для похудения &lt;a href='http://www.oxny.ru/products/products_0112_full.shtml'&gt;лида&lt;/a&gt;. Изготавливается из трав провинции Юньнань.&lt;br /&gt;&lt;br /&gt;Немедленно запретить &lt;a href='http://spice.su'&gt;курительные смеси&lt;/a&gt;! Самые разные легальные миксы goaspirit (гоаспирит), hydro fire (гидро фаер), eclipse moon (эклипс мун), goamoon (гоамун), goasun (гоасан) и по низким ценам - запретить.&lt;br /&gt;&lt;br /&gt;Как выучить столицы стран, как &lt;a href="http://sasmp-magnet.narod.ru"&gt;запоминать английские слова&lt;/a&gt;, как выучить даты по истории? Система АСМП "Магнит" - универсальное решение!&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-3455688498176206663?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/3455688498176206663/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2010/01/bass.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3455688498176206663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/3455688498176206663'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2010/01/bass.html' title='Проигрывание звука с помощью BASS'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-2319350570070624594</id><published>2009-12-19T18:34:00.009+05:00</published><updated>2010-08-26T15:06:46.003+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='сканер'/><category scheme='http://www.blogger.com/atom/ns#' term='принтер'/><title type='text'>Работа с принтером и сканером в HiAsm</title><content type='html'>Эта статья предназначена в основном для тех, у кого есть эти устройства. Но остальным тоже полезно почитать статью, ведь программу можно делать не только для себя, а для других, у кого принтер и сканер есть.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Итак, начнём со сканера. Думаю, все знают, что сканер нужен для получения снимка с печатных носителей, например книг, бумаг и т. д. Компонент для работы со сканером находится в HiAsm на вкладке "Система", в группе "Устройства". У него немного точек и параметров, и работать с ним легко.&lt;br /&gt;&lt;br /&gt;Для пробы компонента сканер у вас должен быть включен. Итак, ставим компонент TWAIN на рабочее поле HiAsm и смотрим на его точки. Первый метод - doSelectSource - предназначен для выбора источника сканирования. Пока сканер у вас не подключен, окно, открывающееся при вызове этого метода, пусто. Но когда устройство (или устройства, если их несколько) работает, то вы сможете выбрать нужное вам.&lt;br /&gt;&lt;br /&gt;А дальше остаётся только метод doScan - сканирование. Однако перед этим нужно решить, отображать ли окно с настройками вашего устройства. Это определяется либо параметром ShowUI, либо одноимённой точкой данных (см. вкладку "Точки"). Окно с настройками будет выводиться при вызове метода doScan, и в нём пользователь сможет выбрать нужные параметры сканирования, например, какой участок стекла сканера сканировать.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Если же вы решили не показывать это окно, то сканирование будет производиться сразу, и на событие onScan будет выдаваться снимок всего стекла сканера. Вот вам пример.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh100.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Дополнительно у компонента есть точки свойств Height и Width - они содержат оригинальные размеры отсканированной картинки.&lt;br /&gt;&lt;br /&gt;Теперь перейдём к печати. Это будет интересно тем, кто не раз задавался вопросом: как распечатать картинку на принтере через HiAsm? Сегодня я покажу, как печатать картинки через HiAsm.&lt;br /&gt;&lt;br /&gt;Но для начала установим компонент Printer на рабочее поле (он находится рядом со сканером). Как видите, у него тоже немного точек и параметров. Метод показа настроек печати спрятан на вкладке "Точки". При необходимости вы можете вывести его.&lt;br /&gt;&lt;br /&gt;Метод для печати - doPirnt. При его вызове никаких окон не появляется, а сразу начинается печать. Самое главное - выбрать, откуда будет происходить печать, то есть, что именно мы собираемся напечатать.&lt;br /&gt;&lt;br /&gt;Для этого сверху есть две точки: на одну нужно передать простой текст, который и будет распечатан. Если же нужно распечатать отформатированный текст, то есть текст из RichEdit, то для этого служит вторая точка. Чтобы понять, как к ней подключать RichEdit, внимательно рассмотрите следующий пример.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh101.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Видите, у RichEdit для этого есть специальная точка.&lt;br /&gt;&lt;br /&gt;Ну а сейчас мы рассмотрим, как вывести картинку на принтер в HiAsm. Это посложнее, чем предыдущие примеры, потому что нам придётся "учить" программу отрисовывать рисунок на контексте устройства. Это сродни тому, как мы рисуем карандашом на компоненте для рисования, только здесь рисует сам компонент (принтером) уже на бумаге. Взгляните на пример.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh102.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь верхние точки принтера уже не используются. Здесь используется компонент Img_Bmp, которые предназначен для отрисовки картинки. Очень важно правильно задать параметр DrawSource, ведь именно он определяет тип объекта для отрисовки картинки. Bitmap - это отрисовка на картинке, например в компоненте PaintBox. Handle - на элементе управления - любом контроле, имеющем точку свойства Handle, которую и нужно подключить к точке данных Bitmap. Ну а если требуется отрисовка на контексте устройства, то на точку данных подаётся этот контекст.&lt;br /&gt;&lt;br /&gt;Именно так у нас и происходит: контекст принтера передан этой точке данных. Ну и, конечно, установлен соответствующий DrawSource. К точке данных SourceBitmap мы присоединили точку свойства, содержащую картинку. Картинка уже находится в компоненте Image.&lt;br /&gt;&lt;br /&gt;Что нам остаётся для печати картинки? Только вызов метода doPrint! А затем происходит событие onPrint, которое возникает при необходимости отрисовать что-либо на контексте принтера. И вот по этому событию мы и производим отрисовку компонентом Img_Bmp. Если у вас есть принтер, обязательно попробуйте распечатать небольшую картинку.&lt;br /&gt;&lt;br /&gt;Ну вот, собственно, и всё. Таким образом вы сможете выводить на печать различные графические объекты, снимки экрана, собственные рисунки, про что было рассказано в статье про &lt;a href="http://hi-asm.blogspot.com/2009/09/hiasm_25.html"&gt;графику в HiAsm&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v044.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Сайт о комнатных растениях. Выращивание &lt;a href="http://home-plants.narod.ru/plants/aglaonema.html"&gt;декоративных растений&lt;/a&gt;. &lt;a href="http://home-plants.narod.ru/food/apelsin.html"&gt;Как вырастить апельсин из косточки&lt;/a&gt;, как вырастить дома виноград. Полезные советы по выращиванию комнатных растений.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-2319350570070624594?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/2319350570070624594/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/12/hiasm.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/2319350570070624594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/2319350570070624594'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/12/hiasm.html' title='Работа с принтером и сканером в HiAsm'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-8117235759786306984</id><published>2009-11-29T19:35:00.020+05:00</published><updated>2010-08-26T15:09:01.223+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='логика'/><category scheme='http://www.blogger.com/atom/ns#' term='ферзь'/><title type='text'>8 ферзей</title><content type='html'>Сегодня мы порешаем логические задачи с помощью HiAsm. Покажу я только одну, но схемы помогут лучше понять работу с компонентами, а также логику работы в HiAsm.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Итак, задача называется "8 ферзей". А звучит она очень просто: &lt;strong&gt;как расположить на шахматной доске 8 ферзей так, чтобы ни один из них не находился под угрозой других?&lt;/strong&gt; Да ещё разными способами.&lt;br /&gt;&lt;br /&gt;Задача на первый взгляд простая (кому-то так покажется). Все знают, как ходит ферзь (по вертикали, горизонтали и двум диагоналям на любое количество клеток). Быстро нарисуют 64 клетки и начнут отмечать точками ферзей, зачёркивать клетки, на которые распространяется угроза ферзей и на свободные клетки ставить новых ферзей.&lt;br /&gt;&lt;br /&gt;Да только после отметки всех клеток 8 ферзей получится у наиболее везучих. Обычно бывает 7 или даже всего 6 ферзей. Что уж там говорить о разных вариантах!&lt;br /&gt;&lt;br /&gt;Но у нас есть HiAsm, а программа на HiAsm может перебрать варианты значительно быстрее. И вы раз за разом будете получать новые комбинации из 8 ферзей, не находящихся под угрозой друг друга.&lt;br /&gt;Осталось лишь сделать программу.&lt;br /&gt;&lt;br /&gt;Перво-наперво делаем шахматную доску. Конечно, можно скопировать рисунок и вставить его в компонент Image, но не стоит это делать, потому что файл проекта будет занимать много места. Помните, что любая картинка в этом компоненте преобразуется в bmp. Поэтому мы просто нарисуем незамысловатую доску из 64 квадратиков.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh092.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;С виду - сложно, много связей. Но всё очень просто. Программа рисует 7 вертикальных и 7 горизонтальных линий. Делается это в цикле, где каждый раз сначала прибавляется число 47 к предыдущему результату. Затем сначала рисуется вертикальная линия, потом - горизонтальная. Смотрите: у вертикальных координаты Y постоянны, а у горизонтальных - X.&lt;br /&gt;&lt;br /&gt;А дальше нужно делать логику программы. Вот её суть.&lt;br /&gt;1. Генерируем случайное число, чтобы выбрать клетку.&lt;br /&gt;2. Проверяем, не занята ли она. Если занята, то генерируем новое, а если нет - ставим на неё ферзя.&lt;br /&gt;3. Зная, как он ходит, помечаем клетки, оказавшиеся под угрозой. Они также являются занятыми, и поставить на них ферзя должно быть невозможно.&lt;br /&gt;4. Повторяем эти действия, пока вся доска не окажется занятой.&lt;br /&gt;5. Считает количество ферзей. Если меньше 8 - начинаем заново.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Но в каких пределах генерировать число и как узнать потом номер клетки, ведь доска-то двухмерная? Мы используем матрицу, которая тоже двумерна. А числа будем генерировать два: для вертикали и горизонтали. Только договоримся так: свободные ячейки матрицы у нас будут иметь значение 0, занятые ферзями - 1, а те, на которые распространяется угроза ферзя - 2. Когда мы будем определять это, то обязательно будем записывать в матрицу значения.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh093.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Всё рисование я запихнул во вложенную схему, чтобы оно нам не мешало. Заодно я также сделал перед прорисовкой очищение картинки (дальше нам это понадобится) и инициализацию генератора случайных чисел (дело в том, что если это не сделать, то при каждом входе в программу будет генерироваться всегда одна и та же последовательность чисел).&lt;br /&gt;&lt;br /&gt;Здесь есть матрица целых чисел, и в ней 9 столбцов и строк (дело в том, что нумерация их также начинается с 0, и поэтому, чтобы было удобнее, мы берём 9 столбцов и строк, использовать из которых будем 1-8, а самые первые, под индексом 0, будут нерабочими). Кнопка заполняет матрицу нулями (очищает её), а затем генерирует два случайных числа. После генерации идёт проверка: ноль в соответствующей ячейке или нет. Если нет, то генерация производится снова. Если 0, то в ячейку записывается 1, то есть мы устанавливаем ферзя.&lt;br /&gt;&lt;br /&gt;&lt;img style="float:right; margin:0 0 10px 10px;width: 142px; height: 139px;" src="http://4.bp.blogspot.com/_g1EvW_ks9UI/SxNSIhEQoTI/AAAAAAAAAKo/-Edx1aQ3Eww/s400/ds.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5409757883670765874" /&gt;Как устанавливать угрозы? По вертикали и горизонтали это просто: нужно лишь перебрать все ячейки по Y при X=const. И наоборот. А вот с диагоналями сложнее.&lt;br /&gt;Посмотрите на рисунок. Ферзь - чёрный квадрат. Видим, что при подъёме или спуске по Y номера красных квадратов (диагональных) по X увеличиваются на 1 по модулю (т.е. по одной диагонали номер уменьшается, по другой - увеличивается) относительно номера по X ферзя. Этим мы и воспользуемся.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh094.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь пока установлены только угрозы по горизонтали и вертикали. А также использованы новые компоненты - глобальные переменные. Они хороши тем, что во всех компонентах GlobalVar, имеющих одинаковый параметр Name, содержатся одинаковые данные. Если в каком-то компоненте GlobalVar изменить данные, то в другом GlobalVar с таким же именем данные тоже изменятся. Глобальные переменные используются, чтобы не тянуть много связей.&lt;br /&gt;&lt;br /&gt;В схеме также есть два цикла. Первый устанавливает угрозы по вертикали, а второй - по горизонтали. Как видите, у первого MatrixRW Х всегда постоянный. Меняется Y в зависимости от итерации цикла. Таким образом, во всю вертикаль, где находится ферзь, мы заносим значение 2, что означает угрозу. Однако на этой вертикали есть и сам ферзь (это отмечено как 1), и в эту ячейку заносить 2 не нужно. Вот за этим используется IF_else: если Y попался тот, где находится ферзь, то никакое значение в матрицу не заносим.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh095.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;А здесь уже реализована расстановка угроз по диагонали. Рассмотрим первую часть установки. Она начинается с прибавления 1 к текущему Y (тому, где стоит ферзь). Это значит, полученное значение на доске будет ниже ферзя (см. рисунок выше). В нашем случае - 6. А теперь, чтобы получить при этом Y те значения Х, в которых есть угроза, нужно к текущему Х (где стоит ферзь) прибавить 1 и отнять один (получится два значения).&lt;br /&gt;&lt;br /&gt;При следующем прибавлении 1 к Y (итерация цикла) прибавить и отнять нужно уже 2 для Х, где стоит ферзь. Прибавляемое число реализуется в счётчике, который увеличивается на 1.&lt;br /&gt;&lt;br /&gt;Также идёт проверка, не выходит ли полученное число за пределы 1 и 8. И в матрицу записывается 2.&lt;br /&gt;&lt;br /&gt;Практически так же происходит расстановка угроз и выше ферзя. Только тут нужно идти от 4 (это значение выше Y ферзя на 1) до 1. Так как аналога downto я в HiAsm не нашёл, то просто из текущего Y вычитал прямые итерации цикла. А дальше всё аналогично.&lt;br /&gt;&lt;br /&gt;Итак, ферзь у нас стоит, угрозы его тоже обозначены. Но теперь нужно ставить следующего ферзя туда, где нет ферзей и угроз. А перед этим проверить, есть ли в матрице вообще свободные места, ведь после нескольких установленных ферзей их может и не быть.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh096.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь происходит перебор всех ячеек матрицы, и если хоть в одной будет 0 (т.е. свободное место), то в Memory сразу установится "+", иначе так и останется "-". Если есть свободные места - снова ставим ферзя (после этого надо сбросить Memory, чтобы там снова был "-"), если нет - то можно начинать отрисовку ситуации.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh097.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;И вот, наконец, происходит отрисовка. По сути, нам важны ячейки матрицы только со значением 1, там, где ферзи. Значения 2 нужны только на этапе расставления ферзей, чтобы не поставить ферзя под угрозу. Но если есть желание - можно использовать и двойки в матрице.&lt;br /&gt;&lt;br /&gt;Фигурку ферзя мы отрисовываем по координатам X и Y. Ведь размер каждой ячейки доски у нас примерно 47, и мы берём из цикла соответствующее значение (не забываем убавить на 1, потому что начинать нужно от 0, а цикл для удобства у нас начинается с 1), умножая его на 48 (это значение подбиралось опытным путём в соответствии с размерами фигурки ферзя).&lt;br /&gt;&lt;br /&gt;Произошло также небольшое изменение организации действий при нажатии кнопки: только при нажатии кнопки очищается рисунок и матрица, а при цикличной расстановке ферзей этого не происходит (нельзя при этом очищать матрицу, иначе все предыдущие расставления исчезнут до того, как будет заполнена вся матрица).&lt;br /&gt;&lt;br /&gt;Когда вы испробуете программу, то увидите, что чаще всего на доске оказывается 7 ферзей. Это наиболее вероятная расстановка. Но нажимайте кнопку много раз - и вы поймаете разные ситуации.&lt;br /&gt;&lt;br /&gt;Если же вам нужно всегда получать 8 ферзей, то после заполнения матрицы проверяйте, восемь ли единиц в ней. Если нет - очищайте её и заполняйте заново (разумеется, поставив компоненты для автоматического выполнения этих действий). И тогда все остальные комбинации вы не увидите, а сразу будете получать 8 ферзей.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v043.7z.001" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v043.7z.002" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br&gt;&lt;br /&gt;Внимание! Распаковывать архивы надо архиватором 7zip!&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Если вам нужно сфотографироваться, то вам нужен &lt;a href='http://fotosp.ru'&gt;&lt;a href="http://fotosp.ru/"&gt;фотограф Санкт-Петербург&lt;/a&gt;&lt;br /&gt;&lt;/a&gt;. Есть фотосессии для беременных в комфортной студии.&lt;br /&gt;&lt;br /&gt;Самые разные &lt;a href='http://www.pnevmotech.ru'&gt;винтовые компрессоры&lt;/a&gt; предлагает фирма "ПневмоТехника". Выберите компрессор из каталога и закажите его.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-8117235759786306984?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/8117235759786306984/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/8.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8117235759786306984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8117235759786306984'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/8.html' title='8 ферзей'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g1EvW_ks9UI/SxNSIhEQoTI/AAAAAAAAAKo/-Edx1aQ3Eww/s72-c/ds.jpg' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-5027190230238625297</id><published>2009-11-29T09:33:00.011+05:00</published><updated>2010-08-26T15:16:03.333+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='компоненты'/><title type='text'>Компоненты Type</title><content type='html'>Проходя по форуму HiAsm, увидел новые, интересные компоненты. Я их скачал и опробовал в действии. Здесь я расскажу об этих компонентах и работе с ними.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Скачать их можно &lt;noindex&gt;&lt;a href="http://hiasm.com/load.php?a=15826" rel=nofollow title="Ссылка уже не работает, но компоненты входят в дистрибутив HiAsm 4.04 build 184 и выше."&gt;по этой ссылке&lt;/a&gt;&lt;/noindex&gt;. Эти компоненты напоминают &lt;a href="http://hi-asm.blogspot.com/2009/10/multithread-hiasm.html"&gt;MultiThread&lt;/a&gt;, но разница в том, что каждый элемент такого многомерного потока можно именовать. Автор представлят это как создание нового типа переменной, в которую могут входить переменные разных типов (например, текст, картинка, число). И такая переменная тожет передаваться в потоке.&lt;br /&gt;&lt;br /&gt;Если вас это заинтересовало, то устанавливайте компоненты в HiAsm. В архиве есть файл install.his, его надо запустить, и у вас в HiAsm появится новая вкладка "Type", содержащая все эти компоненты.&lt;br /&gt;&lt;br /&gt;Попробуем поработать с ними. Сначала новый тип нужно создать, для этого есть компонент Type_Create. У него есть единственный метод для создания нового типа. Однако через этот компонент в него можно сразу добавить переменные - с помощью параметра Vars. У компонента сверху появятся точки, куда нужно передать значения переменным (а имена точек - это имена соответствующих переменных).&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh088.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь создание нового типа происходит сразу после открытия программы. При этом тип будет содержать три переменных: pict, txt, int. При этом отметьте, что новый тип называется MyType - в соответствии с параметром Name.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh089.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Компонент Type_Add добавляет новую переменную в созданный нами тип. Но для этого ему нужно передать указатель на тип, и поэтому верхняя точка GType должна присутствовать. Правда, указатель можно передать и в потоке (он выдаётся на событие onCreate компонента Type_Create), но тут мы добавляем новую переменную по нажатии кнопки, и в поток указатель не попадает. Так что используем верхнюю точку.&lt;br /&gt;&lt;br /&gt;В параметре Vars задаются имена добавляемых переменных. Там есть и GType, но - ВНИМАНИЕ! - это не переменная, а точка для получения указателя на созданный тип. И поэтому переменной с таким именем быть не может (ну, если только её добавить на этапе создания - там получение указателя не требуется).&lt;br /&gt;&lt;br /&gt;Компонент Type_Set изменяет значение выбранной переменной (или переменных). У него также есть точка данных GType для передачи указателя на тип. Имена верхних точек - это имена ранее созданных переменных, на которые нужно передать новые желаемые значения.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Компонент Type_MultiMem. Он извлекает значения из указанных переменных.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh090.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Как видите, точки с именами переменных у него находятся внизу, и поэтому в них точка данных GType не прописывается. Она находится на вкладке "Точки". В примере я получаю текст из переменной txt, созданной на этапе создания нового типа.&lt;br /&gt;&lt;br /&gt;Компонент Type_Delete тоже достаточно прост. Он удаляет переменные с выбранными именами из типа. При этом точки переменных никуда не выводятся, потому что они не нужны. Компонент просто удаляет переменные, и свзяь с ними через точки не требуется.&lt;br /&gt;&lt;br /&gt;Ну и, наконец, Type_Array. Компонент позволяет работать с переменными типа как с массивом. Каждый элемент массива - одна переменная. Её значение можно считать, можно записать новое.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh091.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Вот здесь я извлекаю переменную под индексом 2, то есть с нименем int.&lt;br /&gt;&lt;br /&gt;Теперь о том, зачем нужны эти компоненты. Пока что это пробная версия и никаких особых функций не имеет. Пригодятся компоненты в случае, если в программе есть несколько переменных (например, счётчиков или чего-то ещё), которые нужно передавать из одной части программы в другую. От каждой переменной (если вы храните её в том же Memory) трудно протягивать связи в другой конец схемы, а здесь нужно лишь передать указатель, то есть всего одна связь.&lt;br /&gt;&lt;br /&gt;Те же цели выполняет и MultiThread, но там элементам нельзя дать имена.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v042.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Для соединения изделий применяется &lt;a href='http://rusconnect.ru/catalog/other/id_157.html'&gt;шпилька резьбовая&lt;/a&gt;. Длина шпильки до 3 метров, а диаметр - 30-70 мм.&lt;br /&gt;&lt;br /&gt;Вы можете &lt;a href='http://www.wz96.ru/catalog/computers/nbooks.html'&gt;купить ноутбук&lt;/a&gt; в Екатеринбурге. Зайдите на сайт - там можно выбрать ноутбук по модели, по цене или названию, а также выбрать производителя и посмотреть комплектующие.&lt;br /&gt;&lt;br /&gt;Пора посетить тропический остров &lt;a href='http://www.tourister.ru/world/asia/china/city/hainan'&gt;Хайнань Китай&lt;/a&gt;. Страница хороша тем, что можно сразу увидеть погоду в Хайнань, посмотреть карту Китая и узнать подробности об этом острове.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-5027190230238625297?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/5027190230238625297/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/type.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5027190230238625297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5027190230238625297'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/type.html' title='Компоненты Type'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-2074172607798080801</id><published>2009-11-27T16:54:00.008+05:00</published><updated>2010-08-26T15:16:58.743+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sha'/><title type='text'>Добавление sha в меню "Создать"</title><content type='html'>&lt;img style="float:left; margin:0 10px 3px 0; width: 282px; height: 150px;" src="http://4.bp.blogspot.com/_g1EvW_ks9UI/Sw_NzhskoOI/AAAAAAAAAKI/qaIduUnvm-I/s400/sha.jpg" border="0" alt="Добавление sha в меню Создать" id="BLOGGER_PHOTO_ID_5408767962597597410" /&gt;&lt;br /&gt;&lt;br /&gt;В контекстном меню любой папки Проводника есть пункт "Создать". В нём находятся разные файлы, которые чаще всего создаются. Если Файлы проектов HiAsm вы тоже часто создаёте, то вам стоит добавить туда пункт для создания файлов sha.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Наверняка более-менее продвинутые пользователи уже догадались, что придётся идти в Реестр. Именно там хранятся сведения о пунктах этого меню. А вот где, я сейчас расскажу.&lt;br /&gt;&lt;br /&gt;Откройте редактор Реестра и найдите в ключе HKEY_CLASSES_ROOT раздел &lt;strong&gt;.sha&lt;/strong&gt;. В правой части посмотрите на значение по умолчанию - это имя ещё одного ключа, где хранится информация о программе. Должно быть &lt;strong&gt;shafile&lt;/strong&gt;. Ну а теперь в HKEY_CLASSES_ROOT найдите ключ shafile и выделите его. В правой части посмотрите на значение по умолчанию. Здесь отображается название типа файлов. Если ничего не написано, то обязательно напишите что-нибудь типа "Проект HiAsm". Это обязательно.&lt;br /&gt;&lt;br /&gt;Теперь вернитесь в ключ &lt;strong&gt;.sha&lt;/strong&gt;. В нём нужно создать подключ ShellNew, а в нём - строковый параметр FileName. Чем его заполнять? Ну, допустим, hiasm.sha. Однако этого ещё недостаточно. Чтобы файл создавался, нужно зайти в папку C:\WINDOWS\SHELLNEW и создать там файл с тем именем, которое вы написали в параметре FileName. В нашем случае это hiasm.sha. Например, сохраните файл через HiAsm.&lt;br /&gt;&lt;br /&gt;Теперь обновите Проводник или перезагрузите компьютер. Пункт должен быть добавлен.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;А если надо удалить этот пункт? Тогда просто удалите подключ ShellNew там, где вы его создали. Но вручную всё это делать долго, поэтому гораздо приятнее всё будет оформить в виде схемы HiAsm. И сделаем мы это как фоновое приложение, потому что форма здесь и не нужна вовсе.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh086.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Вот самая простая схема, которая и добавляет название типа файла, и сохраняет сам файл в папке SHELLNEW (используется список строк, потому что &lt;a href="http://hi-asm.blogspot.com/2009/09/sha.html"&gt;sha-файлы&lt;/a&gt; - это обычные текстовые файлы).&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Ну и для универсальности сделаем, чтобы программа могла ещё и удалять пункт из списка. Причём сама определяла, когда он есть (тогда удалять) и когда нет (тогда добавляла).&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh087.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь используется точка doExistsKey компонента Registry. Этот метод проверяет, есть ли указанный ключ (он указан в параметре Key), и на onExistsLey выдаётся соответствующее значение. А уже по нему программа либо удаляет ключ, либо добавляет.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v041.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Суперпрочное, долговечное и пожароустойчивое &lt;a href='http://www.fabrikadecora.ru/katalog.cgi?base=katalog&amp;id=8'&gt;термодерево&lt;/a&gt;. Оно экологически чисто и декоративно, а также влагоотталкиваемо и теплопроводно.&lt;br /&gt;&lt;br /&gt;Самых разных цветов &lt;a href='http://rusconnect.ru/catalog/electro/id_122.html'&gt;изолента&lt;/a&gt;. Изготовленная из поливинилхлорида, она способна выдержать не менее 5 киловльт напряжения!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://rusconnect.ru/images/logo.gif"&gt; Самые разные виды &lt;a href='http://rusconnect.ru/'&gt;нержавеющий крепеж&lt;/a&gt;: мебельный, оцинкованный, такелажный, высокопрочный.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-2074172607798080801?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/2074172607798080801/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/sha.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/2074172607798080801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/2074172607798080801'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/sha.html' title='Добавление sha в меню &quot;Создать&quot;'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g1EvW_ks9UI/Sw_NzhskoOI/AAAAAAAAAKI/qaIduUnvm-I/s72-c/sha.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-5347839833940487628</id><published>2009-11-24T09:59:00.010+05:00</published><updated>2010-08-26T15:19:03.468+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='рисование'/><title type='text'>Рисование</title><content type='html'>&lt;img style="float:left; margin:0 10px 3px 0; width: 64px; height: 65px;" src="http://4.bp.blogspot.com/_g1EvW_ks9UI/SwtreF6a8rI/AAAAAAAAAIw/gy-eQ-MAB6c/s400/paint.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5407533942315872946" /&gt;&lt;br /&gt;&lt;br /&gt;Вот такое простое название статьи, но точно соответствующее её сути. Сегодня мне хотелось бы рассказать об осуществлении возможности рисования в программе на HiAsm.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Это может быть нужно не только для простой программы-рисовалки, но и для выполнения каких-то задач, где пользователь должен графически что-то указать. В общем, спектр применения рисования даже от руки пользователя может быть широк.&lt;br /&gt;&lt;br /&gt;Реализация рисования в программе не сложна, но нужно, опять же, понимать, какое событие какие действия должно вызывать. Пока сделаем, чтобы в программе можно было просто рисовать карандашом от руки, без всяких других действий. Обычно это делается нажатием левой кнопки мыши на холсте и ведением его в нужном направлении. Отсюда встаёт задача: сделать так, чтобы при ведении мыши с нажатой левой кнопкой отрисовывалась линия.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh082.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Самый главный здесь компонент - Img_line, который и занимается отрисовкой линии на компоненте PaintBox (он специально для этого предназначен). У PaintBox есть два важных события: onMouseDown и onMouseMove. Первое происходит при нажатии мышью на компоненте, а второе - при передвижении мыши над ним (если быть точнее, то после каждого передвижения, при этом если скорость передвижения небольшая, то регистрируется малейшее движение, а если большая, то курсор может проскочить на достаточное расстояние, прежде чем произойдёт это событие).&lt;br /&gt;&lt;br /&gt;Также у компонента PaintBox есть точки свойств MouseX и MouseY, которые хранят положение курсора мыши после указанных выше событий. Нам эти-то положения и нужны. Ведь для построения линии компоненту Img_line нужна начальная точка и конечная. Первый раз начальную точку мы запоминаем после событие onMouseDown (индекс в канал нужен затем, чтобы позволять отрисовку только принажатой левой кнопке, ведь наши события выдают в поток индекс нажатой кнопки). Компонент PointXY формирует положение точки по её координатам.&lt;br /&gt;&lt;br /&gt;Когда происходит первое передвижение, сначала выполняется отрисовка. Первая точка при этом - запомненная ранее, а последняя - та, где оказался курсор мыши. Но эта точка должна стать начальной для следующей линии, и потому мы её запоминаем. При дальнейшем передвижении всё повторяется.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;В этом и состоит суть рисования. А теперь можно и поэкспериментировать.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh083.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Вы видите, что здесь можно выбирать и цвет, и толщину линии. Все эти точки находятся на вкладке "Точки". А также с помощью менеджера реализовано изменение курсора на один из курсором Windows.&lt;br /&gt;&lt;br /&gt;Ну, что ещё нужно для счастья? Удалять нарисованное? Для этого есть точка doClear компонента PaintBox. Рисовать прямоугольник? Пожалуй, этому стоит тоже научиться. Компонент-то соответствующий есть - Img_rectangle. Самое очевидное решение выглядит так:&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh084.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Первая точка всегда та, по которой щёлкнули мышью, а вторая меняется в зависимости от текущего положения курсора. Но вот беда: при нескольких передвижениях видно, что старые отрисованные прямоугольники не стираются! И выход здесь только один: запоминать изображение перед каждым рисованием и затем восстанавливать его.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh085.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Не запутайтесь в связях! При нажатии на PaintBox (событие onMouseDown) идёт не только запоминание координат первой точки, но и исходной картинки. А при движении мыши сначала отрисовывается картинка, а затем - прямоугольник. Лишние прямоугольники при этом всё равно рисуются, но моментально перекрываются исходной картинкой.&lt;br /&gt;&lt;br /&gt;Способ, конечно, достаточно ресурсоёмкий (ведь картинка может быть и большой), но других я пока что не нашёл.&lt;br /&gt;&lt;br /&gt;Компонентов для рисования графических примитивов ещё немало. Однако многие их них очень похожи на Img_Rectangle. В любом случае, не забывайте экспериментировать, а я как-нибудь постараюсь рассказать про рисование ещё что-нибудь интересное.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v040.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Если заболели - загляните в каталог предприятий и поищите &lt;a href='http://www.medeor.ru/catalog/apteki/'&gt;аптеки Москвы&lt;/a&gt;. В аптеках можно купит нужные лекарства.&lt;br /&gt;&lt;br /&gt;Как раскрутить сайт? Обратитесь в &lt;a href='http://www.seo66.ru'&gt;продвижение сайтов в Екатеринбурге&lt;/a&gt;. Вам проведут оптимизацию сайта, составят семантическое ядро и предоставят подробные отчёты.&lt;br /&gt;&lt;br /&gt;ООО "Неопласт" занимается проектирование и &lt;a href='http://litforma.com/index.cgi?base=kontent&amp;id=4'&gt;изготовление оснастки&lt;/a&gt;. Опытные специалисты выполнят при необходимости доработку оснастки.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-5347839833940487628?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/5347839833940487628/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_24.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5347839833940487628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5347839833940487628'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_24.html' title='Рисование'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g1EvW_ks9UI/SwtreF6a8rI/AAAAAAAAAIw/gy-eQ-MAB6c/s72-c/paint.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-4475457322573809518</id><published>2009-11-23T09:38:00.021+05:00</published><updated>2010-08-26T15:20:03.210+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='статитстика'/><category scheme='http://www.blogger.com/atom/ns#' term='компоненты'/><title type='text'>Статистика использования компонентов</title><content type='html'>&lt;img style="float:left; margin:0 10px 3px 0; width: 183px; height: 201px;" src="http://1.bp.blogspot.com/_g1EvW_ks9UI/SwoW4Zi3nAI/AAAAAAAAAII/03OKmfhh6gI/s400/stat.JPG" border="0" alt="Статистика использования компонентов" id="BLOGGER_PHOTO_ID_5407159460797324290" /&gt;&lt;br /&gt;&lt;br /&gt;Задался я тут как-то вопросом: а какие компоненты я использую чаще всего? Вопрос, конечно, интересный, но как это подсчитать? Вручную открывать схемы и считать - глупейшее занятие, потому что и за год, наверное, не пересчитать. И решил я сделать программу.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Если вам тоже интересно, какие компоненты вы используете чаще всего, то читайте дальше, я буду показывать создание программы. Но сначала определимся: что должна уметь программа? Конечно, собирать сведения о компонентах в файлах sha и представлять их таблице с количеством использованных.&lt;br /&gt;&lt;br /&gt;Очень важно знать &lt;a href="http://hi-asm.blogspot.com/2009/09/sha.html"&gt;состав sha-файлов&lt;/a&gt; и &lt;a href="http://hi-asm.blogspot.com/2009/10/hiasm.html"&gt;основные сведения о таблицах&lt;/a&gt;, потому что без этого просто не удастся получить данные и увидеть их.&lt;br /&gt;&lt;br /&gt;&lt;img style="float:right; margin:0 0 10px 10px; width: 361px; height: 265px;" src="http://3.bp.blogspot.com/_g1EvW_ks9UI/SwqGDd29y9I/AAAAAAAAAIQ/Z-4VIAuhYSQ/s400/sha.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5407281696724601810" /&gt;Известно, что компонент в sha-файле представлен названием, перед которым идёт слово &lt;em&gt;Add&lt;/em&gt; и открывающая скобка. Вроде бы выход очевиден: искать это сочетание и считывать название компонента, но не так всё просто. Если вы работали со списком строк, то знаете, что в его параметр Strings можно задать набор строк, который будет сохранён в файле sha. Но ведь в этом тексте можно написать и слово "Add", и скобку, что полностью сымитирует компонент, но будет являться лишь текстом!&lt;br /&gt;&lt;br /&gt;Поэтому придётся использовать другой способ. Любой компонент в sha-файле начинается с новой строки. И компонент "список строк" - тоже. И перед словом "Add" компонента ничего, кроме пробелов, быть не может. А вот перед текстом из параметра Strings всегда стоит название параметра (т.е. &lt;em&gt;Strings&lt;/em&gt;), что уже исключает интерпретирование частей текста как компонентов или каких-то других служебных слов.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Именно поэтому перебирать надо всю строку и искать в ней &lt;em&gt;Add&lt;/em&gt;. А если перед ним есть пробелы? Естественно, нужно их убирать.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh078.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Нажатие кнопки запускает поиск файлов на всём диске C:, но не торопитесь её нажимать, ведь если файлов sha у вас много, то поиск займёт немало времени, а пользы от него пока что никакой. Лучше посмотрите, что происходит после нахождения каждого файла - загрузка его в список строк. Однако это невизуальный список строк, он может хранить в себе строки, но не отображать их. Компонент находится на вкладке "Строки".&lt;br /&gt;&lt;br /&gt;Второе событие разветвителя, происходящее также после каждого найденного файла, вызывает перебор массива строк в списке. А вот компонент Trim и удаляет пробелы в конце и в начале строки из потока. Это его функция - удалять заданный в параметре Char символ.&lt;br /&gt;&lt;br /&gt;Затем, когда пробелов в начале уже точно нет, происходит копирование первых 4-х символов строки. Именно столько нужно, чтобы убедиться в наличии или отсутствии &lt;em&gt;Add(&lt;/em&gt;. И считать имеющей компонент только ту строку, в которой эти символы есть. А после этого надо считать название компонента, которое располагается сразу после открывающей скобки и до запятой, которая отделяет имя компонента от идентификатора.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh079.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Схема может показаться непонятной, но сейчас мы её разберём. Когда мы убедились, что строка содержит компонент, то нужно считать символы имени компонента. Сделать это можно разными способами, но я выбрал посимвольное копирование.&lt;br /&gt;&lt;br /&gt;Для начала в компоненте Math мы устанавливаем начальное значение (а точнее - сбрасываем значение у точки свойств Result до того, которое прописано в параметре Default). Этот компонент будет каждый раз прибавлять единицу, указывая на позицию следующего символа, который нужно скопировать, и начальное значение должно быть 4 - ведь со следующей, пятой позиции начинается имя компонента.&lt;br /&gt;&lt;br /&gt;Следующим событие мы очищаем результат в компоненте StrCat. Для чего это, вы поймёте позже.&lt;br /&gt;&lt;br /&gt;Ну а затем выполняем математическую операцию - прибавляем к первому операнду (который у нас берётся из результата, а его мы установили в 4) единицу. По событию onResult происходит копирование одного символа из строки, получившейся после удаления пробелов. Позицию этого символа указывает нам результат математической операции, и первый раз это 5.&lt;br /&gt;&lt;br /&gt;Элемент Case проверяет, не запятая ли этот символ. Если не запятая, то происходит сложение строк, первая из которых - это результат предыдущего сложения (вот зачем мы его очищали - чтобы при каждом новом компоненте он был пуст), а вторая - наш скопированный символ. Ну а второе событие вновь осуществляет прибавление единицы, и результат будет уже 6.&lt;br /&gt;&lt;br /&gt;Ну а если встретилась запятая? Это значит, что название компонента кончилось, и надо теперь регистрировать его. И здесь нам нужна будет таблица.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh080.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;И в этой схеме ничего сложного нет. Однако прежде всего важно понять смысл: компонент должен искаться в таблице и при НЕнахождении добавляться, а при нахождении - нужно увеличивать количество использования компонента. Ну а кто не знает про разрыв линии - почитайте про &lt;a href="http://hi-asm.blogspot.com/2009/10/hiasm_29.html"&gt;оптимизацию схем&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Когда скопированный символ является запятой, то добавлять его к строке не надо, это уже не название компонента. Вместо этого мы запускаем цикл со счётчиком. Первое его значение задаётся параметром Start и равно 0 (помните, что в списках, таблицах и т. п. первый элемент имеет индекс 0). Конечное значение задаётся количеством строк в таблице, но оно должно быть на 1 меньше, потому что последний элемент таблицы имеет индекс (Общее количество - 1). Чтобы не использовать математику, мы поставили параметр IncludeEnd=False. Это означает, что последнее срабатывание цикла не произойдёт.&lt;br /&gt;&lt;br /&gt;Что делает каждое срабатывание цикла? Оно читает из первого (под индексом 0!) столбца матрицы текст и сравнивает его с тем, что получился при сложении символов. Ведь именно в первом столбце мы будем хранить названия компонентов. Если текст не совпадает, то это ещё ничего не означет - название может быть в любой строке. А вот если совпало, то это точно означает, что такой компонент в таблице уже есть.&lt;br /&gt;&lt;br /&gt;Когда мы в этом убедились, то прерываем цикл (в дальнейшем переборе уже нет смысла: мы нашли то что искали) и извлекаем из &lt;strong&gt;второго&lt;/strong&gt; столбца таблицы (в той строке, в которой найдено совпадение) текст (а это количество использования компонента) и прибавляем к нему 1 (конечно, он автоматически преобразуется в число, и прибавление идёт к числу). А затем в ту же ячейку записываем значение.&lt;br /&gt;&lt;br /&gt;А как узнать, что компонента нет в таблице? В этом нам помогает параметр цикла onBreakEnable=True. При таком его положении событие onStop происходит только при естественной остановке цикла, а если было принудительное завершение (doStop), то событие это не происходит. Ну а doStop-то мы вызываем только при нахождении совпадения. Значит, onStop сработает только тогда, когда совпадения не было.&lt;br /&gt;&lt;br /&gt;И по этому событию мы просто добавляем новую запись в таблицу, не забывая во второй столбец занести 1, ведь один-то раз компонент уже использован, раз мы его нашли!&lt;br /&gt;&lt;br /&gt;Вот, в принципе, и всё. Но можно сделать несколько приятных дополнений, а именно: показ общего количества элементов, сортировку и обработку сообщений (чтобы программа не зависала при долгом поиске).&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh081.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;И теперь вы будете всегда осведомлены о количестве использованных компонентов. У меня, например, максимум пришёлся на Hub и MainForm. Свои результаты, если хотите, можете оставлять в комментариях.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v039.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Выпущенная по постановлению президиума ЦИК СССР &lt;a href='http://www.bse.info-spravka.ru/'&gt;Большая Советская Энциклопедия&lt;/a&gt; содержит множество статей на тему политики, экономики, а главное внимание уделяется Советкому Союзу, его хозяйству.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.web-espresso.com"&gt;Если вы бинесмен и вам нужно быстро сделать сайт, то обращайтесь в компанию Web-Espresso. Компания сделает сайт под ключ и установить сайт на сервере. Это сэкономит вам время и деньги.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Строите дом и нужно &lt;a href='http://www.bagplus.ru/articles/iz.php'&gt;проектирование деревянных лестниц&lt;/a&gt;? Баг-плюс выполнит и проектирование лестниц, и монтаж, и установку лестниц в вашем доме.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-4475457322573809518?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/4475457322573809518/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_23.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4475457322573809518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4475457322573809518'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_23.html' title='Статистика использования компонентов'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g1EvW_ks9UI/SwoW4Zi3nAI/AAAAAAAAAII/03OKmfhh6gI/s72-c/stat.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-2558977815783372982</id><published>2009-11-22T18:49:00.009+05:00</published><updated>2010-08-26T15:20:58.880+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='компоненты'/><category scheme='http://www.blogger.com/atom/ns#' term='hiasm'/><title type='text'>Новые компоненты для HiAsm</title><content type='html'>Как известно, хорошего много не бывает. Компонентов для HiAsm (а особенно - хороших) - тоже. Специально для тех, кому мало стандартных компонентов, я написал эту статью, из которой вы узнаете, где взять другие компоненты, нестандартные.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Надо помнить, что HiAsm ещё не так распространён, как та же Delphi, и поэтому компонентов для него написано не так много. Большее количество написанных, конечно, находятся в установочном комплекте, но некоторые (не попавшие в комплект по тем или иным причинам) можно найти на &lt;a href="http://hiasm.com" target=_blank&gt;сайте&lt;/a&gt;, в разделе Upload.&lt;br /&gt;&lt;br /&gt;Когда вы зайдёте в Upload, то увидите там два подраздела: схемы и компоненты. В схемах можно скачать сделанные форумчанами разные схемы, а вот в компонентах - конечно, компоненты. Компонентов там достаточно много, но не все из них идеально работоспособны, потому что на полную совместимость с другими компонентами их мало кто тестировал. Однако вы можете скачать их и установить себе.&lt;br /&gt;&lt;br /&gt;Чтобы установить компонент, перенесите его ini-файл в окно HiAsm. Далее выберите вкладку, на которой хотите его поместить, или введите свою. Рекомендую для нестандартных компонентов (таких, которых нет в комплекте, скачанных отдельно) создать отдельную вкладку, чтобы всегда знать, что это нестандартные компоненты. При выкладывании схем с такими компонентами будьте осторожны: у многих может не оказаться этих компонентов, так как не все скачивают их из Upload.&lt;br /&gt;&lt;br /&gt;Где ещё можно взять компоненты? С различных сайтов. Однако таких практически нет. Причина в том, что HiAsm пока ещё не так известен, как та же Delphi, и компонентов для него пишут мало.&lt;br /&gt;&lt;br /&gt;Ещё один вариант - написать компонент самому. Но для этого нужно знать не только pascal, но и KOL. Я постараюсь рассказать в других статьях про создание новых компонентов и вообще про структуру кода компонентов HiAsm.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;А теперь расскажу об очень важной вещи - SVN. Это место, где находятся обновления компонентов из комплекта HiAsm. Там можно скачать любой компонент и любой файл из папки Elemnts. Разработчики тестируют, правят компоненты и выкладывают их на SVN, чтобы обновить версии компонентов можно было до выхода новой версии самого HiAsm. В настоящий момент SVN HiAsm расположен по адресу http://hiasm.com/svn. Вы можете обновлять оттуда компоненты.&lt;br /&gt;&lt;br /&gt;Стоит отметить, что в справке HiAsm у каждого компонента есть ссылка для обновления с SVN. Однако справка версии HiAsm 4.02 b 179 не подходит, так как с того времени адрес SVN изменился. Нужна справка из HiAsm хотя бы 181. Впрочем, вы знаете адрес SVN и можете сходить туда без ссылки из справки.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;&lt;a href='http://www.tourister.ru/world/asia/thailand/city/ban_phattha_ya'&gt;Паттайя&lt;/a&gt; - курорт в ТАйланде с различными достопримечательностями, храмами, парками и зоопарками, театрами, пляжами, ресторанами и кафе, торгово-развлекательными центрами.&lt;br /&gt;&lt;br /&gt;А если вы собрались строить дом, то давно пора &lt;a href='http://www.uralway.ru/catalog/cement/id_8.html'&gt;купить цемент в Екатеринбурге&lt;/a&gt;. Быстро твердеющий глинозёмистый цемент и шлакопортландцемент.&lt;br /&gt;&lt;br /&gt;Перед постройкой дома посморите &lt;a href='http://www.realtym.ru/'&gt;новости недвижимости&lt;/a&gt;. Вы узнаете результаты различных исследований и мониторинга, а также общественное мнемние в сфере недвижимости.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-2558977815783372982?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/2558977815783372982/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/hiasm_22.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/2558977815783372982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/2558977815783372982'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/hiasm_22.html' title='Новые компоненты для HiAsm'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-4344633570071781948</id><published>2009-11-22T14:24:00.012+05:00</published><updated>2010-08-26T15:21:40.265+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='панель управления'/><title type='text'>Приложение для Панели управления</title><content type='html'>&lt;img style="float:left; margin:0 10px 3px 0; width: 182px; height: 105px;" src="http://1.bp.blogspot.com/_g1EvW_ks9UI/SwkFpXKsLMI/AAAAAAAAAHw/kRxW9u7pZ5o/s400/cpl.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5406859035786620098" /&gt;&lt;br /&gt;&lt;br /&gt;Зайдите в Панель управления и посмотрите на разноцветные значки в ней. За каждым из них скрывается настройка определённого устройства или системы. Значки здесь обладают необычными свойствами: их нельзя удалить, переименовать, копировать...&lt;br /&gt;Создадим и мы такой же.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Что для этого необходимо? Во-первых, определённые знания. В Панели управления только отображаются различные значки, а на самом деле хранятся они в папке C:\WINDOWS\system32 в файлах cpl, причём названия имеют совсем другие. Здесь их можно удалять и переименовывать. Правда, система обычно защищена от этого, и на месте удалённого файла cpl тотчас появляется его копия.&lt;br /&gt;&lt;br /&gt;А также необходимо знать, что в HiAsm есть отдельный тип проекта - Приложения для Панели управления. Выполните "Файл" - "Новый" и выберите этот пункт. Появится компонент, который можно увидеть только в этом проекте: CPL. Точки и параметры у него небогатые, да и визуальным он не является, то есть окно отобразить не может. Но это не значит, что проект бесполезен, потому что окно мы всё равно отобразим :)&lt;br /&gt;&lt;br /&gt;Прежде всего нужно обратить внимание на параметры компонента CPL. Name - это имя, которое будет отображаться в Панели управления (без разницы, как будет называться сам файл). Info - это всплывающая подсказка над элементом Панели управления. Ну и Icon, конечно, значок вашего элемента.&lt;br /&gt;&lt;br /&gt;События у компонента всегда, одно происходит при двойном щелчке на файле, другое - при загрузке в память. Это событие может инициировать любое доступное действие, любой метод. Только надо помнить, что в проект нельзя вставить визуальные компоненты и те компоненты, для работы которых требуется окно программы.&lt;br /&gt;&lt;br /&gt;Но вот, например, что можно получить и без визуальных элементов.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh075.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь происходит &lt;a href="http://hi-asm.blogspot.com/2009/10/blog-post_30.html"&gt;загрузка из Интернета&lt;/a&gt; странички, где выводится время. Затем поток преобразуется в строку, из которой выделяется время. И оно отображается в подсказке.&lt;br /&gt;Проект нужно скомпилировать, и получившийся файл поместить в папку C:\WINDOWS\system32, а затем зайти в Панель управления.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://hi-asm.narod.ru/ads.js"&gt;&lt;/script&gt;&lt;br /&gt;Конечно, это только демонстрационный пример, и ради получения времени не стоит засорять Панель управления.&lt;br /&gt;&lt;br /&gt;Форму (окно) в этом проекте не вывести. И по этой причине придётся использовать полноценное оконное приложение Windows, если вам нужно окно.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh076.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Этот апплет запускает программу. А программа - вот она:&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh077.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Её тоже нужно поместить в папку C:\WINDOWS\system32. Впрочем, если не хотите класть туда, можно положить куда угодно, главное - не забыть поменять путь в Приложении для Панели управления к программе. И после этого при запуске апплета будет запускаться программа, у которой возможности уже гораздо шире.&lt;br /&gt;&lt;br /&gt;В заключение напомню: не стоит засорять Панель управления разными апплетами. Туда обычно помещаются приложения для настройки устройств или системы.&lt;br /&gt;Этот проект вряд ли будет использоваться часто, но знать о его существовании будет полезно.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v038.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Посетите Индию (&lt;a href='http://www.india-trips.ru'&gt;туры в Индию&lt;/a&gt;) и побывайте в храмах Каджурахо и Форте Агры. А также прочтите отзывы туристов об Индии.&lt;br /&gt;&lt;br /&gt;Съездите во Флоренцию. Вас порадуют &lt;a href='http://www.florence-info.ru'&gt;отели Флоренции&lt;/a&gt;, а также достопримечательности Флоренции: церковь Санта-Мария Новелла, Санта Кроче, Орсанмикеле.&lt;br /&gt;&lt;br /&gt;Если вы строите дом в Москве, то вам нужен &lt;a href='http://www.pgbi.ru/catalog/cement/city_166/'&gt;цемент в Москве&lt;/a&gt;. Выберите из каталога предприятий нужную фирму и закажите цемент.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-4344633570071781948?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/4344633570071781948/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_22.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4344633570071781948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/4344633570071781948'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_22.html' title='Приложение для Панели управления'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g1EvW_ks9UI/SwkFpXKsLMI/AAAAAAAAAHw/kRxW9u7pZ5o/s72-c/cpl.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-5060503182453170966</id><published>2009-11-21T18:40:00.010+05:00</published><updated>2010-08-26T15:22:23.525+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='конвертирование'/><title type='text'>Конвертирование данных</title><content type='html'>&lt;img style="float:left; margin:0 10px 5px 0; width: 90px; height: 80px;" src="http://4.bp.blogspot.com/_g1EvW_ks9UI/Swf8VwePOiI/AAAAAAAAAHo/wFaRgz4_Tbs/s400/fd.jpg" border="0" alt="Конвертирование данных" id="BLOGGER_PHOTO_ID_5406567328400751138" /&gt;&lt;br /&gt;&lt;br /&gt;Поработав с &lt;a href="http://hi-asm.blogspot.com/2009/11/blog-post_19.html"&gt;файловым потоком&lt;/a&gt;, многие, наверное, задались вопросом: а как представить байт в двоичном виде или шестнадцатеричном? Другие хотят разбить число на группы из 3-х чисел, чтобы лучше воспринималось. А кто-то пользуется шифрованием, так ему нужно переводить текст в поток и обратно.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Компонент для конвертирования данных находится на вкладке "Инструменты". У него целых 17 режимов работы, и свои функции он с успехом выполняет.&lt;br /&gt;&lt;br /&gt;Начнём с первых &lt;strong&gt;IntToStr и StrToInt&lt;/strong&gt;. Это конвертирование числа в строку и обратно. Эти функции нужны, когда с числом требуется работать как со строкой. Например, из числа нельзя удалить какой-либо символ, а из строки - можно. А если сложить две строки и два числа, то результаты будут разные (например, 23 + 32 = 55, а у строк "23" + "32" = "2332"). Конечно, в число можно преобразовать только ту строку, в которой есть символы цифр.&lt;br /&gt;Однако практически во всех компонентах HiAsm уже реализован автоматический перевод числа в строку и обратно, например:&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh072.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;В поле ввода всегда находится текст (даже если там есть символы цифр), а цвет должен быть задан числом. Но конвертирование здесь происходит автоматически.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;RealToInt&lt;/strong&gt; - это округление числа с плавающей точкой. Надо помнить, что в таком числе должна стоять именно точка, а не запятая.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;CharToInt и IntToChar&lt;/strong&gt; - это получение числа по символу и наоборот. Когда я рассказывал про &lt;a href="http://hi-asm.blogspot.com/2009/11/blog-post_16.html"&gt;бинарные файлы&lt;/a&gt;, то говорил, что значению каждого байта соответствует символ. Так вот здесь можно по десятичному числу узнавать символ.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;HexToInt и IntToHEX&lt;/strong&gt; - перевод между десятичным и шестнадцатеричным числами. Причём здесь надо иметь в виду параметр Digits, который определяет минимальное количество знаков в шестнадцатеричном числе. Если, например, поставить 3, то вместо 6D будет выводиться 06D, т.е. слева добавляются нули.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;BinToInt и IntToBin&lt;/strong&gt; - конвертирование десятичного и двоичного чисел. Также действует параметр Digits для двоичных чисел.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh073.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;RealToStr и StrToReal&lt;/strong&gt; - конвертирование между числом с плавающей точкой и строкой. Также практически не используется из-за автоматического преобразования в кодах компонентов.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;StreamToStr и StrToStream&lt;/strong&gt; - конвертирование файлового потока в строку и обратно. Используется, когда строку символов нужно обработать как файловый поток, например при &lt;a href="http://hi-asm.blogspot.com/2009/11/hiasm_20.html"&gt;шифровании информации&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;IntToRom и RomToInt&lt;/strong&gt; - преобразование десятичных чисел в римские и обратно.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;StrToTri&lt;/strong&gt; - разбиение строки на триады символов. Требуется, когда число нужно представить в более удобном для восприятия виде. Но число не может содержать пробелы, поэтому сперва его надо сконвертировать в строку, а затем - разбить на триады.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;StrToWrd&lt;/strong&gt; - ничего не преобразует, но подставляет в конец строки (представляемой им как число) соответствующую словоформу.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh074.sha" rel="nofollow"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Ну, вот и всё.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v037.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Побывайте в стране &lt;a href='http://www.newzeland.su'&gt;Новая Зеландия&lt;/a&gt; и посетите замечательный курорт Веллингтон.&lt;br /&gt;&lt;br /&gt;Также для вас есть &lt;a href='http://www.mexica.su'&gt;туры в Мексику&lt;/a&gt;. Множество автомобильных трасс, есть аренда автомобиля.&lt;br /&gt;&lt;br /&gt;Можете взять и &lt;a href='http://www.brasil-info.ru'&gt;туры в Бразилию&lt;/a&gt;. Замечательный курорт Сан-Паулу с его музеями, заповедниками и стадионами.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-5060503182453170966?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/5060503182453170966/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_21.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5060503182453170966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5060503182453170966'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_21.html' title='Конвертирование данных'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g1EvW_ks9UI/Swf8VwePOiI/AAAAAAAAAHo/wFaRgz4_Tbs/s72-c/fd.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-6742363687783863007</id><published>2009-11-21T10:46:00.006+05:00</published><updated>2010-08-26T15:22:55.395+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='архив'/><category scheme='http://www.blogger.com/atom/ns#' term='zip'/><category scheme='http://www.blogger.com/atom/ns#' term='hiasm'/><title type='text'>HiAsm и ZIP-архивы</title><content type='html'>&lt;img style="float:left; margin:0 10px 5px 0; width: 259px; height: 100px;" src="http://1.bp.blogspot.com/_g1EvW_ks9UI/SweIqrTR2NI/AAAAAAAAAHg/y2sRG9BVo-k/s400/zip.JPG" border="0" alt="HiAsm и ZIP-архивы" id="BLOGGER_PHOTO_ID_5406440144441039058" /&gt;&lt;br /&gt;&lt;br /&gt;В статье про &lt;a href="http://hi-asm.blogspot.com/2009/11/blog-post_20.html"&gt;сжатие файлов&lt;/a&gt; я ничего не рассказывал о стандартных для Windows zip-архивах. А между тем сжатие в них тоже производится по алгоритму zip, но они доступны для открытия средствами Windows. И самое главное: если вам понадобится в программе извлечь данные из zip-архива, то без компонента Zipper не обойтись.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Компонент Zipper находится на вкладке "Система", в группе "Компоненты". Его версия в дистрибутиве программы, к сожалению, ограничена по функциональности. Недостатком является отсутствие важных точек (например, для задания комментария и пароля), а также поддержка файлов размером не больше 15-18 Мб. Поэтому для серьёзной работы и создания своего архиватора он не годится, но для разовых действий типа извлечения нужного файла из архива он подойдёт в самый раз.&lt;br /&gt;&lt;br /&gt;Помните также, что для работы компоненту требуется bszip.dll, которые лежит рядом с HiAsm. Он должен находиться либо рядом с программой, либо в папке Windows.&lt;br /&gt;&lt;br /&gt;Упаковать файлы достаточно просто, но нужно обратить внимание на некоторые специфические параметры компонента.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh070.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Сначала вы выбираете файлы. Параметр Select у диалога открытия установлен в Multi, что означает возможность множественного выбора файлов. При упаковке после выбора имени архива в диалоге сохранения сначала вызывается метод для создания нового архива, а затем из списка все файлы добавляются на упаковку. И лишь затем вызывается метод для собственно упаковки.&lt;br /&gt;&lt;br /&gt;Обратите внимание на группу параметров ZIP. Эти параметры управляют сжатием. Здесь можно выбрать и степень сжатия, и задать комментарий. Правда, из программы этот комментарий уже не изменить (точки-то нет). Но, как уже говорилось, для единичного использования сойдёт.&lt;br /&gt;&lt;br /&gt;Теперь займёмся распаковкой архива.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh071.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Чтобы открыть архив, нужно скинуть файл на иконку программы. Если будет скинуто несколько - откроется только первый, потому что из массива извлекается только первое имя (под индексом 0).&lt;br /&gt;&lt;br /&gt;Затем идёт получение списка файлов в архиве. Причём выдаётся не просто имя файла, а все его специфические характеристики: размер до и после упаковки, время изменения, степень сжатия. Выдаются эти характеристики в отдельной строке для каждого файла через разделитель - табуляцию. И поэтому здесь удобно использовать таблицу, у которой StrDelimiter надо выставить в &lt;strong&gt;\9&lt;/strong&gt;. 9 - это номер табуляции в таблице символов (байт со значением 9 интерпретируется как табуляция), а косая черта - служебный символ, показывающий, что разделитель не цифра 9, а именно символ табуляции.&lt;br /&gt;&lt;br /&gt;В &lt;a href="http://hi-asm.blogspot.com/2009/10/hiasm.html"&gt;таблице&lt;/a&gt; уже созданы все колонки. Остаётся только сделать двойной щелчок мышью - и запустится метод извлечения файла, который находится под индексом, переданным на верхнюю точку.&lt;br /&gt;&lt;br /&gt;И здесь опять же нужно посмотреть на параметры компонента Zipper, на группу UNZIP. Все 4 параметра, но очень важных. Во-первых, TestOnly=False, то есть произойдёт реальное извлечение, а не тестирование. Во-вторых, OverwriteExisting и SkipOlder - проверьте их значения, чтобы уже существующие файлы не были перезаписаны. Ну и UseFolders - если вы упаковывали файлы из разных папок, то в архиве будут данные об относительных путях файлов. Это нужно, чтобы все файлы извлеклись по тем папкам, где и были.&lt;br /&gt;&lt;br /&gt;Ну и на точку BasePath передаётся имя папки, откуда была запущена программа (то есть папка, где был архив).&lt;br /&gt;&lt;br /&gt;У компонента также есть точки для удаления файлов из архива, для множественной упаковки файлов (по маске имени) и событие прогресса, по которому можно узнавать текущее положение дел. Впрочем, из-за ограничения на размер архива целесообразность этой функции сомнительна.&lt;br /&gt;&lt;br /&gt;А в следующей статье я расскажу о конвертировании различных типов данных.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v036.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Хотите путешествовать - выберите &lt;a href='http://www.all-stockholm.ru'&gt;Швеция Стокгольм&lt;/a&gt;. Есть разные виды виз в Швецию. Отзывы туристов о путешествии в Стокгольм.&lt;br /&gt;&lt;br /&gt;Посетите остров Пхукет. &lt;a href='http://www.travel-phuket.ru'&gt;Экскурсии на Пхукете&lt;/a&gt; включат посещение храма Ват Чалонг, а также побережье Равай Бич. Заглянете на фермы крокодилов и слонов.&lt;br /&gt;&lt;br /&gt;А можете ещё посетить Стамбул. Замечательный &lt;a href='http://www.istanbul-guide.ru'&gt;шоппинг в Стамбуле&lt;/a&gt; на рынке Sultanahmet со множеством достопримечательностей. Шубы, обувь, ковры, а также подарки из Стамбула.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-6742363687783863007?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/6742363687783863007/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/hiasm-zip.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/6742363687783863007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/6742363687783863007'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/hiasm-zip.html' title='HiAsm и ZIP-архивы'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g1EvW_ks9UI/SweIqrTR2NI/AAAAAAAAAHg/y2sRG9BVo-k/s72-c/zip.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-8234250365780991818</id><published>2009-11-20T17:49:00.007+05:00</published><updated>2010-08-26T15:23:30.090+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='файл'/><category scheme='http://www.blogger.com/atom/ns#' term='шифрование'/><title type='text'>Шифрование информации в HiAsm</title><content type='html'>Компонентов для шифрования в HiAsm нет, поэтому вам нужно &lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/crypt.rar0" rel=nofollow&gt;скачать&lt;/a&gt;&lt;/noindex&gt; их. В архиве находится целых 16 компонентов - для 16 алгоритмов шифрования, а потому для них желательно создать новую вкладку.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Установить компоненты в HiAsm очень просто, нужно лишь сбросить ini-файлы в окно открытого HiAsm'а, а затем выбрать там вкладку или ввести имя новой.&lt;br /&gt;&lt;br /&gt;Теперь нужно приглядеться к новым компонентам. Возьмём, например, алгоритмы Idea и Cast256. Подробно о них можно прочитать в Интернете, но основные параметры отражены прямо в короткой справке.&lt;br /&gt;&lt;br /&gt;У алгоритма Idea блина блока 64 бита, а длина ключа - 128 бит. Это значит, что при шифровании файлового потока он будет разбит на блоки по 64 бита (8 байт), и к этим блокам будет применено шифрование. Для шифрования используется 128-битный ключ, который программа составляет из пароля, введённого вами. При расшифровке к зашифрованным блокам применятеся обратный алгоритм. При этом размер зашифрованных данных равен размеру исходных.&lt;br /&gt;А у Cast256 длина ключа равна 256 бит. Чем больше длина ключа, тем надёжнее считается алгоритм.&lt;br /&gt;&lt;br /&gt;Какой из них использовать - вам решать. Можно все вперемешку. Но сначала посмотрим на простой пример.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh065.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь при нажатии Enter текст из потока сначала запоминается, а затем происходит переключение переключателя (в его параметрах указано 0 и 1). А IndexToChanel направляет при одном событии текст на шифрование, при втором - расшифровку. Так что можете вводить текст и получить шифр по паролю (он в параметрах компонентов шифрования).&lt;br /&gt;&lt;br /&gt;Отдельно стоит сказать про конверторы. Компоненты для шифрования шифруют только поток, и потому текст нужно предварительно привести к потоку. Конвертор находится в "Инструментах", внимательно смотрите на его параметр Mode. При его изменении изменяется и иконка компонента. А когда данные преобразованы (зашифрованы или расшифрованы), поток нужно снова преобразовать в текст и только потом записать в поле ввода. Отметьте, что количество символом никогда не меняется.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh066.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;А вот так мы шифруем файл. Не забудьте указать пароль.&lt;br /&gt;&lt;br /&gt;Схему для расшифровки я не привожу, потому что она практически идентична этой, только используется другое метод компонента шифрования.&lt;br /&gt;&lt;br /&gt;Напоследок дам совет: используйте шифрование вместе со сжатием (если это возможно в вашем проекте). Ведь уменьшение размера файла - это практически всегда плюс. Однако сжатие нужно проводить исходных данных, потому что зашифрованные обычно плохо сжимаются.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh067.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;А расшифровку нужно проводить в обратном порядке.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh068.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Однако если вы захотите открыть сжатый файл в архиваторе, то ничего не получится: сжатые данные - это только начинка zip-архивов, а у настоящих zip-архивов в файле, кроме сжатых данных, есть ещё разные служебные данные типа имён сжатых файлов. В следующей статье я расскажу, как в HiAsm работать с zip-архивами.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v035.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Для отдыха или постоянного проживания можете купить &lt;a href='http://www.home585.ru/'&gt;дома в Испании&lt;/a&gt; на побережье моря. Хорошая недвижимость в Испании.&lt;br /&gt;&lt;br /&gt;Для любителей эротики и порно - &lt;a href='http://vduplo.ru'&gt;xxx video&lt;/a&gt;. Картинки небольшого размера (для тех, у кого низкая скорость). Самые разные xxx video ролики.&lt;br /&gt;&lt;br /&gt;Если у вас скоро свадьба, вам нужен &lt;a href='http://fotosp.ru/'&gt;&lt;a href="http://fotosp.ru/content/blogsection/0/200/"&gt;свадебный фотограф&lt;/a&gt;&lt;/a&gt;. Пригласите свадебного фотографа, чтобы свадьба запомнилась надолго.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-8234250365780991818?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/8234250365780991818/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/hiasm_20.html#comment-form' title='Комментарии: 22'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8234250365780991818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/8234250365780991818'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/hiasm_20.html' title='Шифрование информации в HiAsm'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-7878473774764643003</id><published>2009-11-20T11:11:00.007+05:00</published><updated>2010-08-26T15:24:05.320+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='информация'/><category scheme='http://www.blogger.com/atom/ns#' term='сжатие'/><title type='text'>Сжатие информации</title><content type='html'>И опять я буду рассказывать про файловый поток, потому что сжатие будет осуществляться именно с ним.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Алгоритмы сжатия существуют разные, один из самых известных - ZIP. В HiAsm есть компонент для сжатия по алгоритму ZIP, но отдельно можно скачать компоненты для сжатия по алгоритмам &lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/lzh.rar0" rel=nofollow&gt;LZH&lt;/a&gt;&lt;/noindex&gt; и &lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/lzma.rar0" rel=nofollow&gt;LZMA&lt;/a&gt;&lt;/noindex&gt;. Не забудьте rar0 переименовать в rar.&lt;br /&gt;&lt;br /&gt;В архивах вы найдёте файлы pas, ico, ini. Можете почитать статью про &lt;a href="http://hi-asm.blogspot.com/2009/10/hiasm_16.html"&gt;устройство HiAsm&lt;/a&gt;, но компоненты можно установить из без неё. Распакуйте архив в отдельную папку, запустите HiAsm и сбросьте ini-файл в окно HiAsm. В открывшемся окне выберите пакет Delphi и вкладку, на которую хотите установить компонент. Вы также можете вписать имя новой вкладки, и тогда она будет создана. После этого откройте вкладку и найдите в её конце новый компонент. Чтобы его передвинуть выше, нажмите на нём правой кнопкой и выберите "переместить вверх".&lt;br /&gt;&lt;br /&gt;Ну а теперь потренируемся сжимать информацию. Для этого нужен &lt;noindex&gt;&lt;a href="http://hi-asm.blogspot.com/2009/11/blog-post_19.html" rel=nofollow&gt;файловый поток&lt;/a&gt;&lt;/noindex&gt;, про него я рассказывал.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh061.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Вот схема zip-сжатия файла. Сначала вы выбираете файл для сжатия и файл, куда сохранять сжатые данные. Затем происходит открытие файла, выдача файлового потока на onLoad и сжатие его компонентом ZLIB (вкладка "Файлы"). Следует отметить, что компоненту требуется библиотека ZLIB.dll, которая находится в папке Plug. Не забывайте класть её в папку с программой, если собрались выкладывать в Интернет.&lt;br /&gt;&lt;br /&gt;У второго FileStream используется точка doCopyFromStream, которая записывает весь файловый поток в файл, однако ни открытия, ни закрытия файла здесь нет. Дело в том, что параметр AutoCopy у FileStream установлен в true, то есть метод doCopyFromStream сам будет открывать и закрывать файл. Здесь это очень удобно.&lt;br /&gt;&lt;br /&gt;Распаковка не отличается от упаковки, поэтому я даже схему приводить не буду: надо у компонента ZLIB лишь использовать точку doDeCompress, а целом - всё то же самое.&lt;br /&gt;&lt;br /&gt;Сжатия по другим алгоритмам происходят так же, но остальные два компонента немного сложнее, поэтому их нужно рассмотреть подробнее.&lt;br /&gt;&lt;br /&gt;У компонента LZHComp точки для сжатия и распаковки файлового потока спрятаны на вкладке "Точки", а по умолчанию видны точки для сжатия файла с сохранением в новый файл. Если у вас такая простая цель, то можно использовать и их, но в более сложных случаях придётся всё-таки выводить точки для упаковки файлового потока. Помните, что упакованный/распакованный поток выдаётся на точку onStreamResult, а не на onResult.&lt;br /&gt;&lt;br /&gt;Компонент LZMA не имеет точек для упаковки файлов, но он выполнен более профессионально и позволяет получить информацию о прогрессе кодирования и степени сжатия. Поэтому посмотрим схему.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh062.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Обратите внимание на параметр компонента ProgressInterval - он определяет, через сколько миллисекунд будет выдаваться информация о текущем кодируемом байте. По умолчанию - 50 мсек, этого достаточно. Перед началом сжатия происходит установка максимального значения полосы прогресса, а затем каждые 50 мсек - установка значения текущего сжимаемого байта.&lt;br /&gt;В схеме используется компонент Application. Благодаря вызову его метода программа не зависнет при долгом выполнении сжатия, она всё равно будет отображать прогресс.&lt;br /&gt;Пока это происходит, третье событие разветвителя ожидает и не происходит. Но как только сжатие завершится, третье событие мигом оповестит нас о степени сжатия, получив нужную информацию из компонента.&lt;br /&gt;А четвёртое событие закроет файл.&lt;br /&gt;&lt;br /&gt;Стоит отметить, что алгоритмы сжатия можно использовать совместо и чередовать. Например, так:&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh063.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Но тогда распаковку нужно проводить в обратном порядке:&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh064.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Однако совместное использование не всегда означет лучшую степень сжатия, поэтому вы можете самостоятельно пробовать разные комбинации и сравнивать степени сжатия.&lt;br /&gt;&lt;br /&gt;В следующем посте я расскажу про шифрование информации с паролем.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v034.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://odnaknopka.ru/ok2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Чтобы жить спокойно, установите &lt;a href='http://electrovision.ru/catalog/supervision/'&gt;скрытое видеонаблюдение&lt;/a&gt;. Можно запрограммировать систему на реакцию при происхождении подозрительных событий.&lt;br /&gt;&lt;br /&gt;Если ваша дверь всё ещё без таблички, а гардероб - без номерков, то пора сделать &lt;a href='http://www.nameboard.ru'&gt;изготовление табличек&lt;/a&gt;. Металлические таблички, с гравировкой.&lt;br /&gt;&lt;br /&gt;Для хорошего дома нужны хорошие лестницы. Как вариант - &lt;a href='http://www.bagplus.ru'&gt;винтовые лестницы для дома&lt;/a&gt;. Компания "Баг-плюс" спроектирует и изготовит лестницы из разных материалов разных конструкций.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-7878473774764643003?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/7878473774764643003/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_20.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/7878473774764643003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/7878473774764643003'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_20.html' title='Сжатие информации'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-1240246300330917900</id><published>2009-11-19T20:04:00.005+05:00</published><updated>2010-07-01T14:38:39.740+06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='бинарные файлы'/><category scheme='http://www.blogger.com/atom/ns#' term='файл'/><category scheme='http://www.blogger.com/atom/ns#' term='файловый поток'/><title type='text'>Файл "своего" типа</title><content type='html'>Если вашей программе требуется сохранять в файлах какие-то специфические данные, то наверняка встанет вопрос о формате файла. Например, если сохраняются картинка, текст и звук в одном файле. Можно, конечно, воспользоваться компонентом Zipper, который упакует всё в zip-архив, однако "свой" формат - это более профессионально и универсально.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Поскольку мы говорим о сохранении в файле картинок и других нетекстовых данных, то ясно, что использовать придётся файловый поток и работать с байтами файла. А потому прочтите статью о &lt;a href="http://hi-asm.blogspot.com/2009/11/blog-post_16.html"&gt;бинарных файлах&lt;/a&gt; и работе с &lt;a href="http://hi-asm.blogspot.com/2009/11/blog-post_19.html"&gt;файловым потоком&lt;/a&gt;, если вы ещё этого не сделали.&lt;br /&gt;&lt;br /&gt;Прежде всего, необходимо решить, как будет устроен ваш формат. Ведь файл – это просто набор байт, и если программа не будет знать, откуда какие данные читать, то ничего извлечь не сможет, ведь любой байт может принадлежать к любым данным.&lt;br /&gt;&lt;br /&gt;Для демонстрации создадим формат, который будет содержать в себе картинку, комментарий к ней и звук. И пусть первыми будут байты картинки, следующими – байты комментария, а затем – байты звука. Картинку и звук будем брать с диска, комментарий – писать сами.&lt;br /&gt;&lt;br /&gt;Но если мы байты из файла картинки, комментарий и байты из файла звука добавим друг за другом, то потом не сможем определить, где кончаются одни данные (например, картинка) и начинают другие (комментарий). А потому перед байтами каждых данных нужно записывать их размер (т.е. количество байт этих данных). Размер – это число, поэтому можно использовать значения байт (ведь это тоже числа). Но один байт может иметь максимальное значение 255, и это мало. Оптимально – 4 байта, это более 4 миллиардов значений. И максимальное количество байт, которое можно обозначить 4-мя байтами – 4 Гб.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh058.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;В этой схеме загрузка картинка вам уже известна. А вот загрузка звука идёт не для проигрывания, а для получения байт из файла звука. Как вы видите, после открытия идёт его закрытие, но событие onLoad компонента FileStream передаёт файловый поток компоненту MemoryStream, который предназначен для запоминания файлового потока. Мы делаем так, чтобы не прекращать доступ к файлу других программ, пока работает эта.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh059.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Поначалу может показаться, что схема сложная, но начинаем, как обычно, с первых событий и идём по линиям связи…&lt;br /&gt;При сохранении файла сначала в диалоговом окне запрашивается имя для сохранения. Введите любое. Расширение также не имеет значения. Оно передаётся в потоке через разветвитель на метод doOpen. А FileStream имеет Mode=Write, то есть файл открывается для записи. А если файла нет – он создаётся. Так что после этой операции файл создан и открыт для записи.&lt;br /&gt;&lt;br /&gt;Второе событие разветвителя записывает строку в файл. Обратите внимание: параметр Type=dtAnsiString, то есть записывается строка, а потому никакие байты передавать не надо: компонент сам всё преобразует. Размер мы также не указываем, потому что к этой строке в конец добавляется байт с номером 0, по которому программа и найдёт конец строки.&lt;br /&gt;Следующее событие разветвителя задействует компонент BitmapStream. Этот компонент из bmp-картинки получает набор байт и наоборот. Мы здесь даже DtatToFile не используем, потому что считывать будем картинку этим же компонентом, и он сам определит её размер (соответственно, число байт, которое он сам запишет в файл, и нам размер записывать не надо).&lt;br /&gt;А вот подобного компонента для звука нет, поэтому приходится из MemoryStream получать сначала размер данных, который записывать как число Integer. А затем записываем в файл сами данные, причём делаем это через точку doCopyFromStream,. Этот метод записывает в файл сразу файловый поток целиком, а не отдельные байты, что нам и нужно.&lt;br /&gt;&lt;br /&gt;Осталось лишь реализовать чтение такого файла.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh060.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Разберёмся с ней. Когда в диалоге вы выберете свой файл и откроете его, FileStream откроется его в режиме чтения. Затем будет прочитана строка типа AnsiString и передана в поле ввода.&lt;br /&gt;Потом будет из потока загружена картинка (помните, что указатель уже сдвинут к байту после строки, а это как раз картинка).&lt;br /&gt;Со звуком немного сложнее. Сначала считывается, конечно, размер (указатель уже у этих байт). После этого вступает в действие компонент StreamCopy. Он копируется часть файлового потока, а именно: в новый MomoryStream копируется с текущей позиции столько байт, сколько показал нам DataToFile. Затем используется TempFileStream, потому что из памяти пока в HiAsm файл проиграть нельзя. TempFileStream создаёт временный файл (его имя и местоположение автоматически определяются системой, и вам не нужно об этом заботиться, ведь такой файл после закрытия программы исчезнет), а данные в него записывает те, что скопировали ранее. Ну и затем PlaySound проигрывает звук.&lt;br /&gt;&lt;br /&gt;Вот и всё. Это основы создания файлов «своего» типа. С их помощью вы сможете создавать «свои» файлы для разных ситуаций. А в следующей статье я расскажу про сжатие информации.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v033.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Когда потребуется перевезти грузы, обращайтесь в компанию "Трансмиссия". Она осуществляет &lt;a href='http://www.trans-missia.com/'&gt;грузоперевозки по России&lt;/a&gt; и имеет широкий выбор транспорта, который в целости и сохранности доставит ваш груз.&lt;br /&gt;&lt;br /&gt;Еслиу вас есть бизнес, но вы не хотите создавать для него бухгалтерский штат, то лучший выход - получить &lt;a href='http://www.optima-ural.ru/buh.htm'&gt;бухгалтерские услуги&lt;/a&gt; от компании "Оптима". Произведёт бухучёт, налоговую отчётность и многое другое.&lt;br /&gt;&lt;br /&gt;Собрались закреплять изделия - используйте &lt;a href='http://rusconnect.ru/catalog/other/id_155.html'&gt;дюбель-гвоздь Wkret-Met, быстрый монтаж&lt;/a&gt;. Гвоздь вбивается, а шуруп потом выкручивается.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-1240246300330917900?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/1240246300330917900/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_2549.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/1240246300330917900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/1240246300330917900'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_2549.html' title='Файл &quot;своего&quot; типа'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-5689155453805090296</id><published>2009-11-19T14:41:00.004+05:00</published><updated>2010-03-02T21:48:08.323+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='файловый поток'/><title type='text'>Файловый поток</title><content type='html'>Сегодня я расскажу про работу с бинарными файлами в HiAsm. Надеюсь, вы прочитали статью про &lt;a href="http://hi-asm.blogspot.com/2009/11/blog-post_16.html"&gt;бинарные файлы&lt;/a&gt; и знаете, что они из себя представляют. Это очень понадобится для правильного понимания работы компонентов.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Все необходимые компоненты находятся на вкладке «Файлы», в группе «Потоки». Прежде всего это FileStream, который открывает файл. Давайте познакомимся с ним поближе.&lt;br /&gt;&lt;br /&gt;У компонента FileStream есть два важнейших метода: doOpen – для открытия файла и doClose – для закрытия. Однако открытие здесь означает не открытие файла в соответствующей ему программе, а получение байт из файла, а точнее – файлового потока. Это специальный тип данных, который содержит в себе все байты файла.&lt;br /&gt;К открытому таким образом файлу не могут получить доступ другие программы, его нельзя удалить. Вновь доступ к нему появляется лишь при закрытии методов doClose. Это следует всегда помнить.&lt;br /&gt;&lt;br /&gt;У компонента также есть событие onLoad, которое возникает при загрузке данных из файла, выдавая в поток этот самый файловый поток. Его можно считать и с точки свойства Stream.&lt;br /&gt;&lt;br /&gt;Внимательно рассмотрите параметр компонента Mode. Он определяет, в каком режиме открывается файл: для чтения, для записи или для того и другого. ВНИМАНИЕ! Если вы открыли файл для записи (Mode=Write), то все данные из файла стираются без восстановления! Открывать в этом режиме можно лишь вновь созданные файлы (которые вы создавали специально для записи) либо абсолютно точно ненужные.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Однако потоковые данные не всегда нужны, иногда (и даже часто) важны лишь определённые байты файла. И для этого нужен компонент DataToFile. Он позволяет считывать байты из файлового потока и записывать их туда. Что у него есть? Два метода: doGet и doPut, о назначении которых нетрудно догадаться, точка данных для передачи компоненту файлового потока и событие с точкой свойства.&lt;br /&gt;&lt;br /&gt;А ещё у него есть параметр Type, который определяет, сколько байтов за один вызов метода нужно записать/считать. Правда, там нужно указывать не число, а тип переменной, в которую запишутся байты (а точнее – числовые значения байт, которые вы сможете использовать по своему назначению).&lt;br /&gt;&lt;strong&gt;Byte&lt;/strong&gt; - 1 байт (256 значений)&lt;br /&gt;&lt;strong&gt;Word&lt;/strong&gt; - 1 слово = 2 байта (65 536 значений)&lt;br /&gt;&lt;strong&gt;Cardinal, Integer&lt;/strong&gt; - 4 байта (4 294 967 296 значений)&lt;br /&gt;&lt;strong&gt;Real&lt;/strong&gt; - 8 байт (18 446 744 073 709 551 616 значений)&lt;br /&gt;&lt;strong&gt;PString&lt;/strong&gt; - это строка Паскаля. Если выбрать её, то все прочитанные байты будут представлены как символы. Длину строки определяет первый её (служебный) байт, а поскольку байт не может быть больше 255, то и длина строка Паскаля - тоже.&lt;br /&gt;&lt;strong&gt;AnsiString&lt;/strong&gt; - это тоже строка, но её конец определяется байтом со значением 0 (когда он встретится, чтение байтов и перевод их в символы прекратится). Она может содержать гораздо больше символов.&lt;br /&gt;&lt;br /&gt;&lt;script&gt;document.write('&lt;a href="http://hi-asm.narod.ru/sha/bh054.sha"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;')&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Вот так мы считываем один первый байт из файла, выводя в поле ввода его числовое значение. Возникает вопрос: как добраться до остальных байт? Например, нужно прочитать 10-й байт, как быть?&lt;br /&gt;&lt;br /&gt;При работе с файловым потоком появляется понятие указателя в файле. На каком байте указатель находится, с тем и происходит работа. А при считывании или записи байты указатель сдвигается к следующему байту.&lt;br /&gt;&lt;br /&gt;Это как взгляд при чтении книги: при открытии мы смотрим на первое слово, после его прочтения – автоматически переходим ко второму. То же самое и при записи.&lt;br /&gt;&lt;br /&gt;Принудительно передвинуть указатель в файловом потоке можно с помощью метода doPosition. Он есть у обоих компонентов. Есть также и свойство Position, которое показывает, где в данный момент находится указатель.&lt;br /&gt;&lt;br /&gt;&lt;script&gt;document.write('&lt;a href="http://hi-asm.narod.ru/sha/bh055.sha"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;')&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;В этом примере происходит чтение 4-х байт (см. параметр Type) с 38-й позиции файла.&lt;br /&gt;&lt;br /&gt;Это основные приёмы работы с бинарными файлами. Вот несколько интересных примеров.&lt;br /&gt;&lt;br /&gt;&lt;script&gt;document.write('&lt;a href="http://hi-asm.narod.ru/sha/bh056.sha"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;')&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Здесь после выбора файла запускается условный цикл, который генерирует событие, пока позиция указателя в файле меньше размера файла (размер в байтах). А так как при чтении указатель сдвигается на следующий байт, то чтение прекратится после прохождения указателя через все байты. Каждый из них конвертором (со вкладки «Инструменты») преобразуется в символ и выдаётся в новую строку многострочного поля ввода.&lt;br /&gt;Загрузите так текстовый файл, но не большой (не больше килобайта), иначе придётся долго ждать, ведь таким способом текстовые файлы не читают, это просто пример.&lt;br /&gt;&lt;br /&gt;&lt;script&gt;document.write('&lt;a href="http://hi-asm.narod.ru/sha/bh057.sha"&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;')&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;А в этом примере из файла берётся с 11-й позиции 4 байта и устанавливается соответствующий их значению цвет формы. Правда, все оттенки обычно укладываются в 3 байта, то есть это 16 777 216 вариантов.&lt;br /&gt;&lt;br /&gt;На сегодня всё, а в следующих уроках я расскажу ещё про работу с бинарными файлами, про шифрование и сжатие информации.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v032.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Компания "Трансмиссия" выполнит &lt;a href='http://www.trans-missia.com'&gt;транспортные перевозки&lt;/a&gt; грузов по Екатеринбургу и России. Большой выбор транспорта для первозок.&lt;br /&gt;&lt;br /&gt;А вот каталог, где вы найдёте &lt;a href='http://www.tourfirms.su/catalog/tourfirms/city_1928'&gt;туристические агентства Екатеринбурга&lt;/a&gt;. Большой выбор турфирм для поездок на отдых.&lt;br /&gt;&lt;br /&gt;Если вы соберётесь съездить куда-нибудь, то вам стоит почитать &lt;a href='http://www.tourister.ru/responses'&gt;отзывы туристов&lt;/a&gt; Туристер.ру. Там и отзывы о Китае, и об Арабии, и о Кубе.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-5689155453805090296?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/5689155453805090296/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_19.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5689155453805090296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/5689155453805090296'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_19.html' title='Файловый поток'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-1756711767946339982</id><published>2009-11-16T19:23:00.011+05:00</published><updated>2009-11-17T20:41:04.018+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='бинарные файлы'/><title type='text'>Бинарные файлы</title><content type='html'>В этой статье я расскажу только теоретические представления о файлах, потому что их важно понять, чтобы успешно работать с файлами в HiAsm.&lt;br /&gt;Любой файл, по сути, бинарный, потому что содержит двоичные данные. Даже текстовые файлы - и те содержат двоичные данные.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Возможно, это нарушит ваши представления о файлах, но даже текстовые файлы - и те бинарные! Что же это означает? Для этого нужно понять, что такое файл вообще. Файл - это просто набор байт независимо от содержания: графический, звуковой, текстовый или архив. Более того - не от набора байт зависит, картинка ли в файле или звук! Чтобы вы всё поняли, копнём глубже.&lt;br /&gt;&lt;br /&gt;Байт - это единица измерения информации, состоящая из 8 бит. А что же такое бит? Бит - это тоже единица измерения информации, но у неё всего два возможных варианта, которые она может принимать. Это обусловлено тем, что физически бит представлен мельчайшим участком диска, который может быть либо намагничен, либо размагничен (условно). В одном случае бит считается равным 1, в другом – 0. Третьего не дано.&lt;br /&gt;&lt;br /&gt;Расположенные рядом 8 бит и составляют 1 байт. Всего возможных комбинаций бит в байте - 256 (2^8). Следовательно, числовое значение байта может быть равно от 0 до 255 включительно.&lt;br /&gt;&lt;br /&gt;Разумеется, текстовые файлы также являются набором байт со своими значениями, и никаких символов в этом наборе нет. Да и как символ можно записать на диск физически? Но как же из байт получаются символы? А вот как.&lt;br /&gt;&lt;br /&gt;Интерпретация байт в файле зависит только от программы, в которой он открыт. Если это текстовый редактор, то он считывает каждый байт, в специальной таблице находит соответствие графического изображения символа значению байта и выводит символ на экран.&lt;br /&gt;Если это звуковая программа, то она берёт обычно сразу два байта и находит их общее значение (16 бит - это 65 536 возможных значений!), а затем подаёт соответствующий сигнал на звуковую карту.&lt;br /&gt;Графическая программа обычно берёт сразу 3 байта (24 бита = 16 777 216 значений!), находит по их значению соответствующий оттенок цвета и выдаёт его на экран (1 пиксель).&lt;br /&gt;&lt;br /&gt;Что это значит? А то, что если графический файл открыть в Блокноте, то вы увидите символьное представление его байт. Разумеется, прочесть текст невозможно, но не для того и файл создан.&lt;br /&gt;А если открыть текстовый файл в звуковой программе (GoldWave позволяет это сделать), то вы услышите просто шипение и писк. Сигнал подаётся правильно, в соответствии со значениями байт в файле, но именно такой набор значений и является писком и шипением...&lt;br /&gt;&lt;br /&gt;А почему, если в проигрывателе открыть текстовый файл, он не проиграется, проигрыватель выдаст ошибку? Дело в том, что при записи записывающая программа добавляет к файлу в самом начале несколько байт. Значение этих байт - число - содержит размер "звуковых" байт, некоторую другую служебную информацию, в том числе и небольшую специфическую последовательность байт, по которой проигрыватель и понимает, что в файле - звук (такая комбинация станадртна для стандартных форматов типа WAV, MP3). А без этого он откажется воспроизводить файл.&lt;br /&gt;&lt;br /&gt;Всё вышесказанное важно для работы с файлами в HiAsm. Вы теперь знаете, что файл - это набор байт. И работать будете либо с одним определённым байтом, либо с группой байт. Вы сможете создать "свой" формат файла, который будет содержать, например, картинку и звук, байты которых следуют друг за другом. При открытии такого файла в вашей программе она сможет извлечь байты, принадлежащие картинке, и вывести картинку, а также проиграть звук.&lt;br /&gt;&lt;br /&gt;Также вы сможете эффективно работать с файлами известных форматов и многое другое.&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Удалить татуировку или сделать фотоомоложение поможет &lt;a href='http://www.linline.com/rus/about_us/'&gt;лазерная медицина и косметология&lt;/a&gt; от компании LINLINE. Наносекундные лазерные импульсы.&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.optima-ural.ru/'&gt;Юридическая компания в Екатеринбурге&lt;/a&gt; поможет решить проблему в бизнесе. В компании "Оптима" есть и юристы, и бухгалтеры, и аудиторы, и оценщики, которые рассмотрят проблему комплексно и найдут выход.&lt;br /&gt;&lt;br /&gt;Хотите купить автомобиль? Автомобили с пробегом, &lt;a href='http://www.carliner.ru/'&gt;покупка автомобиля&lt;/a&gt;, автомобили по городам. Можете также подать объявление по продаже автомобиля.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-1756711767946339982?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/1756711767946339982/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_16.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/1756711767946339982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/1756711767946339982'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_16.html' title='Бинарные файлы'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-7269692322449510885</id><published>2009-11-15T09:40:00.007+05:00</published><updated>2010-03-02T21:46:53.578+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dll'/><category scheme='http://www.blogger.com/atom/ns#' term='hiasm'/><title type='text'>Создание DLL в HiAsm</title><content type='html'>DLL - это динамически подключаемая библиотека (dynamic link library). Она служит для выноса в неё части кода программы, если её код используется несколькими программами. Благодаря DLL программа может иметь плагины, может обновлять по одному или нескольким модулям и т. д. И HiAsm может создавать такие DLL, чтобы потом использовать их в своих программах.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;DLL - это отдельный проект в HiAsm. Для его создания нужно зайти в меню Файл - Новый и выбрать там Windows DLL. Сразу обратите внимание, что проект DLL, как и &lt;a href="http://hi-asm.blogspot.com/2009/11/windows.html"&gt;фоновое приложение&lt;/a&gt;, не визуальный. В него нельзя добавить визуальные компоненты и те, которые требуют для работы окно. Соответственно, недоступен редактор формы.&lt;br /&gt;&lt;br /&gt;Главный компонент - DLL, который не имеет точек. У него всего 5 параметров, и в первых 4 из них нужно задать имена точек (латиницей). Параметр Icon Задаёт иконку лишь для компонента в проекте, но в Проводнике Windows иконка будет стандартной для этого типа файлов.&lt;br /&gt;&lt;br /&gt;Теперь можно добавить точки. Здесь есть своя особенность: точки методов задаются в EventPoints, а событий - в WorkPoints. И хотя отображаться точки из WorkPoints будут слева, а из EventPoints - справа, но при использовании DLL в проекте вы поймёте, какие точки для чего. Также меняются местами и VarPoints с DataPoints.&lt;br /&gt;&lt;br /&gt;Для начала выведем с помощью DLL сообщение. Для этого нужен метод, имя которого задайте в параметре EventPoints.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh049.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Проект нужно скомпилировать (Запуск - Компилировать), а запустить его нельзя, потому что dll-файлы не запускаются пользователем, а подключаются программой.&lt;br /&gt;&lt;br /&gt;Теперь сделаем программу. Со вкладки "Разное" возьмём компонент CallDLL. Он тоже не имеет точек. В параметре DLLName нужно указать путь к dll-файлу, а затем установить у компонента точки, как в dll. В данном случае это 1 метод, и здесь он указывается в параметре WorkPoints. Теперь можно вызвать этот метод любым способом.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh050.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Проверьте, правильно ли указано имя dll, а затем запустите программу и нажмите кнопку. Должно быть пустое сообщение. Теперь вам понятно, почему методы в dll-проекте задаются в EventPoints. Формально это, конечно, события, но кнопкой вызываем-то мы метод doMessage, а связь проходит через компоненты-посредники, и получается, что в dll это дополнительное событие.&lt;br /&gt;&lt;br /&gt;Теперь рассмотрим двустороннее взаимодействие dll и программы.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh051.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Эта dll получает строку и заменяет все символы"а" на "б" и удаляет первый символ строки. Теперь сделаем программу, где это можно использовать.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh052.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;А это программа, которая использует dll. Она передаёт ей строку и на выходе получает преобразованную строку. Заметьте, что здесь используется не CallDLL, а UseHiDLL - специальный компонент для подключения тех dll, которые сделаны на HiAsm. При вводе имени dll (без расширения) у компонента сразу отображаются точки и появляется иконка, которую задавали в параметре Icon. Этот компонент удобнее предыдущего и работает иногда лучше.&lt;br /&gt;&lt;br /&gt;DLL, как и программы на HiAsm, имеет маленький размер и может содержать разные функции. Например, логично туда вынести те функции, которые будут обновляться и дополняться, чтобы потом на сайте выложить для обновления программы только dll.&lt;br /&gt;&lt;br /&gt;Ну а если вы делаете программу только для себя, то часто используемые несколькими программами функции можно вынести в одну dll. Тогда функция будет только в ней, а программы лишь будут обращаться к ней, чтобы не писать одну и ту же функцию во всех программах.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v031.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Почему именно натяжной потолок Decke? &lt;a href='http://decke.ru/'&gt;Установка натяжных потолков в Екатеринбурге&lt;/a&gt; производится быстро и чисто, никакого доп. ухода не требуется.&lt;br /&gt;&lt;br /&gt;Вашей клинике требуется новое медоборудование? &lt;a href='http://www.linline.com/rus/about_us/med_ob/'&gt;Медицинское оборудование для клиник&lt;/a&gt; LINLINE, сотрудников обучат обращению с ним!&lt;br /&gt;&lt;br /&gt;Если вы хотите придать воротам изысканность, то &lt;a href='http://www.bagplus.ru/catalog/section.php?IBLOCK_ID=42&amp;SECTION_ID=232'&gt;художественная ковка ворот&lt;/a&gt; от компании "Багплюс" вам будет нужна.&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-7269692322449510885?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/7269692322449510885/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/dll-hiasm_15.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/7269692322449510885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/7269692322449510885'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/dll-hiasm_15.html' title='Создание DLL в HiAsm'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-7118114043055935492</id><published>2009-11-13T20:45:00.006+05:00</published><updated>2010-03-02T21:44:54.627+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='список строк'/><title type='text'>Красивый выпадающий список</title><content type='html'>Про &lt;a href="http://hi-asm.blogspot.com/2009/09/blog-post_1979.html"&gt;список строк&lt;/a&gt; я уже рассказывал, но там рассматривал лишь его точки и параметры. Здесь я расскажу про создание красивого, с градиентом и иконками, выпадающего списка строк, а заодно покажу использование менеджеров - относительно новой технологии в HiAsm.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Для работы нам понадобится сам выпадающий список - ComboBox. Установим у него параметры ReadOnly=True и сотрём поле Text. Теперь туда можно добавить строки. А дальше нам понадобится целых три менеджера (вкладка "Интерфейс", группа "Менеджеры"): менеджер отрисовки, менеджер индексов и менеджер иконок.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh045.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico" alt="Скачать схему HiAsm"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Запустите программу и посмотрите, как красив стал список. А теперь стоит взглянуть на менеджеры.&lt;br /&gt;Менеджер иконок содержит иконки. Имя у него (параметр Name) - "Иконки". И посмотрите в самом низу параметр выпадающего списка IconsManager - там выбрано это имя. Поэтому список связан с этим менеджером иконок. В менеджере иконок вы легко увидите все использовавшиеся иконки.&lt;br /&gt;&lt;br /&gt;Менеджер индексов определяет, какой строке списка какая иконка будет соответствовать. У него тоже есть имя, и оно выбрано в параметре списка IndexManager. Каждый новый элемент в этом менеджере соответствует строке выпадающего списка, а значение - номеру иконки из менеджера иконок. Это может показаться сложным, но на самом деле это удобно, так как для одной программы можно использовать всего один менеджер иконок, а подстановкой иконок из него в разные списки будет управлять менеджер индексов, свой для каждого списка.&lt;br /&gt;&lt;br /&gt;И наконец, менеджер отрисовки управляет отрисовкой иконок и других красивостей компонента. Советую поэкспериментировать с его параметрами, чтобы настроить список так, как вам хочется.&lt;br /&gt;&lt;br /&gt;А сейчас мы добавим к нашему списку ещё несколько интересных вещей.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh046.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico" alt="Скачать схему HiAsm"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь используется компонент UseExtCursor, который может задавать курсор для визуального компонента из файла. Если у вас курсоры находятся в папке C:\WINDOWS\Cursors, то вы увидите над списком в программе анимационный курсор.&lt;br /&gt;Обратите внимание на имя (Name) списка - оно задано, а в параметре ControlManager у компонента UseExtCursor выбрано это имя. Поэтому курсор устанавливается именно для этого компонента. И практически для любого визуального компонента можно установить свой курсор.&lt;br /&gt;&lt;br /&gt;Продолжим знакомство с менеджерами.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh047.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico" alt="Скачать схему HiAsm"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Здесь новый компонент - WorkIconsManager. Он управляет менеджером иконок (управление не встроено в сам менеджер для более гибкой работы). В данном примере используется функция замены иконки в менеджере на другую. Как всегда, начинает с событий. Начальные события - это нажатие на одной из картинок. Элемент DoData передаёт картинку с точки свойств в поток. Затем первое событие разветвителя вызывает метод компонента Icon для преобразования картинки bmp в иконку. Готовая иконка появляется на точке свойств этого компонента.&lt;br /&gt;Второе событие разветвителя задействует компонент для добавления данных в многомерный поток (внимательно читайте описание используемого метода компонента WorkIconsManager). Первый аргумент в многомерном потоке - это число 3, потому что заменять мы будем иконку под индексом 3 (индекс начинается с 0). Второй аргумент - сама иконка (она из той картинки, по которой нажали). И абрикос становится откушенным!&lt;br /&gt;&lt;br /&gt;Если выбран этот самый абрикос в списке, то его иконка отображается без раскрытия списка. Но когда при этом мы щёлкаем по картинке, то до раскрытия списка она не меняется! Что делать? Нам нужно перерисовать список, и для этого тоже есть менеджер!&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/sha/bh048.sha" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/sha/sha.ico" alt="Скачать схему HiAsm"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;У него только один параметр, где нужно выбрать имя визуального компонента, который нужно перерисовывать.&lt;br /&gt;&lt;br /&gt;В HiAsm есть ещё некоторые менеджеры, но о них, пожалуй, в другой раз.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href="http://hi-asm.narod.ru/video/v030.7z" rel=nofollow&gt;&lt;img src="http://hi-asm.narod.ru/video/v.ico"&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id="blg"&gt;&lt;br /&gt;Хотите отправить красивую открытку подруге? &lt;a href='http://postcard.kmost.info/eng/flower/'&gt;Postcard flower&lt;/a&gt; - выберите цветок (ромашку, розу и т. д.), напишите текст и отправьте!&lt;br /&gt;&lt;br /&gt;Тут вам сделают интернет-магазин, &lt;a href='http://webgid.kiev.ua/'&gt;разработка сайта&lt;/a&gt;, изготовят корпоративный сайт или портал, а также сделают рекламу.&lt;br /&gt;&lt;br /&gt;Вам нужна целевая аудитория? Тогда ваш выбор - &lt;a href='http://www.web-promo.com.ua/Intmarket/'&gt;контекстная реклама&lt;/a&gt;! Тут вам подберут ключевые слова, опредлят бюджет кампании, всё напишут и предоставят отчёт!&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;script&gt;blg.size=1&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3915290062440498658-7118114043055935492?l=hi-asm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hi-asm.blogspot.com/feeds/7118114043055935492/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_13.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/7118114043055935492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3915290062440498658/posts/default/7118114043055935492'/><link rel='alternate' type='text/html' href='http://hi-asm.blogspot.com/2009/11/blog-post_13.html' title='Красивый выпадающий список'/><author><name>Админ</name><uri>http://www.blogger.com/profile/14944850845026530407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_g1EvW_ks9UI/S_KoGXBuB8I/AAAAAAAAAM4/9u9RX-w-sbc/S220/hi.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3915290062440498658.post-3394996260048856578</id><published>2009-11-10T20:13:00.006+05:00</published><updated>2010-03-02T21:40:56.383+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='пароль'/><title type='text'>Открываем поле пароля</title><content type='html'>В Интернете можно найти программки, которые показывают пароль, спрятанный за звёздочками в поле ввода. Начинающим пользователям (достаточно хорошо знакомым с полями для пароля) это покажется чудом и настоящим хакерством, но вы, HiAsm'исты, должны понимать, что для вас нет ничего невозможного... почти.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Для начала выясним, что такое поля для пароля. Это обычное текстовое поле ввода Edit, и в HiAsm вы его найдёте на вкладке "Интерфейс" панели компонентов. Вся хитрость в том, что его параметр Password установлен в true, и вместо символов теперь будут показываться лишь звёздочки.&lt;br /&gt;&lt;br /&gt;Разумеется, реальный текст можно получить с точки свойств Text и использовать его, например, для проверки этого самого пароля. Однако так можно делать лишь в своей программе, а если надо узнать, что там, по звёздочками, в чужой программе? И потому нужно изменить само поле, ч
