Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Кнопка на API [D7, WinXP]


Страницы:   1 2

Dmitry_177 ©   (2006-09-29 18:25:00) 

Хочу создать кнопку на API, но не обычную... Хочу чтобы она обладала всеми свойствами что и обычная кнопка, но перерисовку изменить полностью, чтобы небыло виндовс-прорисовки рамки(бордюра кнопки), чтобы прорисовка была полностью моя... Как так сделать? Помогите...


balepa   (2006-10-03 06:50:00) [1]

Что Вы докопались до размера и зачем это нужно. Нужно это скорее всего для общего развития и понимания как это делается и работает. Ну хочет человек. Мож он потом напишет новую ОС Buttons :)


XProger   (2006-09-30 22:57:00) [2]

Насчёт маленького размера... вот извращался не так давно http://xproger.mirgames.ru/tmp/Form1.rar


@!!ex   (2006-09-30 20:46:00) [3]

Eraser ©   (30.09.06 19:21) [28]

Ступил. Действительно редактор ресурсов работает с WinAPI.


Eraser   (2006-09-30 19:21:00) [4]

> [27] @!!ex ©   (30.09.06 18:49)


> Кстати, редактор форм в MSVC++ использует MFC

вроде нет.


@!!ex   (2006-09-30 18:49:00) [5]

Большое преимущество WinAPiI перед VCL, KOl и все такое прочее - это переносимость. Если ты умеешь писать на WinAPI тебе без разницы на каком языке и в какой IDE писать.

P.S.
Кстати, редактор форм в MSVC++ использует MFC, если мне не изменяет память, так что говорить что он позволяет бытсро и удобно писать на чистом API не есть корректно. :)


Don Nikola   (2006-09-30 18:24:00) [6]

2Eraser:

>Лучше бросить свои силы на написание ядра программы

С этим полностью согласен - зачем нужны обои без стен?

>зачем-то таки придумали этот TGraphicControl.

Наверное что бы избежать ситуаций такого рода: на форме лежит самопальный грид, а каждая ячейка - винконтрол, то винде может поплохеть.
"Лисопеды" обычно заточены под определенный круг задач, потому часто и быстрее, VCL - вещь универсальная и вынужденна поддерживать все варианты.

>скорее, в данном случае, по CreateWindowEx, RegisterClassEx )

Ну CreateWindowEx еще ладно, но RegisterClassEx отличается только полем размера и маленькой иконкой, которую все равно редко кто в ресурсы кладет.


n0name   (2006-09-30 18:16:00) [7]

Зачем *Ex? Зачем ему дополнительные стили?

> Почитай Win32Help(Win32.hlp)  - RegisterClass, CreateWindow,
>  GetMessage, WindowProc, Subclassing a Window, Window Procedure
> Superclassing.

А ещё лучше MSDN.


Eraser   (2006-09-30 18:07:00) [8]

> [23] Don Nikola ©   (30.09.06 17:51)


> Кстати, работать на Delphi c WinApi вроде бы никто в лицензии
> не запрещал, возможности есть, почему не использовать.

но на MSVC++ это удобнее, если в данном случае это слово вообще можно употребить )), например там вполне потребный редактор ресурсов, он же редактор форм. Оч. удобно, при написании проги на чистом API.
Что касается лично меня, то я под win32 пишу и надеюсь буду писать на Делфи :)
Да и не сторонник я такойэкономии, как хочет автор. Лучше бросить свои силы на написание ядра программы, т.е. основной функциональности, а остальное прийдет.

> Я бы не сказал что экономия HWND это "типа круто". Куча
> лишних прослоек - зло.

но все таки в борланде не дураки сидят, и зачем-то таки придумали этот TGraphicControl.

> Почитай Win32Help(Win32.hlp)  - RegisterClass, CreateWindow

скорее, в данном случае, по CreateWindow Ex, RegisterClass Ex)


Don Nikola   (2006-09-30 17:51:00) [9]

2Eraser:

>не являются окнами или другими системными объектами, за счет этого, в большенстве случаев, экономятся системные ресурсы

Я бы не сказал что экономия HWND это "типа круто". Куча лишних прослоек - зло.
Я просто проверял программку на VCL и на WinApi, чисто визуально последняя быстрее и "чище" по экрану ездит.
Но это уже из области "имховости".

>в чем здесь теряется функциональность?

В Seek опущен параметры lpDistanceToMoveHigh и dwMoveMethod.

>хочется писать на чистом api - зачем тогда Делфи вообще, MSVC++ намного более приспособлен для этого. хочется тратить на создание качественного интерфейса как можно меньше времени - используйте VCL Делфи.

C++/VB не любли из эстетико-религиозных соображений, у FreePascal мне как-то компилер не нравится. Кстати, работать на Delphi c WinApi вроде бы никто в лицензии не запрещал, возможности есть, почему не использовать.

2Dmitry_177:

>мне ктонибудь подскажет по моему вопросу чтонибудь?
Молодой человек, не мешайте дядям разговаривать ;)))

