Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2023, 10:21   #1
cupoma58
Пользователь
 
Аватар для cupoma58
 
Регистрация: 12.08.2014
Сообщений: 44
По умолчанию работа со шрифтом

Привет.
Работаю с masm32, все инки и либы - подключены. Решил увеличить шрифт (Consolas) на дисплее.
создаём шрифт: font.inc
Код:
      push offset fntname
      push DEFAULT_PITCH+FF_SWISS   
      push DEFAULT_QUALITY          
      push CLIP_DEFAULT_PRECIS      
      push OUT_DEFAULT_PRECIS       
      push ANSI_CHARSET             
      push 0
      push 0
      push 0
      push FW_NORMAL
      push 0
      push 0
      push 0
      push 35                        
      call CreateFontA@14
      mov  fnt,eax
выводим текст: old.asm
Код:
  ...
  settext  proc                   
      push  offset stroka
      push  hWndEdt
      include font.inc
      push  fnt
      call  SelectObjectA@2
      call  SetWindowTextA@8                             
      ret
  settext  endp
  ...
общий результат: undefined symbol CreateFontA@14 и SelectObjectA@2
Что посоветуете?
P.S. Программа рабочая.
cupoma58 вне форума Ответить с цитированием
Старый 08.02.2023, 10:26   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Проверять подключение Gdi32.lib
p51x вне форума Ответить с цитированием
Старый 08.02.2023, 10:44   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Кстати, почему у вас в функцию с 2 параметрами (@8) передается только один?
Код:
      push  fnt
      call  SelectObjectA@8
В функцию SelectObject@8 надо передавать не только hFont, но еще и hDC
Сейчас в нее передается два параметра
Код:
      push  hWndEdt
      push  fnt
      call  SelectObjectA@8
Но они не соответствуют ожиданиям функции.

P.S. Я вот тоже давно не трогал синтаксис с этой фигней и не помню сколько там надо показывать. После символа @ записано значение, которое равно количеству байт выталкиваемому из стека при возврате из вызова.

Последний раз редактировалось macomics; 08.02.2023 в 14:46.
macomics вне форума Ответить с цитированием
Старый 08.02.2023, 13:34   #4
cupoma58
Пользователь
 
Аватар для cupoma58
 
Регистрация: 12.08.2014
Сообщений: 44
По умолчанию

p51x,
Код:
.586  
.model flat, stdcall 

include old.inc 
 
includelib e:\masm32\lib\user32.lib 
includelib e:\masm32\lib\kernel32.lib 
includelib e:\masm32\lib\gdi32.lib  

include e:\masm32\include\user32.inc 
include e:\masm32\include\kernel32.inc
include e:\masm32\include\gdi32.inc  

_data segment 
    include  data.inc   
_data ends

_text segment 
.....
cupoma58 вне форума Ответить с цитированием
Старый 08.02.2023, 13:38   #5
cupoma58
Пользователь
 
Аватар для cupoma58
 
Регистрация: 12.08.2014
Сообщений: 44
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Кстати, почему у вас в функцию с 2 параметрами (@2) передается только один?
hWndEdt = hDC ?
cupoma58 вне форума Ответить с цитированием
Старый 08.02.2023, 14:39   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от cupoma58 Посмотреть сообщение
hWndEdt = hDC ?
Не равен. hDC получается через вызов GetDC@4
Код:
push hWndEdit
call GetDC@4
mov hDC, eax
В случае с SelectObject@8 надо сделать так
Код:
      push  offset stroka
      push  hWndEdt
      include font.inc
      push  fnt
      push  hWndEdit
      call  GetDC@4
      push  eax
      call  SelectObjectA@8
      call  SetWindowTextA@8
А функции не найдены потому, что вы используете не верные префиксы. SelectObject@8 (2 * 4 = 8) CreateFont@56 (14 * 4 = 56)

ADD: Но вообще то для установки шрифта в окне стандартного класса EDIT надо отправить ему сообщение WM_SETFONT, а не менять объект hFont у hDC, т.к. стандартное окно создано со стилем CS_PARENTDC и не использует собственный hDC, а пользуется родительским. Но EDIT сохраняет объекты hFont отдельно и устанавливает их при выводе информации на экран. Поэтому для изменения шрифта надо сказать окну EDIT сохранить новый hFont путем отправки сообщения.
Код:
      include font.inc
      push  1 ; TRUE - немедленная перерисовка
      push  eax
      push  WM_SETFONT ; = 0030h
      push  hWndEdit
      call  SendMessageA@16
      push  offset stroka
      push  hWndEdt
      call  SetWindowTextA@8

Последний раз редактировалось macomics; 08.02.2023 в 15:57.
macomics вне форума Ответить с цитированием
Старый 08.02.2023, 19:10   #7
cupoma58
Пользователь
 
Аватар для cupoma58
 
Регистрация: 12.08.2014
Сообщений: 44
По умолчанию

macomics,
Благодарю за подсказку - совсем другой вид у арифмометра.
cupoma58 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
шрифты - фрукты выделялись красным шрифтом, овощи - синим шрифтом, а ягоды - жирным курсивом volodya.coi Microsoft Office Excel 2 07.12.2019 23:08
Непонятный баг со шрифтом tortxof Microsoft Office Word 0 30.01.2017 13:16
проблема с шрифтом Demonmov Microsoft Office Word 7 06.11.2009 06:51
Проблемы со шрифтом noniMIX Операционные системы общие вопросы 2 03.02.2009 12:16
Работа со шрифтом Ray Общие вопросы Delphi 0 24.12.2006 13:02