Например, вы распространяете программу, которая должна позволять пользователю создавать свои программы, нацеленные на узкий круг задач. Это уже смахивает на создание нового HiAsm. Чтобы пользователя смог создать программу с помощью вашей программы, ваша программа, как и HiAsm, должна уметь составлять файлы кода (pas, dpr), общаться с компилятором, подключать ресурсы и т. д. естественно, это сложно. Гораздо проще поступить по-другому: сделать шаблон программы, который пользователь сможет настраивать по-своему, каждый раз получая, по сути, новую программу. Но при этом компилятор ему не понадобится, так как шаблон уже готов и скомпилирован вами.
Возьмём для примера такой вариант: ваша программа должна предоставлять возможность создавать пользовательские программы, которые должны уметь выключать/перезагружать компьютер, при этом интерфейс должен полностью определяться пользователем. Конечно, можно сразу предоставить готовый вариант, но, во-первых, это только пример, во-вторых же, маленькая собственноручно созданная программа будет удобнее для пользователя, чем одна большая, со множеством настроек.
У вас должно быть два файла exe: первый - программа для создания пользовательских приложений, второй - шаблон пользовательского приложения. Шаблон должен выводить на себе кнопки, флажки и т. д. так, как задал пользователь. И завершать работу системы, конечно, в соответствии с заданными действиями. Все настройки должны храниться в самом шаблоне (т.е. exe-файле), чтобы пользовательское приложение было самодостаточным и не таскало за собой разные файлы.
Посмотрим, как можно сделать редактор интерфейса в своей программе.
Итак, в дочерней форме у нас находится редактор интерфейса. Также есть панель, на которой можно выбрать, какие визуальные элементы добавлять. Внизу расположена панель прокрутки, а в ней - панель. Эта панель служит подложкой, чтобы расставляемые компоненты не улетали в верхний левый угол панели прокрутки. И уже в этой панели находится IndexToChanel. Естественно, ведь нам нужно как-то определять, какую кнопку на панели инструментов нажали.
Первое событие уводит нас в новую дочернюю панель. Заметьте, что это ChilPanelEx, а не ChildPanel, и параметр Mode=Dynamic. Это означает, что создаваться панель будет динамически в ходе выполнения программы и любое количество раз. Это нам и нужно, потому что когда зайдёте в эту панель, то увидите в ней картинку с изображением кнопки. Размеры панели соответствуют размерам кнопки. Она и будет представлять у нас этот компонент.
Нажмите кнопку «Кнопка» на панели, и изображение кнопки появится, если вы продолжите нажимать, то будут появляться новые копии изображения, но все они будут находиться точно друг под другом, так что их вы не заметите.
Сейчас следует научить программу перемещать компоненты, изменять их размеры и удалять. Для демонстрационного примера этого хватит.
Итак, перемещать кнопки достаточно легко. Теперь вы сможете увидеть, что при каждом нажатии клавиши на панели действительно создаётся новая копия компонента «кнопка».
А здесь уже реализовано изменение размера «кнопки». Как видите, при нажатии правой кнопкой мыши запоминаются текущие координаты мыши и размеры динамической панели (именно панели, а на изображения, потому что изменяться размеры будут у панели, а у изображения Align=caClient, оно и так растянется). При перемещении мыши с нажатой правой кнопкой вычисляется разница между текущими координатами и запомненными, а разница прибавляется к запомненным размерам динамической панели.
Сделаем и удаление компонента.
Удаление происходит из контекстного меню. Как видите, схема выходит за пределы динамической панели. Всё дело в том, что элемент не может удалить самого себя, т.е. динамическая схема не может взять и удалить себя своим же событием. Таково правило, и потому мы выводим связь за пределы панели. Но там код тоже сложнее, чем мог бы быть. Сначала запоминается идентификатор схемы-источника события. Это необходимо, чтобы знать, какую копию динамической панели удалять. Затем включается таймер. На этом события панели заканчиваются, и удаление панели производит событие таймера, а не событие самой панели, так что всё правильно.
Здесь важно задать Interval=1, Enable=False и AutoStop=1, чтобы таймер сработал практически сразу и всего 1 раз. Ну а дальше всё просто.
Не будем усложнять демонстрационную схему и делать реализацию остальных компонентов. Лучше доработаем кнопку.
Теперь вы можете видеть в списке созданный элемент и удаление его. На основе этого списка будем назначать кнопкам события.
Итак, теперь у нас появился ещё один список, в который заносятся действия. Всё очень просто, и здесь важно следить, чтобы количество элементов и действий совпадало. Сами действия, конечно, примитивны, но никто не мешает вам в своей программе сделать что-то более осмысленное и сложное.
Теперь надо как-то сохранять в шаблоне пользовательского приложения (которого у нас пока нет) данные об элементах и действиях. Шаблон у нас - это простой файл exe. Дописывать данные мы будем просто в его конец. Они не повлияют на работу программы, но программа сможет извлечь их оттуда и использовать.
Здесь программа подготавливает данные для записи. Конечно, нет смысла писать идентификатор кнопки (ведь он каждый раз генерируется автоматически), нет смысла словами писать действия - достаточно индексов. Например, индекс 1 означает, что действие - выключение, 2- перезагрузка и т. д.
Давайте проследим все действия от нажатия кнопки «Сохранить в шаблон». Первым делом перебирается массив элементов. В нём могут быть кнопки, флажки и прочие компоненты. Но у нас реализованы только кнопки, чтобы было проще. Однако в программе, где будут и другие компоненты, необходимо указывать, какой именно компонент надо создавать (в шаблоне). Поэтому и создан невизуальный список доступных элементов. Из визуального списка извлекается строка, которая разбивается на имя компонента, дефис и идентификатор. Имя входит в doGetIndex, на выходе которого - уникальный индекс. Например, для кнопки это будет 0, для флажка - 1 и пр.
Дефис нам не нужен. А вот идентификатор динамической панели нам нужен, чтобы узнать её размеры и положение. Но здесь мы задействуем ещё и МТ-поток. Первый элемент этого потока - индекс элемента, второй - идентификатор панели. Когда мы входим в нужный мультиэлемент, МТ-поток разбивается на элементы. Первый элемент - индекс компонента - нужен, чтобы определить какую динамическую панель использовать: панель кнопки, флажка или др. Второй элемент - идентификатор - определяет копию динамической панели. Он её и устанавливает текущей, а затем снимает с нижней точки идентификатор компонента (Handle). Его мы предварительно подключили внутри панели.
Далее этот идентификатор заносится в глобальную переменную id. И всё, в мультиэлементе ничего более не происходит. Возвращаемся к основной схеме.
Там вторым событием разветвителя извлекается индекс действия. Это происходит точно так же, как извлекался индекс компонента, так что здесь всё просто. Ну а затем формируются данные для одного компонента: индекс компонента, положение и размеры, индекс действия. И заносится в список. Следом за ним происходит новая итерация цикла, и так пока не переберётся весь список компонентов.
В конце просто для демонстрации выдаётся содержимое списка. Там одни цифры, что и должно быть. Главное, что мы знаем: на каждый компонент расходуется 6 строк. Большего нам и не надо.
Запишем теперь это в exe-файл шаблона. Его пока нет, так что запускать схему не нужно. Когда будет сделан шаблон, вы запустите всё вместе.
Наконец, запись. Здесь всё просто: файл открывается в режиме ReadWrite, чтобы можно было записать, не стирая предыдущие данные. Указатель ставится в самый конец, записываются потоковые данные, а затем - их размер, чтобы можно было считать их в шаблоне. Конечно, перед этим можно было упаковать данные по zip-алгоритму (благо компонент такой есть в HiAsm), но для упрощения я этого не делал. Если у вас большое количество данных, их, несомненно, надо паковать.
Пора перейти к шаблону.
Это просто форма. Скомпилируйте её и откройте затем в блокноте (можете сменить расширение на txt). Посмотрите в конец и запомните его. Затем верните расширение обратно, запустите создатель пользовательских приложений, сформируйте кнопки и сохраните в шаблоне (кнопкой из программы). Затем файл bh267.exe опять откройте в блокноте и убедитесь, что в конце появились ваши данные.
Но ведь программа пока не интерпретирует их! Значит, надо добавить в шаблон эту функцию.
Тут данные извлекаются из exe. Сначала указатель устанавливается за 4 байта до конца файла - эти байты несут в себе размер данных. Затем указатель откидывается назад на размер данных и на 4 байта (т.к. он в процессе чтения этих 4-х байт сместился на них к концу).
Сообщение показывает, что данные выданы. Остаётся лишь их интерпретировать. Это несложно. Помните только, что файл шаблона теперь называется по-другому, а потому в программе-создателе его надо исправить. Ну и, конечно, при каждой компиляции шаблона надо вновь заносить в него данные - компилятор ведь собирает программу заново, никаких других данных там не остаётся. Когда вы будете использовать программу вместе с шаблоном, шаблон компилировать не придётся, так что заботиться об этом вам не придётся.
А здесь реализуется расстановка кнопок в соответствии с заданными условиями. Число строк в списке делится на 6 - ведь именно столько компонентов и должно быть сделано (на каждый компонент - по 6 строк, не забывайте). Затем запускается цикл, количество итераций которого равно количеству компонентов, в каждой итерации - ещё цикл, у которого 6 итераций (от 0 до 5), каждая вынимает верхнюю строку, а затем удаляет её, так что следующая строка становится верхней.
Строка интерпретируется в соответствии с её индексом: первая - это индекс компонента (у нас только кнопка, поэтому может быть только 0), следующие 4 - габариты, последнее - индекс действия. Но его я реализовывать не стал, оставив это для вас.
Для проверки не забудьте поменять в программе-создателе имя файла-шаблона (bh269.exe) и создать нужную конфигурацию, а затем сохранить её в шаблоне. Запускайте этот шаблон и наблюдайте за появлением кнопок. Кстати, в шаблоне это уже не рисунки, а настоящие кнопки.
Доделать выполнение действие достаточно просто, поэтому я решил предоставить это сделать вам самостоятельно. Подумайте, и у вас получится!
Напоследок стоит сказать, что удалять данные из шаблона также можно, но лучше, если шаблон у вас будет храниться в каком-либо файле с другим расширением. Когда потребуется записать данные - копируете такой файл, меняете расширение на exe и записываете. Если понадобится что-то изменить - просто удаляете этот файл шаблона и делаете копию нового.
Если файла по ссылке не окажется, напишите в комментариях, и я перезалью его.
Помогите реализовать следующее:
ОтветитьУдалитьСписок строк 1-Список строк 2=Список строк 3
Например:
Валя;Коля;Люба;Саша-Коля;Саша=Валя;Люба
Вот так.
ОтветитьУдалитьСпасибо большое за ответ. Может Вы сможете подсказать как можно сделать так, чтобы при установке метода видимый\скрытый, допустим поле ввода не только показывалось, но и скрывалось?
ОтветитьУдалитьВсе я разобрался, прошу прощения за свою тупость. От кнопки она разумеется работать не будет, а если установить чек бокс то все окей, и скрывается и показывается.
ОтветитьУдалитьЕсли на doVisible подать 0, то будет скрыто, если 1 - показано.
ОтветитьУдалитьСоздал программу для удаления дополнительных шрифтов в C:\WINDOWS\Fonts. Чтобы оставались только те шрифты которые устанавливаются с системой, а скопированные пользователем дополнительные шрифты в эту папку удаляются.
ОтветитьУдалитьКогда нажимаешь кнопку удалить, появляется системное сообщение "не удается произвести чтения и запись с диска...". И появляется столько раз сколько шрифтов должно было удалиться. Как можно это исправить?
Наверняка шрифты используются какой-либо програмой, например MSWord. Я пробовал, у меня тоже это сообщение выходит. А посл перезагрузки компбтера - нормально удаляет.
ОтветитьУдалитьПосле перезагрузки, тоже самое. В атрибурах нет галочек только для чтения и т.д.
ОтветитьУдалитьВ чем еще может быть дело?
Может, при загрузке запускается какая-то программа, которая использует шрифты. А вручную (кнопкой Delete) удаляются?
ОтветитьУдалитьБез проблем. В ручную пожалуйста удаляй сколько хочешь. При загрузке наверняка, что то может запускаться. Нужно проверить. Спасибо огромное за не равнодушие. Таких замечательных людей к сожалению мало.
ОтветитьУдалитьПросто не могу ясно себе представить на какую точку свойств компонента ActiveX подавать данные (и в каком случае на ту или иную точку). Какие свойства передовать в МТ потоке и их последовательность, согласен что в справке они есть, но как они называются, в каком разделе справки находятся и какова их последовательность вот это вопрос.
ОтветитьУдалитьOchen haroshije uroki. Jahatel bi uznat kak rabotat s ODBC datasource i kak atobrazhat v tablice :) Takoj urok bilbi kstati :) Zhdu :)
ОтветитьУдалитьДописать данные в открытый exe возможно?
ОтветитьУдалитьFructus Gravis, это хорошо показано в примерах: Elements\Delphi\Example\DataBase. В этой папке есть разные примеры к базам данных в HiAsm.
ОтветитьУдалитьИгорь, попробуйте. Возможно, это зависит от операционной системы (так же, как XP не позволяет удалять открытые exe). Чтение в этой ОС проверялось - возможно.
Zdrastvuijte,
ОтветитьУдалитьDa primeri jest, no ja nika nimagu razabratca, kak ustanovit razdelitel iz ODBC patoka, dlia dlia palei. Tak vot hatelos uznat padrobnee kak izpolzovat etat komponent. A v primerah tam sio harasho, no kogda pakazivajut eto luche.
К сожланеию, я знаю работу с ODBC не больше вашего (я не создатель HiAsm, создатель - Dilma). Поэтому рекомендую вам обратиться на форум hiasm.com, где вы сможете задать вопрос автору.
ОтветитьУдалитьАдмин неплохобы показать как можно работать с USB
ОтветитьУдалитьК сожалению, у меня нет опыта по этой теме. Попробуйте обратиться на форму hiasm.com.
ОтветитьУдалитьА вы можете создать видео урок по установке 5 версии хайасма, а то там так намудрили с установкой? Заранее спасибо!
ОтветитьУдалитьНасколько мне известно, официально 5-я версия ещё не вышла, пока только демо. А описывать установку программы, которая ещё не протестирована, не вижу смысла, т.к. она может быть полна ошибок, а для новичков (которые чаще всего и заходят на блог) это будет слишком....сложно.
ОтветитьУдалитьЖдите релиза или хотя бы беты, а пока работайте с 4-й. Не думаю, что в 5-й будут коренные отличия - обещается только поддержка другие операционок, а вот прибавка компонентов - вряд ли.
Спасибо за ответ!
ОтветитьУдалитьА вы планируете продолжения замечательных блогов и уроков? Хотелось бы узнать о разработки WEB приложений немножко.
Да, разумеется. Просто сейчас времени мало, но вскоре я обязательно что-нибудь напишу!
ОтветитьУдалитьЗдравствуйте,не подскажите, по вашему данному уроку у меня почему-то когда запускаю ваш код,нажимаю на кнопку у меня открывается второе окно и трясется, такое ощущение что как будто добавлен секундомер, в чем может быть проблема?
ОтветитьУдалитьА какая версия HiAsm? И какая конкретно схема? Я запускал bh266, у меня всё нормально.
ОтветитьУдалитьУ меня такаяже проблема ! Окно тресется , версия хайасма последняя во всех уроках окно тресется если меняешь размер формы все прекращается.
ОтветитьУдалитьУважаемый автор сделайте пожалуйста уроки по WEBу и по составлению отчетов разными извращенными методами. Спасибо.
Скажите пожалуйста, можно ли с помощью Hiasm реализовать функции Undo и Redo (Отменить и Повторить), которые имеются почти во всех программах по редактированию каких-либо данных? Если "Да", то можете рассказать как это сделать?
ОтветитьУдалитьКак примерс текстом. А суть одна: запоминать текущее значение и потом выдавать его при Undo. Redo, соответственно, реализуется выдачей в обратном порядке.
ОтветитьУдалитьЗдравствуйте. Предлагаю Вам объединить наши проекты. (hi-asm.ru и Ваш). Пожалуйста, пишите на rowder[собачка]yandex.ru
ОтветитьУдалитьполагаю, что блогун скоро загнется. Здесь неплохо работать AC
ОтветитьУдалитьЯ бы не стал делать пока таких выводов, тем более что забрасывать такой прибыльный (для создателей) сервис вряд ли кто-то будет.
ОтветитьУдалитьЧто-то Ваша ссылка не отображается.
вопрос! а можно в HiAsm'e сделать что-то похоже на антивирус??? если можно в видео уроке!
ОтветитьУдалитьНаверное, можно. Но, честно, я не очень представляю, как это можно реализовать. Может, автор HiAsm знает (автор - не я, автор - Dilma, к которому можно обратиться на форуме hiasm.com).
ОтветитьУдалитьвы можете сделать игру сапер? и если сможете объяснить это в видео уроке! заранее спасибо!
ОтветитьУдалитьЧестно говоря, я не знаю тонкостей этой игры - так, пробовал когда-то (играть). Поэтому вряд ли. Хотя тут сложностей быть не должно: надо лишь просто случайным образом (компонент Random со вкладки Логика) выбрать участки, где будут мины, и занести данные об этом в виртуальную матрицу (например, компонент Matrix со вкладки Массивы). Приготовить поле из кнопок. При нажатии на кнопку проверять значение в виртуальной матрице, соответствующее положению кнопки.
ОтветитьУдалитьНо это всё в общих чертах.
Здравствуйте! А можно показать всё это в видео уроке? А то никак не пойму, и покрупнее, пожалуйста, особенно курсор покрупнее, а то обычно в видео уроках я не могу уследить за курсором. И потом когда на паузу ставлю сложно его там найти. У меня, тем более, проблемы со зрением, ещё от рождения, оттуда - все вытекающие последствия. И вообще я сколько ни пытаюсь разобраться в HiAsm - и всё никак не могу, уже сколько месяцев, и всё никак. Всё в Алгоритме приходится делать свои программы, а всё-таки хочется совершенствоваться. Уважаемый админ, если можно, пожалуйста, запишите видео урок, потом скиньте мне на E-mail адрес viv1794@mail.ru. Заранее спасибо!
ОтветитьУдалитьДа, видеоурок запишу в течение следующей недели.
ОтветитьУдалитьАвтор, пишите еще статьи :) жаль, что больше не пишите...
ОтветитьУдалитьНапишите например как сделать свой редактор буфера обмена, наподобие моего, который я сделал не в HiAsm, а в Алгоритме, дистрибутив потом скину, требуется Microsoft .NET Framework 2.0. Или как сделать загрузчик файлов из Интернета. Такую схему я ещё не сделал, надо как-то сделать, там у меня затруднения есть. Начинал делать. Вот с объектом Главное меню не могу разобраться, как сделать так, чтобы при нажатии на пункт меню выскакивало вложенное меню.
ОтветитьУдалитьhttp://hi-asm.blogspot.com/2009/10/blog-post_30.html - вот тут про загрузчик файлов. Чтобы сделать вложенные меню, надо вложенные пункты заключить в скобки. Например:
ОтветитьУдалитьФайл
(
Создать
Открыть
Закрыть
)
Правка
(
Отменить
Повторить
)
Где скачать все твои видео уроки разом?
ОтветитьУдалитьЗачем ты архивируешь видео?
Ссылки на все видеоуроки: http://hi-asm.narod.ru/.
ОтветитьУдалитьБез архива видео весит много мегабайт, некоторое - больше сотни. Архивы ужимают его до скромных 5-10 Мб.
я не обратил внимание что это avi.
ОтветитьУдалитьсасибо.
на ютубе как то всё не по порядку.
На ютуб не я выкладывал, это сделал кто-то другой.
ОтветитьУдалитьКогда же новые статьи и видео уроки? Какая то мертвая точка у вас сейчас.
ОтветитьУдалитьЗдравствуйте!
ОтветитьУдалитьДобавьте, пожалуйста, поле поиска на Ваш блог, а то слишком сложно найти нужный материал. Порой сколько ни роюсь - не могу найти! =(((
В blogger.com я гаджета для поиска не нашёл. Поэтому придётся искать через расширенный поиск Яндекса http://yandex.ru/search/advanced?numdoc=10&text= В поле "на сайте" указать адрес этого сайта и искать только на нём.
ОтветитьУдалитьХорошо пишете и содержательно мне нравится!!
ОтветитьУдалитьТак а новые статьи будут? Уже существует пакет C.NET, да и в основном элементов поприбавилось.
ОтветитьУдалитьЯ хотел спросить. Как в HiAsm сделать программу которая блокирует клавиши: ALT , Ctrl . Извините что не по теме.
ОтветитьУдалитьЧестно, не знаю. Не пробовал.
УдалитьСпасибо огромное за статьи.Новое что нибудь будет?
ОтветитьУдалитьТакой вопрос. Как проверить нажата клавиша. Если нажата то выполнить то-то, если нет - то-то.
ОтветитьУдалитьГлавное чтоб была проверка Каждые 10 секунд.
Не получилось как-то сделать с помощью:
-------------------------------------------------------------------
Вкладка Система - Устройства - Клавиатура.
-------------------------------------------------------------------
Сразу же выполняет, если даже не нажал клавишу.
Извиняюсь за задержку с ответом.
УдалитьВот схема:
Add(Keyboard,6048721,259,294)
{
Key=27
link(onReadKey,5331110:doCase,[])
}
Add(Timer,4298945,203,294)
{
Interval=10000
link(onTimer,6048721:doReadKey,[])
}
Add(Case,5331110,308,294)
{
Value=Integer(1)
DataOnTrue=String(нажата esc)
link(onNextCase,12657698:doData,[])
link(onTrue,723671:doWork3,[(403,307)])
}
Add(DoData,12657698,357,294)
{
Data=String(не нажата esc)
link(onEventData,723671:doWork2,[])
}
Add(Label,3305103,420,294)
{
Left=55
Top=40
}
Add(HubEx,723671,399,294)
{
link(onEvent,3305103:doText,[])
}
Большое спасибо!
УдалитьДва вопроса:
ОтветитьУдалить1. Можно ли узнать кем является пользователь(админитратором, или огранич. учётной записью),
Если да, то как...
2. Как создать инсталлятор(нескольких файлов)?
Т.е. Чтобы был один EXE, который установлял какой-нибудь ZIP-архив и путь для установки выбирал сам пользователь...
Посмотри видеоурок:
Удалить"Хранение бинарных файлов"
Sorry, Хранение бинарных данных
УдалитьРазобрался, спасибо!
Удалить1. Можно ли узнать кем является пользователь(админитратором, или огранич. учётной записью),
ОтветитьУдалитьЕсли да, то как...
Смотрите, работает?
Удалитьhttp://www.fayloobmennik.net/3781724
Получается 0 - это не Админ, а 1 Админ(так как-то)
УдалитьВыбы могли сделать урок про Компонент Delphi, а то не понятно куда надо направлять точки и др.
ОтветитьУдалитьК сожалению, я больше не занимаюсь созданием видеоуроков, но могу словами описать. Не понял, про что вопрос.
УдалитьЛадно, вроде у меня получилось, так что вопросов пока не будет...
УдалитьВ RichEdit, как я знаю, можно вставить картинку.
ОтветитьУдалитьТакой вопрос:
её можно сохранять вместе с файлом, если да, то как.
При этом чтобы она была на том же месте(при открытии), где и при сохранении.
А стандартный doSave разве не работает?
УдалитьНет, он картинку сохраняет как пробел!
УдалитьЯ проверил - надо вставлять в RichEdit именно картинку (скопировать её в граф. редакторе), а не кидать туда файл. И при сохранении указывать расширение - rtf. Тогда всё нормально.
УдалитьХорошо, спасибо!
УдалитьМожно ли в HiAsm сделать программу для изменения пароля учетной записи?
ОтветитьУдалитьДля этого надо знать, где хранятся эти пароли. Я, честно, не знаю. Но если это знать, то, скорее всего, можно (например, через реестр или какой-нибудь файл).
УдалитьКак отправить данные, например на сайт. Т.е. Пользователь нажимает кнопку, и все данные, введённые им, отправлялись на сайт?
ОтветитьУдалитьСмотря какие данные. Например, файл можно загрузить так: http://rusfolder.com/40810253. Но для этого надо знать также php, чтобы настроить принимающую страницу.
УдалитьТакже в папке Hiasm Elements\delphi\Example\Internet есть файл PostBuilder.sha, это тоже пример отправки данных.
С "HTTP_FileUpload" разобрался. И PostBuilder не пригодился! Спасибо!
УдалитьМожно ли сделать такую программу, чтобы она изменяла вид меню пуск и панель задач? Например, чтобы она делала меню пуск прозрачным.
ОтветитьУдалитьТо что не было реализовано в Windows XP, или что нибудь похожее, но улучшено.
УдалитьAdd(MainForm,2953706,245,196)
Удалить{
link(onCreate,4320485:doFind,[])
}
Add(FindWindow,4320485,308,210)
{
ClassName="Shell_TrayWnd"
SkipParam=1
link(onFind,3776336:doFindChild,[])
}
Add(WinTools,4807529,308,273)
{
Point(doAlphaBlendValue)
link(Handle,6914852:Var2,[])
}
Add(TrackBar,1934771,231,301)
{
Left=10
Top=10
Width=370
Max=255
TickCount=32
Position=255
link(onPosition,4807529:doAlphaBlendValue,[])
}
Add(FindWindow,3776336,371,203)
{
Caption="Пуск"
SkipParam=2
link(ParentHandle,6914852:Var3,[(377,191)(347,191)(347,257)])
}
Add(GetDataEx,6914852,308,252)
{
link(Data,4320485:Handle,[])
}
Add(WinTools,16074852,371,343)
{
Point(doEnable)
link(Handle,3776336:Handle,[])
}
Add(CheckBox,7894858,315,371)
{
Left=10
Top=45
Checked=0
Caption="Пуск"
link(onCheck,16074852:doEnable,[])
}
Самое главное - верно ввести ClassName.
P.S. Надеюсь, вы не станете вредить людям такими программами :)
УдалитьЯ хотел сделать прогу наподобии TransBar, Спасибо!
УдалитьА вот как можно узнать класс практически любого элемента:
ОтветитьУдалитьAdd(MouseEvent,11963611,287,175)
{
Point(Handle)
}
Add(Edit,4160676,350,231)
{
Left=20
Top=20
Width=250
Text=""
ClearAfterEnter=1
link(onEnter,3842873:doAdd,[])
link(Str,14197673:ClassName,[(356,219)(332,219)(332,275)(307,275)])
}
Add(Timer,12494212,252,231)
{
Interval=30
link(onTimer,14197673:doWinInfo,[])
}
Add(WinInfo,14197673,301,231)
{
link(onWinInfo,4160676:doText,[])
link(Handle,11963611:Handle,[])
}
Add(Memo,3842873,413,238)
{
Left=20
Top=45
Width=250
Height=175
ScrollBars=3
}
Спасибо...
УдалитьУ меня нет элемента WinInfo, пишет:
Удалить"Элемент WinInfo не найден"!
Обновите версию доя HiAsm 4.04 build 184
УдалитьУ меня 4.04 build 184!!!
УдалитьПардон, build 185! Компонент этот будет на вкладке "Окно", третьим.
УдалитьЧестно, и сам не помню, откуда и что качал, потому что после b184 с версиями полная неразбериха. Официально новые выпуски не выходят, но энтузиасты, поддерживающие проект, собирают и дополняют "ночные сборки" и т.п.
Удалитьhttp://forum.hiasm.com/forum.html?q=3&p=207833
Нашёл вот здесь:
Удалитьhttp://hiasm.com/wiki.html
HiAsm - Packets - Windows - Компоненты - Окно - Общие - "WinInfo"
Да, можно и отдельно установить.
Удалить
ОтветитьУдалитьКак сделать программу которая как emu.exe выделяет компоненты, или пример рабочего стола, когда пользователь выделяет файлы...
ОтветитьУдалитьВот пример выделения: http://rusfolder.com/40955144. А как выделять внутри объекты - это сами подумайте. Например, можно сравнивать координаты объектов и координаты мыши и потом принимать решение: выделить объект или снять выделение.
УдалитьСпасибо!
УдалитьДва поля MEMO и две кнопки для перевода на русский и English, при этом используется переводчик Google...
ОтветитьУдалить- Как это сделать?
Как-то строить запрос, наверное, на страницу. Точно не знаю.
УдалитьНемогли бы вы сделать урок(можно письменный) про пакет CNET или про что нибудь NOVOE...
ОтветитьУдалитьМожно ли создать Веб-браузер вместе с TabControl, т. е. как во многих браузерах...
ОтветитьУдалитьЕсли можно то как.
Попробуйте использовать панель ChildPanelEx при Mode=Dynamic. Там, в редакторе мультиэлемента, на вкладке "Точки" есть точки add, select и пр. С ними можно делать копии этой панели прямо во время выполнения программы. Но сам TabControl плохо реализован, например, нет возможности менять название вкладки (если только в новой версии не добавили).
УдалитьНемогли бы сделать полуфабрикат?
УдалитьКак сделать так, чтобы была максимальная шир/длина, минимальная шир/длина. Т. е. чтобы окно не выходило за рамки макс. шир/длины и не было меньше минимальной шир/длины
ОтветитьУдалитьhttp://forum.hiasm.com/load.php?a=19146 - это компонент, его нужно установить в hiasm.
УдалитьСпасибо
Удалитьhttp://www.fayloobmennik.net/3909124
ОтветитьУдалитьСпасибо
ОтветитьУдалитьМожно ли с помощью MP3_INFO и ArrayRW записать значение, он может читать, но ним нельзя записывать? Если можно как.
ОтветитьУдалитьЕсли, не записывает, значит, нельзя записать. Единственный тут вариант - это искать структуру этих тегов в интернете и потом изменять их с помощью FileStream.
УдалитьМожно ли создать программу которая бы извлекала иконки из файлов?
ОтветитьУдалитьКак в RichEdit изменить шрифт текста, который выделен, при этом чтобы невыделенные слова не использовались таким же шрифтом.
ОтветитьУдалитьА точка doFormatSel там не работает?
УдалитьAdd(RichEdit,6550670,287,245)
Удалить{
Left=120
Top=60
Width=175
Height=165
Strings=#7:енркенр|11:кенрмкемнрк|8:емнркенр|
Point(doFormatSel)
link(Color,15246680:CurrentColor,[])
}
Add(ColorBox,15246680,294,161)
{
Left=120
Top=35
Width=175
Height=21
link(onClick,2560839:doData,[(338,167)(338,227)(226,227)(226,286)])
}
Add(DoData,2560839,238,280)
{
link(onEventData,6550670:doFormatSel,[])
}
Правда, как сменить шрифт, размер, я сам не знаю: можно лишь менять начертание и цвет (верхними точками). Это надо на форуме просить, чтобы доделали компонент.
Да, здесь единственный случай изменения всего шрифта:
УдалитьAdd(MainForm,2953706,21,105)
{
Width=659
Height=114
DragForm=0
}
Add(RichEdit,6550670,217,147)
{
Top=28
Width=651
Height=55
Align=4
Strings=#7:енркенр|11:кенрмкемнрк|8:емнркенр|
ScrollBars=2
Point(doFormatSel)
Point(doFont)
link(Color,6559662:Var2,[])
link(Style,4705978:Var1,[(237,124)])
}
Add(ColorBox,15246680,224,63)
{
Left=290
Width=175
Height=21
BoxDrawManager="qwerty_1"
link(onClick,2560839:doData,[(277,69)(277,130)(128,130)(128,188)])
}
Add(DoData,2560839,140,182)
{
link(onEventData,4973881:doWork2,[])
}
Add(ComboBox,13815283,294,49)
{
Left=465
Width=180
Height=21
Strings=#7:Обычный|6:Жирный|6:Курсив|13:Жирный курсив|12:Подчёркнутый|19:Подчёркнутый жирный|19:Подчёркнутый курсив|26:Подчёркнутый жирный курсив|
Text="Обычный"
ReadOnly=0
BoxDrawManager="qwerty_1"
Point(Index)
Point(doFont)
link(onClick,8495736:doData,[(338,62)(338,107)(128,107)(128,146)])
}
Add(DoData,8495736,140,140)
{
link(onEventData,4973881:doWork1,[(200,146)])
}
Add(HubEx,4973881,196,182)
{
link(onEvent,6550670:doFormatSel,[])
}
Add(BoxDrawManager,12168961,371,63)
{
Name="qwerty_1"
Gradient=1
Gutter=1
}
Add(FontBox,5577727,112,224)
{
Left=5
Width=175
Height=21
BoxDrawManager="qwerty_1"
link(onResult,326675:doWork3,[(156,230)(156,286)])
}
Add(Font,12870493,98,294)
{
link(onFont,6550670:doFont,[(174,300)(174,195)])
link(Size,10224937:String,[])
link(Color,6559662:Var1,[(111,117)])
link(Name,5577727:CurrentFont,[])
link(Style,4705978:Var2,[(125,211)(307,211)])
}
Add(GetDataEx,4705978,301,119)
{
Angle=1
link(Data,13815283:Index,[(314,124)])
}
Add(GetDataEx,6559662,224,112)
{
link(Data,15246680:CurrentColor,[])
}
Add(ComboBox,10224937,91,49)
{
Left=180
Width=110
Height=21
Strings=#1:8|1:9|2:10|2:11|2:12|2:14|2:16|2:18|2:20|2:22|2:24|2:26|2:28|2:30|2:32|2:34|2:36|2:38|2:40|2:42|
Text=""
DataType=1
ReadOnly=0
BoxDrawManager="qwerty_1"
link(onClick,777428:doWork1,[(135,62)(135,181)(86,181)])
}
Add(HubEx,326675,82,280)
{
Angle=1
link(onEvent,12870493:doFont,[(86,300)])
}
Add(HubEx,777428,82,259)
{
Angle=1
link(onEvent,326675:doWork1,[])
}
Всё дело в том, что в библиотеке KOL есть все процедуры для изменения шрифта, размера, начертания (в т.ч. перечёркивания), цвета фона, выравнивания, создания списков, междустрочных интервалов и пр. для выделенного текста и вообще. Но в компоненте они не реализованы. Поэтому я и советовал обращаться на форум - там могут доделать компонент так, чтобы можно было применять выделенному участку RichEdit практически любое форматирование.
УдалитьСпасибо
УдалитьВнутри панели подключите ##select к точке панели doBrignToFront.
ОтветитьУдалитьСпасибо
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьВеб-браузер является 6 версией IE, можно ли как-нибудь изменить эти параметры?(где они находятся)
ОтветитьУдалитьВ Реестре, в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION создайте параметр DWORD с именем * с необходимым значением. Тут подробнее:
ОтветитьУдалитьhttp://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx
Спасибо
УдалитьПрограмма(create.exe) создаёт файл exe(read.exe), который можно запустить и увидеть такой же текст какой и был задан в create.exe
ОтветитьУдалитьКак такое сделать?
Сама по себе программа создать exe не может, потому что нужен компилятор и другие служебные файлы для этого. Но почитайте данный пост (программирование без компилятора) - там как раз рассказывается, как вложить в один exe заранее подготовленный другой и чтобы вложенный exe'шник можно было настраивать из основного.
Удалить"Ну и немного слов о сайте hi.asm.narod.ru, на котором я располагаю схемы к статьям в блоге. Планируется сделать на сайте некий справочник по компонентам HiAsm. Всё, что я знаю о компонентах, я размещу там. Работы по сайту я уже начал, но пока не загрузил на сайт. Так что скоро, возможно, появится ещё один сайт, где можно прочитать про HiAsm."
ОтветитьУдалить---
Цитата из
http://hi-asm.blogspot.ru/2010/02/blog-post.html
---
Есть ли у вас справочник на данный момент? уже 2014 год.
Когда-то я действительно начинал справочник по компонентам, но тогда ещё не было адекватной справки в hiasm, а сейчас почти по любому компоненту можно получить полноценную справку из самого hiasm.
УдалитьMake(delphi)
ОтветитьУдалитьver(4.04 build 185)
Add(MainForm,2953706,21,105)
{
Width=247
Height=295
}
Add(ListBox,4154382,203,70)
{
Left=10
Top=5
Width=70
Height=75
Strings=#7:Пункт 1|7:Пункт 2|7:Пункт 3|
}
Add(ListBox,15731917,273,70)
{
Left=90
Top=5
Width=70
Height=75
Strings=#10:Подпункт 1|10:Подпункт 2|10:Подпункт 3|
}
Add(ListBox,7114400,336,70)
{
Left=165
Top=5
Width=70
Height=75
Strings=#10:Значение 1|10:Значение 2|10:Значение 3|
}
Add(StringTableMT,5036724,406,294)
{
Left=10
Top=105
Width=225
Height=155
Columns=#6:Пункты|9:Подпункты|8:Значение|
IconsCheck=[]
MiscIcons=[]
Icons=[]
}
Add(Button,849370,112,161)
{
Left=10
Top=85
Width=225
Height=15
Caption=""
link(onClick,4417484:doEvent1,[])
}
Add(FormatStr,10725227,322,294)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,5036724:doAdd,[])
link(Str1,13978727:Value,[(328,272)(223,272)])
link(Str2,5973897:Value,[(335,264)(293,264)])
link(Str3,8921946:Value,[(342,272)(356,272)])
}
Add(ArrayEnum,10777338,217,161)
{
link(onItem,13978727:doValue,[(261,167)(261,197)(205,197)(205,223)])
link(Array,4154382:Array,[])
}
Add(Memory,13978727,217,217)
{
}
Add(ArrayEnum,7727644,287,161)
{
link(onItem,5973897:doValue,[(335,167)(335,200)(279,200)(279,223)])
link(Array,15731917:Array,[])
}
Add(Memory,5973897,287,217)
{
}
Add(ArrayEnum,14006049,350,161)
{
link(onItem,8921946:doValue,[(394,167)(394,197)(338,197)(338,223)])
link(Array,7114400:Array,[])
}
Add(Memory,8921946,350,217)
{
link(onData,10725227:doString,[(394,223)(394,261)(310,261)(310,300)])
}
Add(Hub,4417484,168,161)
{
OutCount=3
link(onEvent1,10777338:doEnum,[])
link(onEvent2,7727644:doEnum,[(234,174)(234,167)])
link(onEvent3,14006049:doEnum,[(266,181)(266,167)])
}
---
Мне надо чтобы все пункты, подпункты и значения "шли по порядку". т.е.
Пункты с пунктами(последовательно),
Подпункты с подпунктами(последовательно),
Значения со значениями(последовательно)...
С перебором Массива можно?
Add(ListBox,4154382,350,175)
ОтветитьУдалить{
Left=10
Top=5
Width=70
Height=75
Strings=#7:Пункт 1|7:Пункт 2|7:Пункт 3|
}
Add(ListBox,15731917,420,175)
{
Left=90
Top=5
Width=70
Height=75
Strings=#10:Подпункт 1|10:Подпункт 2|10:Подпункт 3|
}
Add(ListBox,7114400,483,175)
{
Left=165
Top=5
Width=70
Height=75
Strings=#10:Значение 1|10:Значение 2|10:Значение 3|
}
Add(StringTableMT,5036724,511,455)
{
Left=10
Top=105
Width=225
Height=155
Columns=#6:Пункты|9:Подпункты|8:Значение|
IconsCheck=[]
MiscIcons=[]
Icons=[]
}
Add(Button,849370,280,273)
{
Left=10
Top=85
Width=225
Height=15
Caption=""
link(onClick,10777338:doEnum,[])
}
Add(FormatStr,10725227,427,455)
{
DataCount=3
Mask="%1;%2;%3"
link(onFString,5036724:doAdd,[])
link(Str1,10777338:Item,[(433,380)(370,380)])
link(Str2,13732527:Item,[])
link(Str3,8597222:Item,[(447,380)(503,380)])
}
Add(ArrayEnum,10777338,364,273)
{
link(onItem,13732527:doRead,[])
link(Array,4154382:Array,[])
}
Add(ArrayRW,13732527,434,273)
{
link(onRead,8597222:doRead,[])
link(Array,15731917:Array,[])
link(Index,192101:Var3,[(447,261)(413,261)(413,320)])
}
Add(ArrayRW,8597222,497,273)
{
link(onRead,4584902:In,[])
link(Array,7114400:Array,[])
link(Index,2310746:Var,[])
}
Add(LineBreak,14060436,371,336)
{
Type=1
link(Data,192101:Var2,[])
Primary=[2310746,133,-91]
}
Add(LineBreak,14835053,385,455)
{
link(Out,10725227:doString,[])
Primary=[4584902,154,-182]
}
Add(GetDataEx,192101,371,315)
{
link(Data,10777338:Index,[])
}
Огромное спасибо!
УдалитьКак изменить фильтр открытия чтобы было примерно так:
ОтветитьУдалитьИзображения|*.bmp* , *.jpeg* , *.png*|
Т. е. один фильтр с несколькими форматами
Будут ли новые видеоуроки или вы сейчас их не делаете?
ОтветитьУдалитьУже не делаю - нет времени.
УдалитьГде-то был вопрос о фильтре для нескольких расширений, отвечаю здесь:
ОтветитьУдалитьИзображения|*.bmp; *.jpeg; *.png
Можете объяснить про (Вкладка СИСТЕМА - Потоки), для чего они нужны и где применяются(подробнее каждый)
ОтветитьУдалитьThread нужен, когда в программе используются ресурсоёмкие вычисления - их выносят в отдельный поток, чтобы они не мешали работать с программой во время их выполнения.
ОтветитьУдалитьMutex - защита от запуска второй копии программы, подробнее - во внутренней справке hiasm, там даже схема есть.
Назначение остальных компонентов также описано во внутренней справке, там всё довольно подробно. Просто выделите компонент и нажмите F1.
Как работать с компонентом:
ОтветитьУдалитьСистема - Устройства - Web Cam
один(можно два,три) примера(полноценных),
Заранее спасибо!
Всё проще некуда. Дам небольшой пример для основной работы:
ОтветитьУдалитьAdd(WebCam,7536132,308,231)
{
Point(doSaveDIB)
Point(doStartSequence)
Point(doStopSequence)
link(WinHandle,12927403:Handle,[])
}
Add(Button,341292,231,203)
{
Left=10
Top=10
Caption="Подкл"
link(onClick,7536132:doConnect,[(285,209)(285,237)])
}
Add(Button,5881304,231,238)
{
Left=10
Top=35
Caption="Откл"
link(onClick,7536132:doDisConnect,[])
}
Add(Image,12927403,315,147)
{
Left=10
Top=60
Width=230
Height=160
Point(Handle)
}
Add(Button,15916811,161,301)
{
Left=70
Top=10
Width=145
Caption="Записать кадр в файл"
link(onClick,10892608:doExecute,[])
}
Add(SDialog,10892608,217,301)
{
link(onExecute,7536132:doSaveDIB,[(279,307)(279,251)])
}
Add(Button,9077997,175,350)
{
Left=70
Top=35
Width=145
Caption="Записать видео в файл"
link(onClick,15124099:doExecute,[])
}
Add(SDialog,15124099,231,350)
{
link(onExecute,7536132:doStartSequence,[(285,356)(285,258)])
}
Add(Button,3956340,238,399)
{
Left=220
Top=35
Width=125
Caption="Остановить запись"
link(onClick,7536132:doStopSequence,[(289,405)(289,265)])
}
Есть ещё методы для вывода окон настроек, их тоже можете использовать. Но у меня нет веб-камеры, проверить не могу.
"Электронная почта" Яндекса работать не будет, она начала использовать SSL/TLS шифрование, что делать?
ОтветитьУдалитьПопробуйте спросить на форуме hiasm.com. Я точно не знаю, но думаю, придётся поменять значения портов в компоненте.
Удалитьhttp://2paste.in/fl1f
ОтветитьУдалитьКак сделать так, чтобы отображалось как здесь(в табл.):
http://vfl.ru/fotos/860bdbfd8450732.html
При этом таких видов тегов(tr) неограниченное кол-во...
Имеется ввиду, таблица должна быть не в WebBrowser, а StringTable.
ОтветитьУдалитьText1, Text2, Text3, Text4, http://1, http://2, http://3, src="rus.jpg" - динамические, т.е. выриантов таких тегов tr много, а эти слова могут иметь другой вид, например не src="rus.jpg" a src="eng.jpg"...
ОтветитьУдалитьЗдравствуйте, как добавлять картинку, звук и текст в конец файла, чтобы их ( из того файла, в который записывали ) можно было считать ?
ОтветитьУдалитьТ.е. несколько данных
Жду ответа !
Почему недоступен сайт программы?
ОтветитьУдалитьЗдесь обсуждение проблем с сайтом http://forum.d2h.ru/xf/topic.php?t=65334&start=40
ОтветитьУдалить