Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Подгонка размеров поля EDIT под используемый шрифт

07.12.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Много чего уже делали и с полями ввода, и со шрифтами. На очереди автоматическая подгонка высоты однострочного элемента EDIT в зависимости от размеров шрифта, который ему назначен. Это необходимо, чтобы при изменении шрифта текст в поле ввода смотрелся правильно. Высота EDIT считается по высоте выбранного шрифта плюс отступ толщиной в двойную рамку, чтобы текст при отображении эту рамку не перекрывал. В случае многострочных полей ввода высоту надо считать по высоте шрифта, умноженной на необходимое количество строк, плюс отступ.
  1. ;-------------------------------------------------------------
  2. ; Подгонка размера поля EDIT под заданный шрифт
  3. ;-------------------------------------------------------------
  4. ; Параметры:
  5. ;   hEdit - хэндл поля EDIT
  6. ;   hFont - хэндл шрифта
  7. ;-------------------------------------------------------------
  8. proc resize_edit hEdit:DWORD, hFont:DWORD
  9.         locals
  10.             rc RECT
  11.             tm TEXTMETRIC
  12.         endl
  13.  
  14.         pusha
  15.  
  16.         mov     edi,[hEdit]
  17.  
  18.         ; Получить контекст устройства
  19.         invoke  GetDC,edi
  20.         or      eax,eax
  21.         ; Поля ввода не существует, на выход
  22.         jz      .loc_exit
  23.  
  24.         xchg    eax,esi
  25.  
  26.         ; Выбрать шрифт
  27.         invoke  SelectObject,esi,[hFont]
  28.         or      eax,eax
  29.         jnz     @f
  30.  
  31.         ; Шрифт не загружен, на выход
  32.         invoke  ReleaseDC,edi,esi
  33.         jmp     .loc_exit
  34. @@:
  35.         ; Получить метрику выбранного шрифта
  36.         lea     ebx,[tm]
  37.         invoke  GetTextMetrics,esi,ebx
  38.         invoke  ReleaseDC,edi,esi
  39.  
  40.         ; Высота шрифта
  41.         mov     ebx,[ebx+TEXTMETRIC.tmHeight]
  42.         ; Добавить к высоте размер рамки
  43.         invoke  GetSystemMetrics,SM_CYEDGE
  44.         shl     eax,2
  45.         add     ebx,eax
  46.  
  47.         ; Получить размеры поля EDIT
  48.         lea     esi,[rc]
  49.         invoke  GetWindowRect,edi,esi
  50.         invoke  GetParent,edi
  51.         ; Отмасштабировать координаты окна
  52.         invoke  MapWindowPoints,HWND_DESKTOP,eax,esi,2
  53.  
  54.         ; Установить новые размеры поля EDIT
  55.         mov     eax,[esi+RECT.right]
  56.         sub     eax,[esi+RECT.left]
  57.         invoke  MoveWindow,edi,[esi+RECT.left],[esi+RECT.top],eax,ebx,TRUE
  58.  
  59. .loc_exit:
  60.         popa
  61.         ret
  62. endp
Функция самодостаточная, не требует дополнительных переменных в сегменте данных. На входе два параметра: hEdit - хэндл поля EDIT, у которого надо изменить размер, и hFont - хэндл шрифта, под размер которого в поле ввода вносятся изменения. Вызывать функцию изменения размера надо сразу после назначения шрифта полю EDIT.

Читать статью целиком »
Просмотров: 263 | Комментариев: 1

Исследование защиты программы ZMover

02.12.2020 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы ZMover

ZMover - полезный инструмент, который дает возможность пользователю автоматически устанавливать расположение окон на рабочем столе, менять их размер и позицию, перемещать на нужный монитор, включать режим "поверх всех окон". Как только окно появляется, к нему применяются сохраненные правила. В пробном режиме программа работает всего 30 дней, потом надо будет метнуться в кассу. Или не надо, если прочитаете эту статью.

Читать статью целиком »
Просмотров: 824 | Комментариев: 7

Как узнать, что приложение запущено через ярлык

29.11.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Очередная развлекушка на Ассемблере. Давайте узнаем, была ли наша программа запущена через .lnk-файл, то есть через ярлык, или же напрямую через Проводник, файловый менеджер или другой процесс. Для этого надо получить структуру STARTUPINFO, а затем проверить, установлен ли флаг STARTF_TITLEISLINKNAME в поле dwFlags.
  1.         STARTF_TITLEISLINKNAME = 0x800
  2.  
  3.         ; Получить информацию запуска
  4.         mov     [sinfo.cb],sizeof.STARTUPINFO
  5.         invoke  GetStartupInfo,sinfo
  6.  
  7.         ; Флаг установлен?
  8.         test    [sinfo.dwFlags],STARTF_TITLEISLINKNAME
  9.         jz      @f
  10.         ; Да, запуск выполнен через ярлык
  11.         ...
  12. @@:
  13.         ; Нет, прямой запуск
  14.         ...
Ранее этот флаг относился к недокументированным, сейчас в MSDN появилось его нормальное описание. Итак, если флаг STARTF_TITLEISLINKNAME установлен, то программа была запущена через ярлык, а в параметре lpTitle структуры STARTUPINFO содержится указатель на строку с полным путем к .lnk-файлу, через который был произведен запуск.

Читать статью целиком »
Просмотров: 291 | Комментариев: 0

Запеканка из кабачков

26.11.2020 | Категория: А еще я туда ем! | Автор: ManHunter

Запеканка из кабачков

Вам родственники тоже нагрузили кабачков со своих огородов? Не знаете куда их девать? Предлагаю отличный рецепт запеканки из кабачков с овощами. Запеканка готовится просто, на вкус замечательная, а главное, облегчает стратегические кабачковые запасы :)

Читать статью целиком »
Просмотров: 306 | Комментариев: 1

WinDowzer 1.3

23.11.2020 | Категория: Мои программы | Автор: ManHunter

Скриншот программы WinDowzer

Программа показывает полезную системную информацию о диалоговом окне или элементе интерфейса, которые находятся под курсором мыши: хэндл окна, родительское окно, размер окна, название класса, стили, адреса процедур обработки, пользовательские данные, родительское приложение. Поддерживается юникод. Программ такого типа чуть более чем много, но среди всего этого изобилия так и не нашлось программы с нужным мне функционалом. Поэтому пришлось делать ее самому. Для тех, кто не читает документацию: перехват включается и выключается по горячей клавише Alt+Ctrl+W.

Читать статью целиком »
Просмотров: 13264 | Комментариев: 38

01 ... 10 11 12 13 14 15 16 ... 327
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0116 сек.) / Память: 4.75 Mb
Наверх