Избавление от минусов написания программ на WinAPI или «Верните дискеты!»
Избавление минусов написания программ на WinAPI
Добое утро\день\вечер\ночь, уважаемые хабраюзеры! Поздравляю вас с наступающим и как свой новогодний подарок решил опубликовать свои наблюдения.
Помните ли вы времена, когда компьютеры были большими, а мониторы маленькими? Не надо вздыхать, ностальгируя по тем временам, сейчас все исправим. Ну… Все, конечно вернуть я не смогу, но постараюсь вернуть одну крайне полезную вещь из того времени — дискету со 100-ми играми на борту.
Интересно? Читайте дальше!
Шаг первый — «спискота»
Итак, постараемся сначала понять, как же нам вернуть дискеты и системные требования, сравнимые со Спектрумом.Вариант первый — разбить все компьютеры и достать из сырых подземелий Commodore и Atari.
Не слишком хороший вариант, но, в принципе, можно и его на заметку взять.
Вариант второй — попробовать писать на чистом WinAPI.
Если пользоваться блокнотом и MSDN, в принципе время выполнения приближается к времени выполнения первого варианта.
Что делать? Давайте сперва рассмотрим плюсы и минусы написания программ на чистом WinAPI.
+ Малый размер программ. Если даже писать на Lazarus`е (что как бы и должны делать честные обыватели вроде нас с вами), то размер такой программы при правильно настроенных флагах — 20 кб.
+ Огромное быстродействие по сравнению с VCL\MFC программами. Попробуйте при помощи VCL средств (Canvas.Pixels) обработать картинку 10 000 х 10 000, к примеру, заменив в ней красный цвет на зеленый. Или используйте Get\SetDibBits и обработайте её за пару секунд даже на втором «пне».
+ «Голая логика». Никакого создания лишних объектов в памяти, отладка (при грамотном подходе) занимает в разы меньше времени, чем при VCL, где объекты создаются\уничтожаются каждые пару секунд.
— Много писанины. Да, код программы будет километра 2 в длину. Ведь даже на элементарное действие, которое заменяется одной командой в VCL (Application.Run, например) нужно будет написать около 50-ти строк кода, регистрируя, создавая, освобождая, следя, перемещая и одновременно с этим пытаясь уследить за логикой программы.
— Никакой визуальности! А вы что хотели? Это вам не VCL\MFC это чистый API код. У него нет понятия «форма» или «кнопка». Там каждое бревно есть окно.
Что, уже расхотелось писать на ВыньАпи? Читаем дальше.
Шаг второй — «минус на минус дает плюс»
Что, если избавиться взять руку и положить её на монитор, закрыв минусы. Что вы видите? Нет, не жирные пятна на мониторе. Вы видите плюсы! А за такие плюсы можно и побороться. Итак, постараемся избавиться от минусов.Вариант первый — APIx
Позволяет нам избавиться от второго минуса.Интерфейс практически не отличается от Дельфийского.
НО… Но нажав на «посмотреть код» видим чистый код на Выне, что в принципе и хорошо и плохо одновременно. Хорошо тем, что скопировав в среду разработки (или указав путь к компилятору прямо в программе) мы получим чистый код на ВинАПИ, чего мы и добивались. А вот плохо это потому, что за разъяснением каждой функи придется бегать в MSDN, и дабы понять, что куда писать придется долго и долго курить мануалы и жевать горькие как ягоды калины летом сорцы.
Вариант второй — GRAY FUR
Позволяет нам избавиться от первого минусаЧто есть GRAY FUR? Это просто-напросто DLL, в которой экспортированы функции для быстрого и легкого создания программ. А в самой DLL эти функции держатся на основе WinAPI и внутренней собственной структуре.
begin
CreateApplication;
CreateForm(FALSE, 'Form1');
ResizeForm('Form1', 200, 100);
MoveForm('Form1', 100, 100);
ShowForm('Form1', TRUE);
SetFormFont('Form1', 'Small fonts', 9, $000000, TRUE);
CreateButton('Form1','Button1');
SetButtonPos('Button1', 100, 30);
SetButtonSize('Button1', 80, 30);
SetButtonCaption('Button1', 'Just button');
CreateButtonImage('Button1', BTN_IMAGE_NORMAL);
CreateButtonImage('Button1', BTN_IMAGE_HOVER);
CreateButtonImage('Button1', BTN_IMAGE_PRESSED);
CreateButtonImage('Button1', BTN_IMAGE_DISABLED);
CreateButtonImage('Button1', BTN_IMAGE_SELECTIONMARK);
SetButtonProc('Button1', DestroyApplication);
BufferDraw('Form1');
CollectMessages;
end.
И совсем не страшно, верно?
Единственный минус такого подхода — это отсутствие визуализации, но постараюсь в скором времени избавиться от этого минуса.
Шаг третий — «литературная спискота»
Где все это искать:- MSDN — msdn.microsoft.com/en-us/library/
- APIx — piddlesoft.narod.ru/
- GRAY FUR — squary.ru/wiki/index.php
0 комментариев