powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Внутреннее устройство SpeedButton
13 сообщений из 13, страница 1 из 1
Внутреннее устройство SpeedButton
    #39489535
Kukuxumushu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь реализовать SpeedButton на WinAPI. В чистом виде такого контрола, судя по всему, нет. Поэтому есть предположение, что в делфи он реализован статиком со сменой стилей рамки, но только каких? Если с утопленной кнопкой всё ясно - WS_EX_STATICEDGE, то подобрать стиль для выпуклой кнопки мне пока не удалось. Попытка расковырять дельфийскую кнопку "в лоб" через GetWindowLong ни к чему не привела - в обоих состояниях выдаются одинаковые стили, попытка применить которые в CreateWindowEx приводит к тому, что контрол вообще не отображается. Проблема бы решилась довольно просто, если бы задать вручную толщину рамки, но как это сделать через WinAPI?
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489540
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почитать исходники TSpeedButton, судя по всему, не предлагать?
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489548
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kukuxumushuв каком именно "исходнике".если поискать файлы с расширением *.pas и содержимым TSpeedButton = class , сразу будет выдано, в каких именно исходниках нужно смотреть:
1. все исходники лежат в папке \source относительно каталога установленной делфи
2. для vcl: \source\vcl\vcl.Buttons.pas (для древних делфи в \source\vcl\Buttons.pas )
3. для fmx: \source\fmx\FMX.StdCtrls. pas

дальше разжевывать или сам способен посмотреть исходные тексты?
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489550
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KukuxumushuПопытка расковырять дельфийскую кнопку "в лоб" через GetWindowLong ни к чему не привела - в обоих состояниях выдаются одинаковые стилиТы хочешь сказать, что у тебя GetWindowLong срабатывает для SpeedButton-а?
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489552
Kukuxumushu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторесли поискать файлы с расширением *.pas и содержимым TSpeedButton = class
asutp2, вы наверное не поверите - вот это первое, что я сделал. Ни до одного вызова CreateWindow таким способом дойти не удалось.
Может вы сами попробуете, если я такой тупой, ибо раздавать абстраткные советы в духе "пойди туда поищи там" - много ума не надо.
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489553
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KukuxumushuКак же надоели мамкины умники, которым лишь бы куда отправить "искать".
Ну не знаешь ответа - пройди мимо, на форуме ещё тысячи тем. Или на худой конец скажи хоть в каком именно "исходнике".
Жопа, спидбатон - не виндовый контрол. Нет там окна. Это просто картинка.
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489554
Kukuxumushu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторТы хочешь сказать, что у тебя GetWindowLong срабатывает для SpeedButton-а?
Соколинский Борис, забыл уточнить, GetWindowLong я вызывал для TPanel - сделал 2 штуки, первая полностью идентична отжатой кнопке с наведенной на неё мышью ("выпуклая"), а вторая - нажатой ("вогнутая"). И стили оказались идентичными. И ещё я заметил, что в делфи у всех подобных контролов можно менять толщину бордера, но как это реализуется на уровне WinAPI? Тогда бы все проблемы исчезли сразу.
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489557
Kukuxumushu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЖопа, спидбатон - не виндовый контрол. Нет там окна.
чччД, я делал спидбатон из панели, там весь вопрос в стиле рамки. Или TPanel - тоже невиндовый контрол?
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489573
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вчера сделал TSpeedButton из TAction, как мне теперь прикрутить TScrollBox ?
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489574
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты видишь кнопку ? И я вижу, а на самом деле её нет.
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489578
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел pas-файлы с контролами, нашел в них файл с классом TSpeedButton
@
сделал поиск по файлу "CreateWindow", не нашел ничего из этого класса. закрыл файл.
@
sql.ru , я прочитал исходники, нифига не понятно, расскажите как там это вот все устроено!
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489632
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kukuxumushuавторесли поискать файлы с расширением *.pas и содержимым TSpeedButton = class
asutp2, вы наверное не поверите - вот это первое, что я сделал. Ни до одного вызова CreateWindow таким способом дойти не удалось.
Может вы сами попробуете, если я такой тупой, ибо раздавать абстраткные советы в духе "пойди туда поищи там" - много ума не надо.
Мамкиным не_умникам надо не искать CreateWindow у наследников TGraphicControl, а смотреть в TSpeedButton.Paint, т.к. TSpeedButton - это по сути не окно, а картинка, которая рисует сама себя в зависимости от состояния. И там всё видно, например для не-Flat кнопки без стилей:
Код: pascal
1.
2.
3.
4.
DrawFlags := DFCS_BUTTONPUSH or DFCS_ADJUSTRECT;
if FState in [bsDown, bsExclusive] then
  DrawFlags := DrawFlags or DFCS_PUSHED;
DrawFrameControl(Canvas.Handle, PaintRect, DFC_BUTTON, DrawFlags);
...
Рейтинг: 0 / 0
Внутреннее устройство SpeedButton
    #39489664
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KukuxumushuМожет вы сами попробуете, если я такой тупой, ибо раздавать абстраткные советы в духе "пойди туда поищи там" - много ума не надо.Предполагается, что если человек хочет написать визуальный компонент в Delphi, то он имеет минимальное представление о структуре VCL и о том, как работают компоненты. Поэтому совет ни разу не абстрактный, а совершенно конкретный - посмотреть исходники TSpeedButton.
Вообще, если сделать Ctrl + Click на декларации какой-нибудь SpeedButton, то откроется как раз файл с исходниками этого компонента. В первой строчке там написано
Код: pascal
1.
  TSpeedButton = class(TGraphicControl)


Читаем справку http://docwiki.embarcadero.com/Libraries/XE2/en/Vcl.Controls.TGraphicControl
В ней написано что TGraphicControl - это базовый класс для легковесных элементов управления, которые не являются обертками для экранных объектов Windows.
Рисование какого-нибудь такого компонента происходит в методе Paint, вот этот метод и надо смотреть.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Внутреннее устройство SpeedButton
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]