<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-3915290062440498658</atom:id><lastBuildDate>Sun, 16 Nov 2025 15:06:17 +0000</lastBuildDate><category>hiasm</category><category>компоненты</category><category>InlineCode</category><category>базы данных</category><category>звук</category><category>файл</category><category>BASS</category><category>sqlite</category><category>видеоуроки</category><category>код</category><category>таблицы</category><category>dll</category><category>sha</category><category>sql</category><category>wav</category><category>бинарные файлы</category><category>браузер</category><category>данные</category><category>информация</category><category>компонент</category><category>мультиэлементы</category><category>панель</category><category>список строк</category><category>файловый поток</category><category>эффекты</category><category>MT-потоки</category><category>Math</category><category>MathParse</category><category>MultiThread</category><category>WebBrowser</category><category>activex</category><category>dodata</category><category>hion</category><category>kol</category><category>label</category><category>mediaplayer</category><category>memory</category><category>parsing</category><category>type</category><category>zip</category><category>арифметика</category><category>архив</category><category>бинарные</category><category>блог</category><category>блогун</category><category>блокнот</category><category>будильник</category><category>буфер обмена</category><category>графика</category><category>группа элементов</category><category>двоичные</category><category>дочерняя форма</category><category>железо</category><category>запись</category><category>заработок</category><category>заставка</category><category>интернет</category><category>интерфейс</category><category>картинки</category><category>команды</category><category>конвертирование</category><category>конструктор</category><category>логика</category><category>математика</category><category>матрицы</category><category>медиаплеер</category><category>меню</category><category>метод</category><category>морзе</category><category>мультимедиа</category><category>надпись</category><category>напоминание</category><category>настройка</category><category>открытие</category><category>память</category><category>панель управления</category><category>параметры</category><category>пароль</category><category>паять</category><category>переключатели</category><category>подписка</category><category>позиционирование</category><category>помощники</category><category>принтер</category><category>программа</category><category>программы</category><category>проекты</category><category>проигрыватель</category><category>процессы</category><category>рабочий стол</category><category>регионы</category><category>рисование</category><category>рисунки</category><category>сайт</category><category>свойства</category><category>секрет</category><category>сжатие</category><category>символы</category><category>сканер</category><category>слои</category><category>служебные</category><category>событие</category><category>ссылка</category><category>статитстика</category><category>схема</category><category>точки</category><category>ферзь</category><category>фоновое приложение</category><category>шифрование</category><category>экран</category><category>электронная книга</category><category>электронная почта</category><title>HiAsm - программирование без кода</title><description>Блог о HiAsm: уроки по HiAsm, примеры HiAsm, программы на HiAsm. Всё о HiAsm.</description><link>http://hi-asm.blogspot.com/</link><managingEditor>noreply@blogger.com (Админ)</managingEditor><generator>Blogger</generator><openSearch:totalResults>84</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-1445730432970036062</guid><pubDate>Thu, 19 Aug 2010 08:04:00 +0000</pubDate><atom:updated>2011-07-02T11:45:32.182+06:00</atom:updated><title>Программирование без компилятора</title><description>Если вы сейчас подумали, что создавать программы Win32 мы будем без компилятора, то это не так. Компилятор нам понадобится. Суть здесь немного другая. Бывают ситуации, когда у пользователя должен быть достаточно широкий выбор вариантов действий программы. Можно сказать, он должен смочь сделать и свой интерфейс программы, и логику приложения, пусть и для какого-то определённого круга задач.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;Посмотрим, как можно сделать редактор интерфейса в своей программе.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/sha/bh259.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh260.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh261.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh262.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh263.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh264.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh265.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh266.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh267.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh268.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh269.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://narod.ru/disk/17824569001/v067.7z.html&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;br&gt;Если файла по ссылке не окажется, напишите в комментариях, и я перезалью его.&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</description><link>http://hi-asm.blogspot.com/2010/08/blog-post.html</link><author>noreply@blogger.com (Админ)</author><thr:total>141</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-7936838079975443458</guid><pubDate>Sun, 27 Jun 2010 08:14:00 +0000</pubDate><atom:updated>2010-08-26T14:34:12.568+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">activex</category><category domain="http://www.blogger.com/atom/ns#">компоненты</category><title>Визуальные компоненты ActiveX</title><description>&lt;img style=&quot;float:left; margin:0 10px 0px 0;width: 217px; height: 80px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjQl09H1gu30MGk2AGhO_xcEGqozG7-qRq3jfbkv-DeuK5vlqykcmNVa492M2UmCVckn_FI6I4R-HN2Ou-QpzodZ3ACVtwr0jxSF-CsRgjkxE-bXuQTPBlilGRhJP6HNs6eDkcm9zffLQ/s400/hiasm.jpg&quot; border=&quot;0&quot; alt=&quot;Визуальные компоненты ActiveX&quot; id=&quot;BLOGGER_PHOTO_ID_5487364932677415602&quot; /&gt;&lt;br /&gt;Если вам не хватает стандартных визуальных компонентов HiAsm, а делать их вы не умеете и ждать не хочется, то можно воспользоваться сторонними разработками в формате ActiveX. Компоненты ActiveX находятся в отдельных файлах *.ocx и могут быть использованы в программе.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh253.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh254.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh255.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh256.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh257.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh258.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/video/v066.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</description><link>http://hi-asm.blogspot.com/2010/06/activex.html</link><author>noreply@blogger.com (Админ)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjQl09H1gu30MGk2AGhO_xcEGqozG7-qRq3jfbkv-DeuK5vlqykcmNVa492M2UmCVckn_FI6I4R-HN2Ou-QpzodZ3ACVtwr0jxSF-CsRgjkxE-bXuQTPBlilGRhJP6HNs6eDkcm9zffLQ/s72-c/hiasm.jpg" height="72" width="72"/><thr:total>55</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-814777321614488185</guid><pubDate>Tue, 15 Jun 2010 16:14:00 +0000</pubDate><atom:updated>2010-08-26T14:34:47.299+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">браузер</category><category domain="http://www.blogger.com/atom/ns#">ссылка</category><title>Ловим нажатие ссылки в браузере</title><description>Эта статья для тех, кто хочет получить Url нажатой ссылки в WebBrowser, а затем использовать его по своему усмотрению, а не открывать ссылку.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;nofollow&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh252.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/video/v065.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</description><link>http://hi-asm.blogspot.com/2010/06/blog-post.html</link><author>noreply@blogger.com (Админ)</author><thr:total>13</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-6352194700114065070</guid><pubDate>Sun, 04 Apr 2010 08:40:00 +0000</pubDate><atom:updated>2012-03-03T23:43:26.376+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">parsing</category><category domain="http://www.blogger.com/atom/ns#">сайт</category><title>Parsing сайта</title><description>Вот как раз на днях опять делал небольшую программу, которая существовала у меня недолго, потому что быстро сделала то, что предназначалось, но без неё я затратил бы раз в десять больше времени.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;http://hi-asm.narod.ru/sha/bh242.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh243.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;cblock&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh244.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/video/v064.part01.rar0&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://hi-asm.narod.ru/video/v064.part02.rar0&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://hi-asm.narod.ru/video/v064.part03.rar0&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Хотите что-нибудь интересного и новенького, а ещё и полезного? Рекомендую посмотреть &lt;a href=&#39;http://samodelki.org/&#39;&gt;компьютерные самоделки&lt;/a&gt;. Там реально прикольные вещи, которые можно сделать самостоятельно!&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/04/parsing.html</link><author>noreply@blogger.com (Админ)</author><thr:total>54</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-4896137890156658435</guid><pubDate>Sat, 20 Mar 2010 05:47:00 +0000</pubDate><atom:updated>2012-03-03T23:43:10.740+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">hion</category><title>HiOn - HiAsm Online</title><description>Сегодня я расскажу про новый проект от разработчиков HiAsm - &lt;a href=&quot;http://hion.hiasm.com/&quot; target=_blank rel=nofollow&gt;HiAsm Online&lt;/a&gt;. Правда, он уже не совсем новый - открылся в начала этого месяца. С того времени в него добавилось несколько новых компонентов, хотя он всё ещё очень примитивен по сравнению с настоящим HiAsm. Но большинство людей на форуме видят в нём перспективу.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Если у вас сломался ноутбук, то пора  сделать &lt;a href=&quot;http://noteplus.ru/&quot;&gt;ремонт ноутбуков м. Новокузнецкая&lt;/a&gt;. Производится также обслуживание ноутбуков, например, восстановление данных.&lt;br /&gt;&lt;br /&gt;Если вам нужно место для ведения бизнеса, то вы &lt;a href=&#39;http://www.kr-pro.ru/&#39;&gt;можете снять помещение под офис&lt;/a&gt;. Никаких посредников - только собственник!&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/03/hion-hiasm-online.html</link><author>noreply@blogger.com (Админ)</author><thr:total>9</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-982350433891674368</guid><pubDate>Sat, 13 Mar 2010 11:25:00 +0000</pubDate><atom:updated>2012-03-03T23:42:55.454+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">hiasm</category><title>В чём вам помог HiAsm?</title><description>В последнее время мои читатели всё чаще стали намекать мне, что пора бы выложить новые видеоуроки. Вчера я как раз собрался записать несколько новых видеоуроков, но как только я прикоснулся к микрофону, он стрельнул искрой и навсегда замолк… Вывод: надо быть аккуратнее со статическим электричеством.&lt;br /&gt;Но это отступление. Тема поста совсем другая.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;Со временем такие замашки прошли. Я и сейчас хочу сделать для себя плеер, который будет заточен под мои надобности, но встраивать в него код «на все случаи жизни» не собираюсь.&lt;br /&gt;&lt;br /&gt;Дальше были в основном небольшие программы, например программа для отображения рисунка, которая располагает его мозаикой. Это удобно при просмотре картинок-узоров для веб-страниц. Преимущество состоит в быстроте работы с программой.&lt;br /&gt;&lt;br /&gt;Также была программа для фотографирования экрана, потому что одна электронная книга блокировала кнопку PrentScreen. Была программа для выполнения операций над числами в разных системах счисления. И очень много было проектов (много - потому что они маленькие, и после однократной работы программы сразу удалялись) для замены символов в тексте. С простой заменой справится и Блокнот, но когда заменить нужно, допустим, с символа &#39;&lt;&#39; по символ ‘&gt;’ во многих файлах, то работать через Блокнот - о-очень долго…&lt;br /&gt;&lt;br /&gt;В общем, HiAsm очень упростил мою работу за компьютером. И мне интересно у знать, кому как ещё помог HiAsm. Оставляйте комментарии.&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</description><link>http://hi-asm.blogspot.com/2010/03/hiasm.html</link><author>noreply@blogger.com (Админ)</author><thr:total>47</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-3974495835409698172</guid><pubDate>Fri, 05 Mar 2010 12:00:00 +0000</pubDate><atom:updated>2012-03-03T23:42:35.516+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">InlineCode</category><category domain="http://www.blogger.com/atom/ns#">код</category><title>Время работы Windows</title><description>Сегодня снова поговорим про IC, но сейчас я покажу функции, которых нет в стандартных компонентах HiAsm. Вы также узнаете, где хранятся такие функции и как их использовать.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;http://hi-asm.narod.ru/sha/bh235.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh236.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh237.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/video/v063.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Заболела кошка - вам поможет &lt;a href=&#39;http://www.biocontrol.ru/uslugi-i-ceny/vyzov-vracha-na-dom.html&#39;&gt;вызов ветеринара на дом&lt;/a&gt;. На дому выполняются разные услуги, например ультразвуковое исследование органов.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/03/windows.html</link><author>noreply@blogger.com (Админ)</author><thr:total>14</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-8228820046864910140</guid><pubDate>Tue, 02 Mar 2010 18:47:00 +0000</pubDate><atom:updated>2012-03-03T23:42:19.984+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">видеоуроки</category><title>Видеоуроки по HiAsm-2, или как сжимать видео</title><description>В HiAsm появились новые видеоуроки. Но не это толкнуло меня на написание этого поста, а то, как эти видеоуроки создавались. Дело в том, что раньше видеоуроки были в формате exe, они проигрывались uvPalyer&#39;ом, и в них нельзя было установить позицию проигрывания и много другое. Преимуществом их был малый размер. И я стал искать кодек, который бы хорошо сжимал фильмы, чтобы выкладывать именно файлы avi, а не exe.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Если вам нужны услуги профессионального агентства по рекламе, обратитесь в &lt;a href=&#39;http://www.connexx.nl/website.laten.maken/&#39;&gt;website maken&lt;/a&gt;.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/03/hiasm-2.html</link><author>noreply@blogger.com (Админ)</author><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-8720758024477757831</guid><pubDate>Sat, 27 Feb 2010 08:27:00 +0000</pubDate><atom:updated>2012-03-03T23:42:04.289+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">hiasm</category><title>Новый дизайн сайта HiAsm</title><description>Совсем недавно изменился дизайн главной страницы сайта HiAsm &lt;a href=http://hiasm.com target=_blank&gt;hiasm.com&lt;/a&gt;. Разговор об этом начался ещё в начале февраля. Теперь же страница приведена, как выразился Dilma, к более строгому «коммерческому» виду.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Раскрутке вашего сайта определённо нужна контекстная реклама. Хороша &lt;a href=&#39;http://www.web-promo.com.ua/kontekstnaja-internet-reklama/&#39;&gt;реклама в интернете&lt;/a&gt; тем, что вы сами определяете, сколько тратьи на рекламу, а платите вы только при переходе на ваш сайт по рекламной ссылке.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/hiasm_27.html</link><author>noreply@blogger.com (Админ)</author><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-5180123433833933005</guid><pubDate>Thu, 25 Feb 2010 15:24:00 +0000</pubDate><atom:updated>2012-03-03T23:41:27.349+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">InlineCode</category><category domain="http://www.blogger.com/atom/ns#">код</category><title>Код для IC</title><description>Из прошлых статей вы знаете, как создавать основные вещи в InlineCode, например процедуры, другие точки, переменные. Но всё это вспомогательная вещь, а самая главная - рабочий код, который будет выполнять действия. Откуда же его брать?&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;http://hi-asm.narod.ru/sha/bh232.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh233.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh234.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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;&#39;&#39; 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=&quot;http://hi-asm.narod.ru/video/v062.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Если вы создали сайт, то вам понадобится &lt;a href=&#39;http://www.web-promo.com.ua/&#39;&gt;раскрутка сайтов&lt;/a&gt;. Компания предлагает поэтапную раскрутку сайтов: поисковая оптимизация сайта, ссылочное окружение и поддержание выигранных позиций. В дополнение используется контекстная реклама.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/ic_25.html</link><author>noreply@blogger.com (Админ)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-4572844342389478960</guid><pubDate>Sat, 20 Feb 2010 12:28:00 +0000</pubDate><atom:updated>2012-03-03T23:41:09.382+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">InlineCode</category><title>Точки и переменные в IC</title><description>Продолжаем тему InlineCode в HiAsm. Сегодня нам предстоит познакомиться с остальными точками компонента InlineCode (в прошлой статье я рассказывал только про методы), а также с использованием переменных в IC.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;http://hi-asm.narod.ru/sha/bh226.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh227.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh228.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh229.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh230.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh231.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/video/v061.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Защитите себя и свой компьютер: скачайте &lt;a href=&#39;http://masseffecton.ru/&#39;&gt;бесплатно антивирус&lt;/a&gt; и будьте под его надёжной защитой. Самые разные антивирусные программы.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/ic.html</link><author>noreply@blogger.com (Админ)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-4170553427079878316</guid><pubDate>Wed, 17 Feb 2010 12:21:00 +0000</pubDate><atom:updated>2012-03-03T23:40:47.847+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">InlineCode</category><title>Продцедуры и функции</title><description>Продолжаем знакомиться с InlineCode и, естественно, с языком Pascal. Сегодня мы рассмотрим, как заставить выполняться желаемый код, и напишем (да, напишем, раз уж речь идёт о коде) нашу первую программу с использованием InlineCode.&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;В тот InlineCode (для краткости я буду именовать его просто IC), который мы поставили на рабочее поле, ещё нельзя писать какие-либо действия. Дело в том, что весь код разбивается на логические участки - процедуры и функции, а вот в них уже можно писать какие-либо действия. Но у нас пока нет ни одной процедуры или функции. Давайте же сделаем хотя бы одну.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/sha/bh220.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh221.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh222.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color=blue&gt;MessageBox(0,&#39;Привет!&#39;,&#39;Сообщение&#39;,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,&#39;Привет!&#39;,&#39;Сообщение&#39;,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=&quot;http://hi-asm.narod.ru/sha/bh223.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh224.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh225.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/video/v060.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Портал для веб-программистов, желающих заработать в Сети и других - &lt;a href=&#39;http://web20.su/&#39;&gt;web 2.0&lt;/a&gt;. Вы найдёте статьи о соц.сетях, AJAX, SEO. И конечно, статьи о веб-программировании и заработке в Интернете.&lt;br /&gt;&lt;br /&gt;Хотите сделать себе кофе - &lt;a href=&#39;http://1coffee.ru/index.php?categoryID=133&#39;&gt;большой выбор jura&lt;/a&gt; - швейцарских кофемашин. Качественные приборы, вкусный кофе.&lt;br /&gt;&lt;br /&gt;Хотите приобрести &lt;a href=&#39;http://www.tourexpress.ru/countries/mexico/tours/&#39;&gt;тур в Мексику&lt;/a&gt; - сходите на этот сайт. Там вы найдёте разную информацию о Мексике, стоимость туров, отели Мексики, фотографии страны и другие интересные вещи о Мексике.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/blog-post_17.html</link><author>noreply@blogger.com (Админ)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-3593050639375746560</guid><pubDate>Sat, 13 Feb 2010 17:51:00 +0000</pubDate><atom:updated>2012-03-03T23:40:29.673+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">InlineCode</category><category domain="http://www.blogger.com/atom/ns#">kol</category><category domain="http://www.blogger.com/atom/ns#">код</category><title>InlineCode</title><description>Эта статья отличается от остальных. Необычного в ней то, что в ней я расскажу, как вставлять код в HiAsm. А необычное это потому, что HiAsm - это программирование без кода, и во всех предыдущих статьях ни о каком коде речи не было (за исключением SQL, ну да это не очень сложно и не всем нужно). Однако сегодня я сделаю вводную статью по вставке кода в HiAsm.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;http://hi-asm.narod.ru/kol.rar0&quot; rel=nofollow&gt;книгу о KOL&lt;/a&gt;&lt;/noindex&gt;.&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://usedthings.ru/2009/12/05/provodnaya-lazernaya-mysh-sniper-m7630-defender/&quot;&gt;Проводная лазерная мышь Sniper M7630 * DEFENDER&lt;/a&gt; - рассказ пользователя про использование мыши.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/inlinecode.html</link><author>noreply@blogger.com (Админ)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-5020305262532090954</guid><pubDate>Fri, 12 Feb 2010 03:42:00 +0000</pubDate><atom:updated>2012-03-03T23:40:09.104+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">sql</category><category domain="http://www.blogger.com/atom/ns#">базы данных</category><title>Редактирование базы данных SQL</title><description>В прошлой статье я рассказывал про создание таблиц в базе данных на языке SQL. Пришла пора их редактировать. Операции-то, собственно, небогатые: обновление и удаление, но зато приёмов их использования немало.&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;Мы не будем сегодня заострять внимание на создании таблиц, и потому таблица будет создаваться автоматически при входе в программу.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/sha/bh216.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh217.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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, &#39;Иванов&#39;)&lt;/font&gt;.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/sha/bh218.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;А здесь уже реализована замена значений в полях. Событие onLineChange выдаёт номер отредактированной строки, и мы затем через массив строк получаем её содержимое, которое разбиваем на части (ячейки). А затем выполняем код SQL&lt;br /&gt;&lt;br /&gt;&lt;font color=green&gt;UPDATE table1 SET firstname=&#39;%2&#39;, lastname=&#39;%3&#39; WHERE number=%1&lt;/font&gt;&lt;br /&gt;&lt;font color=blue&gt;ОБНОВИТЬ table1 УСТАНОВИВ firstname=&#39;%2&#39;, lastname=&#39;%3&#39; ГДЕ 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=&quot;http://hi-asm.narod.ru/sha/bh219.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/video/v059.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Надёжное, экологически чистое, привлекательное по цене &lt;a href=&#39;http://www.ldsp.w-market.ru/&#39;&gt;лдсп продажа тут&lt;/a&gt;. ЛДСП EGGER имеет очень большое разнообразие по текстуре, цвету, узорам, и вы обязательно подберёте что-то для себя.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/sql_12.html</link><author>noreply@blogger.com (Админ)</author><thr:total>9</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-8904301641568018847</guid><pubDate>Wed, 10 Feb 2010 18:12:00 +0000</pubDate><atom:updated>2012-03-03T23:39:50.880+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">sql</category><category domain="http://www.blogger.com/atom/ns#">базы данных</category><category domain="http://www.blogger.com/atom/ns#">таблицы</category><title>Создание таблицы в SQL</title><description>Сегодня я снова возвращаюсь к теме баз данных, и мы будет учиться создавать таблицы на языке SQL. Это довольно просто, если не вникать в глубокие подробности.&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;Рассмотрим такую простую таблицу, как список имён и фамилий.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/sha/bh213.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Как вы &lt;a href=&quot;http://hi-asm.blogspot.com/2009/10/hiasm.html&quot; target=_blank&gt;помните&lt;/a&gt;,  для добавления строки в таблицу в потоке нужно передать строку с разделителями, чтобы заполнить каждую ячейку. Но тут нужно заполнить только первую ячейку, потому и разделитель нам не нужен.&lt;br /&gt;&lt;br /&gt;Таблицу можно редактировать вручную. Добавьте несколько строк и попробуйте это сделать. А теперь приступим к сохранению таблицы в базу данных.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/sha/bh214.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.blogspot.com/2009/11/blog-post_13.html&quot; target=_blank&gt;технологию менеджеров&lt;/a&gt;, то есть беспроводной связи. Но можно использовать и тот, что я показывал в прошлых статьях.&lt;br /&gt;&lt;br /&gt;После этого приступаем к выполнению запроса SQL. Здесь используется компонент DSC_Exec - запрос на выполнение, а не просто запрос к базе данных, но это здесь не имеет значения. Отличие компонентов для простого запроса и запроса на выполнение лишь в том, что при простом запросе выдаются полученные столбцы и строки таблицы, а в запросе на выполнение соответствующих точек нет. А сам запрос будет выполняться в любом из этих компонентов (но понятно, что из компонента запроса на выполнение извлечь данные не удастся, так что если нужно получить данные, то используется компонент для простого запроса, а если записать - любой компонент).&lt;br /&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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, &#39;%3&#39;, &#39;%4&#39;) &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=&quot;http://hi-asm.narod.ru/sha/bh215.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/video/v058.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;&lt;a href=&#39;http://knopka.net.ua/&#39;&gt;Электронная коммерция&lt;/a&gt; - блог об электронной коммерции, продвижениии сайта, SEO. Много интересных статей.&lt;br /&gt;&lt;br /&gt;Компания Almacor предлагает профессиональный &lt;a href=&#39;http://solutions.almacor.ru/&#39;&gt;нейминг&lt;/a&gt; для вашей продукции, соответствующий важнейшим требованиям нейминга.&lt;br /&gt;&lt;br /&gt;Избавиться от проблем со здоровьем и красотой поможет &lt;a href=&#39;http://www.neo-med.biz/women/mezoterapija.htm&#39;&gt;мезотерапия&lt;/a&gt; - микроинъекции с помощью тончайшей иглы, которые действуют только на выбранный участок, а не весь организм.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/sql_10.html</link><author>noreply@blogger.com (Админ)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-8465648710811834504</guid><pubDate>Tue, 09 Feb 2010 15:19:00 +0000</pubDate><atom:updated>2012-03-03T23:39:31.103+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">BASS</category><category domain="http://www.blogger.com/atom/ns#">dll</category><title>BASS без bass.dll</title><description>&lt;img style=&quot;float:left; margin:0 10px 2px 0; ;width: 79px; height: 82px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuTi7HO56YT4k_Uh5McU1YdohXSTNMG1JtXsDS_1ETHUMsEneYsQ9pIKaKcWqWWDupR0naAgx0gMGXV1nhSNzG2AxSlERoP_IwPO7AwBie1gztNJI3P0lbTGMN9eHHVp0BClUDwCnqadc/s400/exedll.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5436266521787447490&quot; /&gt;&lt;br /&gt;Сегодня у меня статья про упаковщиков исполняемых файлов, которые могут присоединить ещё и разные модули к exe-шнику. Кто работал с компонентами BASS, знают, что без bass.dll программа отказывается запускаться. Или те же проги, использующие SQLite. А следить за наличием dll-ки хлопотно и можно про неё забыть при выкладывании программы в Интернет.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;http://hi-asm.narod.ru/pebsetup.rar0&quot;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;Примечательно и то, что размер программы увеличивается только на размер модуля, но распаковка UPX (это упаковщик, через который HiAsm упаковывает программы для уменьшения веса) не происходит. В довершение стоит скачать, что программа просит регистрацию, но и без неё работает отлично. Так что пользуйтесь на здоровье!&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/video/v057.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Если ваш продукт нуждается в сертификации, то обратитесь в &lt;a href=&#39;http://www.rospromtest.ru&#39;&gt;www.rospromtest.ru&lt;/a&gt;. Благодаря сертификации повышается доверие клиентов к вашему товару, а это успешно повлияет на ваш бизнес.&lt;br /&gt;&lt;br /&gt;Для красоты вашего дома сделайте себе красивый козырёк. А &lt;a href=&#39;http://www.bagplus.ru/catalog/section.php?IBLOCK_ID=42&amp;SECTION_ID=232&#39;&gt;козырьки стеклянные&lt;/a&gt; изготавливает фирма &quot;Багплюс&quot; и предлагает различные их варианты.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/bass-bassdll.html</link><author>noreply@blogger.com (Админ)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuTi7HO56YT4k_Uh5McU1YdohXSTNMG1JtXsDS_1ETHUMsEneYsQ9pIKaKcWqWWDupR0naAgx0gMGXV1nhSNzG2AxSlERoP_IwPO7AwBie1gztNJI3P0lbTGMN9eHHVp0BClUDwCnqadc/s72-c/exedll.jpg" height="72" width="72"/><thr:total>15</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-4709553132025229841</guid><pubDate>Sun, 07 Feb 2010 10:23:00 +0000</pubDate><atom:updated>2012-03-03T23:39:08.440+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">sqlite</category><category domain="http://www.blogger.com/atom/ns#">базы данных</category><title>Некоторые операторы SQL</title><description>Сегодня мы продолжим знакомство с языком SQL. Вы узнаете некоторые операторы, которые значительно упрощают написание запросов. А использовать мы будем всё ту же SQLite и базу Elements.db.&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;В &lt;a href=&quot;http://hi-asm.blogspot.com/2010/02/sqlite_05.html&quot; target=&quot;_blank&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh209.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh210.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh211.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh212.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;Ну а здесь у нас новый оператор – LIKE. Он является чем-то вроде знака равенства, но только для текста. И если значение поля - текст, то использовать нужно этот оператор, а также текст заключать в кавычки. У нас в кавычках стоит «A%». Это значит, что выбраны будут все строки, у которых значение в поле name начинается на A (регистр неважен). Процент же заменяет любые символы здесь.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/video/v056.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;И опять о Тайланде. На этот раз - &lt;a href=&#39;http://www.tourister.ru/world/asia/thailand/city/phuket/responses/&#39;&gt;остров Пхукет, отзывы&lt;/a&gt;, фотографии, погода... Также вы найдёте карту Пхукета, почитаете о достопримечательностях острова, которые стоит посетить.&lt;br /&gt;&lt;br /&gt;На Туристер.Ру вы найдёте информацию об &lt;a href=&#39;http://www.tourister.ru/responses/?tag=%D2%F3%F0%F6%E8%FF&#39;&gt;отдыхе в Турции, отзывы&lt;/a&gt;, фотографии. А также узнаете о десяти вещах, которые стоит сделать в Стамбуле.&lt;br /&gt;&lt;br /&gt;Что такое Хургада? Хургада - это экзотическое место в Египте, где можно хорошо отдохнуть. Посмотрите &lt;a href=&#39;http://www.tourister.ru/world/africa/egypt/city/hurghada/responses/&#39;&gt;отели Хургады отзывы&lt;/a&gt; туристов и решите, когда стоит туда съездить.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/sql.html</link><author>noreply@blogger.com (Админ)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-8212210162066579654</guid><pubDate>Fri, 05 Feb 2010 16:07:00 +0000</pubDate><atom:updated>2012-03-03T23:38:48.786+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">sqlite</category><category domain="http://www.blogger.com/atom/ns#">базы данных</category><title>SQLite и базы данных</title><description>Раз уж в прошлом посте я упомянул о базах данных, то хочется продолжить разговор о них. Использовать будем библиотеку SQLite.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;http://phpclub.ru/detail/article/sqlight&quot; target=_blank rel=&quot;nofollow&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh204.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh205.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh206.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh207.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh208.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/video/v055.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Интехстрой-М - это качественный &lt;a href=&#39;http://www.itstroy.ru&#39;&gt;евроремонт квартир в Москве&lt;/a&gt;. Дизайнеры по вашему желанию составят дизайн помещения, и специалисты выполнят в вашем доме самые разные работы, не отнимая у вас много времени.&lt;br /&gt;&lt;br /&gt;Если ваш коммерческий сайт плохо продаёт, то вам нужна &lt;a href=&#39;http://web-promo.com.ua/organicheskaja-optimizacija-sajta/&#39;&gt;оптимизация сайта&lt;/a&gt;. Компания выполнит качествуенную раскрутку и поднятие сайта в поисковой выдаче. А если не сумеет - полностью вернёт ваши деньги.&lt;br /&gt;&lt;br /&gt;Узнайте всё об &lt;a href=&#39;http://www.tourister.ru/world/asia/thailand/city/ban_phattha_ya/responses/&#39;&gt;отдыхе в Паттайе, отзывы&lt;/a&gt;, фотографии, погода и другие интересные материалы на Туристер.Ру. Тем, кто хочет поехать в Тайланд, рекомендую.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/sqlite_05.html</link><author>noreply@blogger.com (Админ)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-4901249281633005978</guid><pubDate>Thu, 04 Feb 2010 10:37:00 +0000</pubDate><atom:updated>2012-03-03T23:38:31.478+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">sqlite</category><category domain="http://www.blogger.com/atom/ns#">базы данных</category><title>SQLite и пути с русскими буквами</title><description>Эта статья для тех, кто работал или планирует работать с базами данных SQLite в HiAsm. Да и остальным почитать было бы неплохо. Проблема заключается в интерпретации русских букв в имени файла при открытии базы данных.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;http://hi-asm.narod.ru/sha/bh202.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh203.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/video/v054.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Нужны &lt;a href=&#39;http://moiidei.com/&#39;&gt;новые идеи бизнеса&lt;/a&gt;? Замечательный сайт с большой аудиторией заинтересованных лиц. Продвижение идей, поиск инвесторов и партнёров для новых идей бизнеса.&lt;br /&gt;&lt;br /&gt;Вам задолжали денег и не отдают? Существует &lt;a href=&#39;http://www.vnp-ekb.ru/uslugi/jur_ob/arbitr.html&#39;&gt;взыскание долгов через суд&lt;/a&gt;, арбитраж. Решаются споры с физическими и юридическими лицами.&lt;br /&gt;&lt;br /&gt;Мобильное электричество - это незаменимый во многих областях источник энергии. Мощные &lt;a href=&#39;http://www.power-machines.ru/catalog/power_6.htm&#39;&gt;дизельные электростанции 100 квт&lt;/a&gt; способны обеспечить электричесвом в любом месте.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/sqlite.html</link><author>noreply@blogger.com (Админ)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-3708062187838298967</guid><pubDate>Wed, 03 Feb 2010 05:09:00 +0000</pubDate><atom:updated>2012-03-03T23:38:17.740+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">hiasm</category><title>Недокументированные возможности HiAsm</title><description>Не могу на сто процентов утверждать, что вещи, о которых я собираюсь рассказать, действительно не документированы, однако по среде с интуитивно понятным интерфейсом справку вряд ли кто-то читать будет, разве что про компоненты, да и то. Тем не менее некоторые интересные и удобные вещи замечаются не сразу, и именно о них эта статья.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;http://hi-asm.narod.ru/video/v053.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Если вам требуется продвинуть свой блог или сайт, то вам стоит &lt;a href=&#39;http://personal-page.org/&#39;&gt;заказать статью&lt;/a&gt;, оптимизированную под поисковые запросы. А также другие услуги (ведение блогов, закупка ссылок и т.д.)&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/hiasm.html</link><author>noreply@blogger.com (Админ)</author><thr:total>6</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-6646750482313644872</guid><pubDate>Mon, 01 Feb 2010 07:33:00 +0000</pubDate><atom:updated>2012-03-03T23:37:57.725+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">блог</category><title>Немного о блоге</title><description>Сегодня ничего про HiAsm писать не буду, пожалуй. Пора в блоге порядок навести.&lt;br /&gt;&lt;a name=&#39;more&#39;&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&#39;а. И только тогда всё получилось нормально. Впрочем, если будут ошибки - пишите в комментариях.&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=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Столица Швеции - &lt;a href=&#39;http://www.tourister.ru/world/europe/sweden/city/stockholm&#39;&gt;Стокгольм&lt;/a&gt;. Информация о Стокгольме для туристов на Туристере.Ру. Отзывы туристов, погода в Стокгольме, фотографии Стокгольма.&lt;br /&gt;&lt;br /&gt;Ростпромтест проводит &lt;a href=&#39;http://www.rospromtest.ru/content.php?id=15&#39;&gt;сертификацию мебели&lt;/a&gt;, оформляет разные документы: техническое описание медели, сертификат соответствия, гигиенический сертификат. Оптимизация расходов на сертификацию.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/02/blog-post.html</link><author>noreply@blogger.com (Админ)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-4322968654128842312</guid><pubDate>Sat, 30 Jan 2010 18:44:00 +0000</pubDate><atom:updated>2012-03-03T23:37:40.629+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">hiasm</category><category domain="http://www.blogger.com/atom/ns#">компоненты</category><title>Красивые компоненты в HiAsm</title><description>&lt;img style=&quot;float:left; margin:0 10px 3px 0; width: 124px; height: 104px;&quot; src=&quot;http://hi-asm.narod.ru/led.gif&quot; border=&quot;0&quot; alt=&quot;Красивые компоненты в HiAsm&quot; /&gt;&lt;br /&gt;Всегда хочется сделать свою программу чем-то выделяющейся, не похожей на другие. Внешний вид программы - далеко не последняя в этом деле вещь. И его можно сделать индивидуальным и красивым, если использовать некоторые компоненты.&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;Вкладка &quot;Интерфейс&quot; в HiAsm такая большая, что при первом взгляде можно много чего не заметить. Первые, наиболее используемые компоненты чаще других попадаются на глаза, они известны ещё с прошлых версий HiAsm.&lt;br /&gt;&lt;br /&gt;Сейчас много чего изменилось. Например, появилась технология менеджеров, о которой я рассказывал в статье про &lt;a href=&quot;http://hi-asm.blogspot.com/2009/11/blog-post_13.html&quot;&gt;красивый список&lt;/a&gt;. Менеджер отрисовки делает списки красивее, но только списки и никакие другие компоненты.&lt;br /&gt;&lt;br /&gt;А сейчас раскройте вкладку &quot;Интерфейс&quot; в 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=&quot;http://hi-asm.narod.ru/sha/bh124.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh125.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh126.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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&#39;овцев есть такая возможность.&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=&quot;http://hi-asm.narod.ru/sha/bh127.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh128.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/video/v052.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Для дома, дачи, участка в условиях отсутствия электроэнергии подойдёт &lt;a href=&#39;http://www.power-machines.ru/&#39;&gt;дизельгенератор&lt;/a&gt;. Очень мощные и неприхотливые, они обеспечат вас электричеством везде.&lt;br /&gt;&lt;br /&gt;В промышленности нужны &lt;a href=&#39;http://www.pnevmotech.ru/&#39;&gt;поршневые компрессоры&lt;/a&gt;. Они дешевле винтовых и не могут быть заменены там, где нужен чистый воздух, поскольку поршневые компрессоры работают без масла.&lt;br /&gt;&lt;br /&gt;Защитная &lt;a href=&#39;http://www.market-c.ru/catalog/id_2.html&#39;&gt;мастика битумная&lt;/a&gt; нужна для предотвращения вредных воздействий на разные конструкции. Цена битумной мастики также указана на сайте.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/01/hiasm_30.html</link><author>noreply@blogger.com (Админ)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-3202755141858461255</guid><pubDate>Fri, 29 Jan 2010 13:14:00 +0000</pubDate><atom:updated>2012-03-03T23:37:24.397+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">символы</category><category domain="http://www.blogger.com/atom/ns#">служебные</category><title>Служебные символы: \r\n и другие.</title><description>Новички очень часто встречаются с ситуацией, когда хотят сохранить какой-то файл, а он не сохраняется, т.е. просто не появляется на диске! У меня у самого были такие же проблемы, когда я только начинал своё знакомство с HiAsm. В то время я мало знал компьютер, программирование (если честно, я и сейчас разбираюсь лишь в KOL и Pascal, ну и javascript немного). И тем не менее проблему я свою решил.&lt;br /&gt;&lt;a name=&#39;more&#39;&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=&quot;http://hi-asm.narod.ru/sha/bh122.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;Мы указали здесь путь к одной из папок Windows. В редакторе формы оно отлично отображается, в редакторе параметра Caption - тоже. Но попробуйте запустить эту программу. У вас получится вот что: &lt;strong&gt;C:\WINDOWS\system32f5&lt;/strong&gt;. Откуда там &quot;f&quot; и куда подевались &quot;\102&quot;? А это как раз тот случай, когда произошла замена служебных символов на другой символ. Для того служебные символы и нужны.&lt;br /&gt;&lt;br /&gt;Разберёмся, в чём же дело. Возможно, вы знаете, что в ANSI символ кодируется 1 байтом. 1 байт (8 бит) может иметь 256 вариантов представления, то есть если кодировать 1 байтом 1 символ, то можно закодировать 256 символов. Что с успехом и сделано. И каждый символ имеет свой порядковый номер в специальной таблице. Например, &quot;f&quot; имеет номер 102. Догадались?&lt;br /&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;Комбинация &quot;\102&quot; просто вызывает соответствующий символ из таблицы. Так происходит потому, что некотоые символы невозможно ввести в клавиатуры, например разрыв строки и перевод каретки. Табуляцию тоже не всегда можно ввести с клавиатуры. Между тем, часто она бывает нужна. Например, в &lt;a href=&quot;http://hi-asm.blogspot.com/2009/10/hiasm.html&quot; target=_blank&gt;таблицах&lt;/a&gt;. Помните, там нужно выбрать символ-разделитель, которым будут разделяться тексты ячеек в строке? Обычные символы использовать нежелательно, потому что они могут присутствовать в тексте ячейки. А вот ту же табуляцию практически всегда можно использовать как символ разделитель.&lt;br /&gt;&lt;br /&gt;Табуляция задаётся сочетанием &quot;\9&quot;.&lt;br /&gt;&lt;br /&gt;Однако мы не решили главный вопрос: а как же всё-таки сохранить файл в папку, в имени которой есть служебные символы? Это просто. Нужно вместо одинарных использовать двойные слеши, например:&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/sha/bh123.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/video/v051.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Японские &lt;a href=&#39;http://www.power-machines.ru/catalog/group_5.htm&#39;&gt;мотопомпы бензиновые&lt;/a&gt; от производителя Мацусака. Вам предлагается широкий выбор моделей высокого качества. С ними вы без труда решите проблему открачивания воды.&lt;br /&gt;&lt;br /&gt;Если у вас кондитерское производство, то обратите внимание на &lt;a href=&#39;http://ekma.ru/&#39;&gt;кондитерское оборудование&lt;/a&gt;: охлаждающий шкаф, дробилка для ореха, машина глазировочная и другие незаменимые в производсте питания машины.&lt;br /&gt;&lt;br /&gt;Хотите посетить &lt;a href=&#39;http://www.tourister.ru/world/america/united-states/city/new_york_city/&#39;&gt;Нью-Йорк&lt;/a&gt;? Посетите сначала сайт и узнате о Нью-Йорке больше. Посмотрите интересные места города и отзывы туристов.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/01/rn.html</link><author>noreply@blogger.com (Админ)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-4245174980410741349</guid><pubDate>Thu, 28 Jan 2010 05:41:00 +0000</pubDate><atom:updated>2012-03-03T23:37:08.830+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">звук</category><category domain="http://www.blogger.com/atom/ns#">эффекты</category><title>Делаем звуковые эффекты</title><description>В одной из прошлых статей я обещал рассказать, как делать самостоятельно звуковые эффекты. Причём поскольку работаем мы с байтами звуковых данных, то открывается неисчерпаемое поле экспериментов.&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;Прежде всего, вспомним, как мы работали со звуковыми данными, как помещали их в файл.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/sha/bh119.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh120.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh121.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&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=&quot;http://hi-asm.narod.ru/video/v050.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;Если у вас есть свой сайт, то &lt;a href=&#39;http://seobux.ru/?r=seobux&#39;&gt;сервис раскрутки и продвижения сайтов в интернете&lt;/a&gt; вам будет обязательно нужен. От рекламы зависит посещаемость.&lt;br /&gt;&lt;br /&gt;Сайт компании &quot;Недвижимость и кредит&quot; предлагает &lt;a href=&#39;http://www.nikvrn.ru/catalog/apartment/&#39;&gt;квартиры в Воронеже купить&lt;/a&gt;. Выгодные цены, хорошие квартиры. Рекомендую.&lt;br /&gt;&lt;br /&gt;Перед поездкой в Тайланд, Флоренцию, Малайзию или куда угодно, узнайте &lt;a href=&#39;http://www.tourister.ru/responses&#39;&gt;отзывы туристов об отдыхе&lt;/a&gt;. Сходите на сайт Туристер.ру и поситайте.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/01/blog-post.html</link><author>noreply@blogger.com (Админ)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3915290062440498658.post-3084131493413399156</guid><pubDate>Tue, 26 Jan 2010 06:19:00 +0000</pubDate><atom:updated>2012-03-03T23:36:53.444+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">wav</category><category domain="http://www.blogger.com/atom/ns#">звук</category><title>Доктор WAV</title><description>&lt;img style=&quot;float:left; margin:0 10px 3px 0; width: 121px; height: 100px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid9-qA7f7qquEYW8HT2ezpH1QF5tHYNwHVv5-_2luK7COvuCoIFEFo1eKcW7YNpxBqutYSNWd5LO-ow8tFCyFJSSRmE-TTNXamkPlBSXUYg2rf0wA7sqsG5aizaOnQWj9dlujPbuhC07g/s400/Help.jpg&quot; border=&quot;0&quot; alt=&quot;Доктор WAV&quot; id=&quot;BLOGGER_PHOTO_ID_5430965945094947058&quot; /&gt;&lt;br /&gt;Где-то в Интернете видел программу, которая занимается лечением заголовков wav-файлов, исправляя ошибочные данные. Сегодня попробуем сделать подобную, тем более что компонент WaveHeader я переделал, исправил ошибки и сделал более удобным.&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;Прежде всего ссылка на новый компонент - &lt;a href=&quot;http://hi-asm.narod.ru/waveheader20.rar0&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh117.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&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=&quot;http://hi-asm.narod.ru/sha/bh118.sha&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://hi-asm.narod.ru/sha/sha.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://hi-asm.narod.ru/ads.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;А здесь мы уже подключаем проигрывание звука. После загрузки звукового потока сразу начинается проигрывание. Внизу есть поле для изменения частоты дискретизации при проигрывании. Это атрибут канала, т.е. применяется только при проигрывании, а на заголовок никак не влияет. Вы можете пробовать во время воспроизведения разные значения, чтобы подобрать нужное. И только затем уже вписывать его в поле сверху (тоже частота дискретизации).&lt;br /&gt;&lt;br /&gt;Подобрав нужные значения, можно записывать заголовок в файл. А после записи снова нажимать &quot;Пуск&quot; и проверять.&lt;br /&gt;&lt;br /&gt;&lt;noindex&gt;&lt;a href=&quot;http://hi-asm.narod.ru/video/v049.7z&quot; rel=nofollow&gt;&lt;img src=&quot;http://hi-asm.narod.ru/video/v.ico&quot;&gt;&lt;/a&gt;&lt;/noindex&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;http://odnaknopka.ru/ok2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;hr&gt;&lt;font id=&quot;blg&quot;&gt;&lt;br /&gt;А вы знаете, что &lt;a href=&#39;http://www.bangkok-guide.ru/&#39;&gt;Бангкок&lt;/a&gt; означает &quot;оливковая деревня&quot;? Посетите сайт и узнайте всё о Бангкоке.&lt;br /&gt;&lt;br /&gt;Нужна качественная эмаль для деревянных и подготовленных металлических поверхностей? &lt;a href=&#39;http://www.market-c.ru/catalog/id_1/32&#39;&gt;Эмаль хв 16&lt;/a&gt; - срок службы от 6 лет, время высыхания - до 1,5 ч.&lt;br /&gt;&lt;/font&gt;</description><link>http://hi-asm.blogspot.com/2010/01/wav_26.html</link><author>noreply@blogger.com (Админ)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid9-qA7f7qquEYW8HT2ezpH1QF5tHYNwHVv5-_2luK7COvuCoIFEFo1eKcW7YNpxBqutYSNWd5LO-ow8tFCyFJSSRmE-TTNXamkPlBSXUYg2rf0wA7sqsG5aizaOnQWj9dlujPbuhC07g/s72-c/Help.jpg" height="72" width="72"/><thr:total>0</thr:total></item></channel></rss>