Почитай Win32Help(Win32.hlp)  - RegisterClass, CreateWindow, GetMessage, WindowProc, Subclassing a Window, Window Procedure Superclassing.
Посмотри сайт который я указал, там уже мой подход к задаче, сделано на дельфевых классах.


n0name   (2006-09-30 17:47:00) [10]


> Dmitry_177   (30.09.06 17:37) [21]

После создания кнопки:

BtnOldProc := Pointer(SetWindowLong(hBtn, GWL_WNDPROC, DWORD(@BtnWndProc)));

BtnWndProc, в нём отрисовываешь кнопку.

function BtnWndProc(Wnd: HWND; Msg, wParam, lParam: Integer): Integer; stdcall;
begin
if Msg = WM_PAINT then
 begin
// твой код
  result := 0;
  exit;
 end;
result := CallWindowProc(BtnOldProc, Wnd, Msg, wParam, lParam);
end;


Dmitry_177   (2006-09-30 17:37:00) [11]

Хочется мне... ктонибудь может мне подсказать?


ANTPro   (2006-09-30 17:35:00) [12]

Dmitry_177   (30.09.06 17:23) [19]
Ну так в AvL все на нем и сделано :)
А в KOL даже визуальные компоненты есть

Dmitry_177   (30.09.06 17:23) [19]
Я хочу именно на API

Вопрос. Зачем?
Если для уменьшения размера, то на KOL программа, в которой только форма 12.5 кб.
На чистом API вроде 3.5 кб.


Dmitry_177   (2006-09-30 17:23:00) [13]

Я хочу именно на API, мне ктонибудь подскажет по моему вопросу чтонибудь?


ANTPro   (2006-09-30 17:16:00) [14]

Dmitry_177   (30.09.06 15:32) [9]
Хочу сделать маленькую(на API), красивую программку, и просто хочу знать как можно это реализовать на API

А почему именно API? Есть же KOL или AvL ...


Eraser   (2006-09-30 17:03:00) [15]

> [16] Don Nikola ©   (30.09.06 16:49)


> Обычно те 30 сторонних компонентов - это 147 раз отнаследованные
> враперы, которые максимально абстрагируются от WinApi(или
> любого другого Api) и естественно что работать они будут
> меделеннее чем класс работающий непосредственно с очередью
> сообщений и функциями WinApi

из этих 30 компонентов треть или добрую половину в VCL реализуют т.н. lightweight controls, т.е. наследники TGraphicControl, которые вообще говоря, не являются окнами или другими системными объектами, за счет этого, в большенстве случаев, экономятся системные ресурсы.

> также часто теряется изначальная функциональность (простейший
> пример: Seek/SetFilePointer).

в чем здесь теряется функциональность?

в общем imho такое, хочется писать на чистом api - зачем тогда Делфи вообще, MSVC++ намного более приспособлен для этого. хочется тратить на создание качественного интерфейса как можно меньше времени - используйте VCL Делфи.


Don Nikola   (2006-09-30 16:49:00) [16]

2Eraser:
Обычно те 30 сторонних компонентов - это 147 раз отнаследованные враперы, которые максимально абстрагируются от WinApi(или любого другого Api) и естественно что работать они будут меделеннее чем класс работающий непосредственно с очередью сообщений и функциями WinApi, также часто теряется изначальная функциональность (простейший пример: Seek/SetFilePointer).
Естественно, что тормоза будут лишь в интерфейсной части, логика может работать и быстрее чем Api'шные аналоги. Например, отрисовка графики c ColorKey в WinApi сделаны через "ниже поясницы", если сделать свою отрисовку в буффер, то скорость будет заметно выше. Другой пример LZ* и APLib.
И вообще, "лисопед" не цель, а средство.


Eraser   (2006-09-30 16:31:00) [17]

> [13] @!!ex ©   (30.09.06 16:23)


> Зуб даю, работать будет быстрее. и намного.

не уверен.
особенно с
> и намного.


Dmitry_177   (2006-09-30 16:28:00) [18]

Ну так есть у кого-нибудь какиенибудь соображения по вопросу? (Кнопка на API с полной своей прорисовкой, бордюра в том числе)


@!!ex   (2006-09-30 16:23:00) [19]


> делай 3 десятка компонентов на чистом API, тогда и сравним
> где тормозов больше.

Зуб даю, работать будет быстрее. и намного.

P.S.
Насколько мне известно VCL(как и MFC -  просто надстройка над WinAPI)


Eraser   (2006-09-30 16:10:00) [20]

> [11] Don Nikola ©   (30.09.06 16:03)


> Например, затем чтобы сделать программку без тормозов от
> трех десятков сторонних компонент

делай 3 десятка компонентов на чистом API, тогда и сравним где тормозов больше.

> Плюсы "лисопедов" - малый размер

это плюсы вирусов, или 166 КБ это много?

> максимальная скорость

спорный вопрос, особенно учитывая, что программу будут писать люди, которые на форумах задают вопрос "Кнопка на API", я пишу это не в обиду автору, просто есть сильное подозрение, что развитие данного продукта закончится на недоделанном UI, а до функциональности так дело и не дайдет, не хотелось бы этого .. и прежде всего автору.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо