Часы

Тема в разделе "WASM.BEGINNERS", создана пользователем Mikl___, 9 фев 2022.

  1. DOSAsm386

    DOSAsm386 Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    64
    Адрес:
    Россия
    Прикольный калькулятор, скачал себе.
    Mikl___, не получается откомпилировать программу.
    Использую следующий BAT файл:
    Код (DOS):
    1. cls
    2. set masm64_path=\masm64\
    3. set filename=%~n1
    4. %masm64_path%bin\ml64 /Cp /c /I"%masm64_path%Include"  %filename%.asm > errors.txt
    5. pause
    6. if errorlevel 1 exit
    7. %masm64_path%bin\link /SUBSYSTEM:WINDOWS /LIBPATH:"%masm64_path%Lib" ^
    8. /entry:WinMain %filename%.obj  >> errors.txt
    9. del %filename%.obj
    10. pause
    Ошибки при компиляции:
    Код (DOS):
    1.  Assembling: timer02.asm
    2. timer02.asm(22) : error A2008:syntax error : pushaddr
    3. timer02.asm(45) : error A2006:undefined symbol : SYSTEMTIME
    4. timer02.asm(45) : error A2195:parameter or local cannot have void type
    5. timer02.asm(10) : error A2006:undefined symbol : IMAGE_BASE
    6. timer02.asm(61) : error A2006:undefined symbol : NtdllDefWindowProc_
    7. timer02.asm(67) : error A2006:undefined symbol : DeleteObject
    8. invoke(56): Macro Called From
    9.   timer02.asm(67): Main Line Code
    10. timer02.asm(68) : error A2006:undefined symbol : RtlExitUserProcess
    11. invoke(30): Macro Called From
    12.   timer02.asm(68): Main Line Code
    13. timer02.asm(70) : error A2006:undefined symbol : IMAGE_BASE
    14. movReg64Arg(11): Macro Called From
    15.   invoke(14): Macro Called From
    16.    timer02.asm(70): Main Line Code
    17. timer02.asm(74) : error A2006:undefined symbol : wSecond
    18. timer02.asm(76) : error A2006:undefined symbol : wMinute
    19. timer02.asm(77) : error A2006:undefined symbol : wHour
    20. timer02.asm(86) : error A2006:undefined symbol : CreateCompatibleDC
    21. invoke(30): Macro Called From
    22.   timer02.asm(86): Main Line Code
    23. timer02.asm(89) : error A2006:undefined symbol : SelectObject
    24. invoke(30): Macro Called From
    25.   timer02.asm(89): Main Line Code
    26. timer02.asm(103) : error A2006:undefined symbol : BitBlt
    27. invoke(59): Macro Called From
    28.   timer02.asm(103): Main Line Code
    29. timer02.asm(108) : error A2006:undefined symbol : DeleteDC
    30. invoke(30): Macro Called From
    31.   timer02.asm(108): Main Line Code
    32.  
    Также подозреваю, что есть проблема с ресурсами. Точнее не умею с ними работать.
    Уровень владения MASM64 - дошел тогда давно только до третьего шага второй главы
    Сказок Дядюшки Римуса.
     
  2. KPG

    KPG Member

    Публикаций:
    0
    Регистрация:
    13 янв 2021
    Сообщения:
    121
    MK-61? :)
    Разбор кода ИК1302 от МК-61 (МК-52)

    Программу эмулирования уже по разобранной схеме его работы написали на С#, но полагаю такя задачка для решения впору применения ассемблера

    (ранее эмулирование железа МК-61 делали по схеме микросхемы с микрокодом программы на разных контроллерах, но это не так быстро при том, что оригинальная тактовая частота где то 160КГц)

    P.S. Сам имел некоторый опыт эмулирования в рамках связки Форт/ассемблер x86 системы комманд процессора PDP-11. :)
     
    Последнее редактирование: 18 фев 2022
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    DOSAsm386,
    для начала замените содержимое \masm64\bin, masm64\include и masm64\lib и попробуйте собрать снова
    bat-файл
    Код (Text):
    1. cls
    2. set masm64_path=\masm64\
    3. set filename=%~n1
    4. if exist errors.txt del errors.txt
    5. call :read_settings %filename%
    6. @echo %kind_of_file%
    7. goto %kind_of_file%
    8. :CONSOLE
    9. if exist %filename%.exe del %filename%.exe
    10. if exist %filename%.obj del %filename%.obj
    11. if exist errors.txt del errors.txt
    12. %masm64_path%bin\ml64 /Cp /c /I"%masm64_path%Include" %filename%.asm >> errors.txt
    13. if errorlevel 1 exit
    14. if exist %1.rc (
    15. %masm64_path%bin\RC /r /i"%masm64_path%Include" %filename%.rc >> errors.txt
    16. %masm64_path%bin\link /LIBPATH:"%masm64_path%Lib" ^
    17. /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:%masm64_path%bin\stubby.exe ^
    18. /SECTION:.text,W /ALIGN:16 /entry:WinMain /MERGE:.rdata=.text ^
    19. /fixed /nocoffgrpinfo %filename%.obj %filename%.res >> errors.txt
    20. if exist %1.res del %1.res
    21. ) else (
    22. %masm64_path%bin\link /SUBSYSTEM:CONSOLE /LIBPATH:"%masm64_path%Lib" ^
    23. /entry:WinMain %filename%.obj /LARGEADDRESSAWARE:NO ^
    24. /ALIGN:16 /SECTION:.text,W /BASE:0x400000 /STUB:%masm64_path%\bin\stubby.exe >> errors.txt
    25. )
    26. if errorlevel 1 exit
    27. del %filename%.obj
    28. goto exit1
    29. :GUI
    30. if exist %filename%.exe del %filename%.exe
    31. if exist %filename%.obj del %filename%.obj
    32. if exist errors.txt del errors.txt
    33. %masm64_path%bin\ml64 /Cp /c /I"%masm64_path%Include" %filename%.asm > errors.txt
    34. if errorlevel 1 exit
    35. if exist %1.rc (
    36. %masm64_path%bin\RC /r /i"%masm64_path%\Include" %filename%.rc > errors.txt
    37. %masm64_path%bin\link /LIBPATH:"%masm64_path%Lib" ^
    38. /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:%masm64_path%bin\stubby.exe ^
    39. /SECTION:.text,W /ALIGN:16 /entry:WinMain  ^
    40. /fixed /nocoffgrpinfo %filename%.obj %filename%.res >> errors.txt
    41. if exist %1.res del %1.res
    42. ) else (
    43. %masm64_path%bin\link /SUBSYSTEM:WINDOWS /LIBPATH:"%masm64_path%Lib" ^
    44. /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:%masm64_path%bin\stubby.exe ^
    45. /ALIGN:16 /entry:WinMain  ^
    46. /fixed /nocoffgrpinfo %filename%.obj >> errors.txt
    47. )
    48. if errorlevel 1 exit
    49. goto exit1
    50. :DLL
    51. if exist %filename%.dll del %filename%.dll
    52. %masm64_path%bin\ml64 /c /Cp /I %masm64_path%include %filename%.asm >> errors.txt
    53. if errorlevel 1 exit
    54. if exist %1.rc (
    55. %masm64_path%bin\RC /r  %filename%.rc >> errors.txt
    56. if errorlevel 1 exit
    57. %masm64_path%bin\link /SUBSYSTEM:WINDOWS /LIBPATH:%masm64_path%lib ^
    58. /ENTRY:DllMain /DLL /DLL /section:.bss,S /stub:%masm64_path%bin\stubby.exe  ^
    59. %filename%.obj %filename%.res /DEF:%filename%.def >> errors.txt
    60. if exist %1.res del %1.res
    61. ) else (
    62. %masm64_path%bin\link /SUBSYSTEM:WINDOWS /LIBPATH:%masm64_path%lib ^
    63. /ENTRY:DllMain /DLL /DLL /section:.bss,S /stub:%masm64_path%bin\stubby.exe  ^
    64. %filename%.obj /DEF:%filename%.def >> errors.txt
    65. )
    66. if errorlevel 1 exit
    67. del %filename%.exp
    68. :exit1
    69. del %filename%.obj
    70. del errors.txt
    71. :: %filename%.exe
    72. exit
    73. :read_settings
    74. for /f "eol=# tokens=2-3" %%A in (%filename%.asm) do (
    75. set kind_of_file=%%A
    76. if %%B == # exit /b )
    77. exit /b
     

    Вложения:

    • bin.zip
      Размер файла:
      2,7 МБ
      Просмотров:
      166
    • include.zip
      Размер файла:
      428,9 КБ
      Просмотров:
      172
    • lib.zip
      Размер файла:
      345,4 КБ
      Просмотров:
      190
    DOSAsm386 нравится это.
  4. DOSAsm386

    DOSAsm386 Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    64
    Адрес:
    Россия
    Mikl___, короче добился успешной компиляции. В качестве BAT файла взял asm2.bat из папки bin.
    Там тоже самое содержимое, что и в посте, только поменял
    set masm64_path=\masm41\
    на
    set masm64_path=\masm64\
    Немножко подредактировал BAT файл, т.к. после компиляции удалялся файл error.txt
    Результат все равно такой же - нет цифр.
    Ресурсный файл компилируется.
    В файле timer02.rc пробовал также прописать полный путь к файлу, результат тот же.
    Прикрепляю откомпилированный мной файл.
    Mikl___, попробуй запустить его на своей операционке, может дело в отличиях наших операционок.
    --- Сообщение объединено, 19 фев 2022 ---
    timer01.exe откомпилировался и работает нормально.
    Но там работы с ресурсами нет.
    --- Сообщение объединено, 19 фев 2022 ---
    timer02.exe под Win10 2004 не компилировал, но откомпилированный файл под нее запускается без цифр.
     

    Вложения:

    • timer02_exe.zip
      Размер файла:
      3,4 КБ
      Просмотров:
      179
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    DOSAsm386,
    в аттаче asm-/rc-/exe-файлы timer02a.exe, timer02b.exe, timer03c.exe Экзешники собирались с ресурсами и индикаторы нормально отображаются под Windows 7 и 10. Чтобы ехе работали и под "семеркой", и под "десяткой" пришлось убрать из bat-файла разрешение на запись в секцию .code (.text,W) и выравнивание /ALIGN:16 Разница между timer02a.exe, timer02b.exe, timer03c.exe
    1. при создании ресурса в timer02a.rc ресурс типа BITMAP имеет имя "MYBP1"
      Код (C++):
      1. MYBP1 BITMAP "03.bmp"
      в timer02a.asm
      Код (ASM):
      1. .data
      2. aMYBP1 db "MYBP1",0
      3. .code
      4. mov edx,offset aMYBP1
      5. invoke LoadBitmap,IMAGE_BASE
      6. mov hBitmap,eax
    2. при создании ресурса в timer02b.rc ресурс типа BITMAP идентифицируется по номеру (100)
      Код (C++):
      1. #define MYBP1 100
      2. MYBP1 BITMAP "03.bmp"
      в timer02b.asm
      Код (ASM):
      1. MYBP1   equ 100
      2. .code
      3. invoke LoadBitmap,IMAGE_BASE,MYBP1
      4. mov hBitmap,eax
    3. при создании ресурса в timer02c.rc ресурс типа BITMAP ассоциируется с числом 100, но которое описано как строка
      Код (C++):
      1. 100 BITMAP "03.bmp"
      в timer02c.asm
      Код (ASM):
      1. .data
      2. aMYBP1 db "#100",0
      3. .code
      4. mov edx,offset aMYBP1
      5. invoke LoadBitmap,IMAGE_BASE
      6. mov hBitmap,eax
     

    Вложения:

    • timer02.zip
      Размер файла:
      17,3 КБ
      Просмотров:
      199
    DOSAsm386 нравится это.
  6. DOSAsm386

    DOSAsm386 Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    64
    Адрес:
    Россия
    Mikl___, ура!
    Все три откомпилированные тобой экзешники отображают цифры!
    Проверил пока на Семерке.
    Теперь, будет время, попробую откомпилировать экзешники самостоятельно и проверю их работоспособность!
    [​IMG]
    Когда скачивал аттач с исходниками и откомпилированными экзешниками, то Firefox ругался на вирус, пришлось принудительно ему сказать, чтобы скачал архив.
    Kaspersky Security Cloud Free вирусов не нашел.
     

    Вложения:

    • Timer02abc.jpg
      Timer02abc.jpg
      Размер файла:
      193,4 КБ
      Просмотров:
      745
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Воспользовался советом Intro и нашел шрифт для семисегментного индикатора, теперь никаких картинок :)
    tut_07.jpg
    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. TIMER_ID = 10
    4. W = 225
    5. H = 95
    6. .code
    7. WinMain proc <20>
    8. local msg:MSG
    9.  
    10.    xor ebx,ebx
    11.    mov esi,IMAGE_BASE
    12.    mov edi,offset AppName
    13.    mov ecx,offset FileName
    14.    invoke LoadCursorFromFileA
    15.    push rax ;hIconSm
    16.    push rdi ;lpszClassName
    17.    push rbx
    18.    push COLOR_WINDOW
    19.    push rax ;hCursor
    20.    push rax    ;hIcon
    21.    push rsi ;hInstance
    22.    push rbx    ;cbClsExtra & cbWndExtra
    23.    pushaddr WndProc  ;lpfnWndProc
    24.    push sizeof WNDCLASSEX;cbSize & style
    25.    invoke RegisterClassExA,esp ;addr WNDCLASSEX
    26.    mov eax,esi ;rsi = 400000h
    27.     shl esi,9 ;rsi = 400000h << 9 = CW_USEDEFAULT
    28.     invoke CreateWindowExA,0,edi,edi,WS_OVERLAPPED or WS_VISIBLE \
    29.    or WS_CAPTION or WS_SYSMENU,rsi,rsi,W,H,rbx,rbx,rax,rbx
    30.    lea edi,msg
    31. @@: invoke GetMessageA,edi,NULL,0,0
    32.    invoke DispatchMessageA,edi
    33.    jmp @b
    34. WinMain endp
    35. WndProc proc <5> hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    36. local ps:PAINTSTRUCT
    37. local hdc:HDC
    38. local Time:SYSTEMTIME
    39.    mov hWnd,rcx
    40.  
    41.    cmp edx,WM_CREATE
    42.    je wmCREATE
    43.    cmp edx,WM_PAINT
    44.    je wmPAINT
    45.    cmp edx,WM_DESTROY
    46.    je wmDESTROY
    47.    cmp edx,WM_TIMER
    48.    je wmTIMER
    49.    leave
    50.    jmp NtdllDefWindowProc_
    51. wmDESTROY:;уничтожаем таймер #10
    52.    invoke KillTimer,,TIMER_ID
    53.    invoke RtlExitUserProcess,NULL
    54. wmCREATE:invoke SetTimer,,TIMER_ID,1000,NULL
    55.    jmp wmBYE
    56. wmTIMER:lea ecx,Time
    57.    invoke GetLocalTime
    58.    movzx eax,Time.wSecond
    59.    movzx r9d,Time.wMinute
    60.    movzx r8d,Time.wHour
    61.    mov ecx,offset buffer
    62.    lea edx,fmtstr
    63.    invoke wsprintfA,,,,,rax
    64.    invoke InvalidateRect,hWnd,NULL,TRUE
    65.    jmp wmBYE
    66. wmPAINT:lea edx,ps
    67.    invoke BeginPaint;,hWnd
    68.    mov hdc,rax
    69.    invoke SetBkMode,eax,TRANSPARENT
    70.    mov ecx,offset lf
    71.    invoke CreateFontIndirect
    72.    mov hNewFont,rax
    73.    invoke SelectObject,hdc,eax
    74.    mov hOldFont,rax
    75.    mov r9d,offset buffer           ;line address
    76.    invoke TextOut,hdc,0,5,,8
    77.    invoke DeleteObject,hNewFont
    78.    invoke SelectObject,hdc,hOldFont
    79.    lea edx,ps
    80.    invoke EndPaint,hWnd
    81. wmBYE: leave
    82.    retn
    83. WndProc endp
    84. .data
    85. AppName  db 'Часы #7d',0
    86. FileName db "br_Rabbit3.cur",0
    87. fmtstr   db "%02d:%02d:%02d",0
    88. buffer   db 50 dup(?)
    89. hOldFont dq ?
    90. hNewFont dq ?
    91. lf LOGFONT <-64,0,0,0, FW_NORMAL, 0,0,0,0, OUT_STROKE_PRECIS, \
    92. CLIP_STROKE_PRECIS,DRAFT_QUALITY,VARIABLE_PITCH,"Fake Hope">
    93. end
    в аттаче asm-/exe-файлы, курсор и ttf-файл "Fake Hope", который придется установить в систему
     

    Вложения:

    • 00.zip
      Размер файла:
      17,1 КБ
      Просмотров:
      131
    Thetrik и mantissa нравится это.
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Немного старания и часы становятся полупрозрачными
    tut_07.jpg
    У окна расширенный стиль WS_EX_LAYERED, при инициализации окна вызывается функция SetLayeredWindowAttributes. Значение коэффициента прозрачности подбирается от 0 (полная прозрачность) до 255 (полная непрозрачность). Идея подсмотрена у Manhanter'a.
    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. WS_EX_LAYERED equ 80000h
    4. TIMER_ID = 10
    5. W = 225
    6. H = 95
    7. .code
    8. WinMain proc <20>
    9. local msg:MSG
    10.  
    11.        xor ebx,ebx
    12.        mov esi,IMAGE_BASE
    13.        mov edi,offset AppName
    14.        mov ecx,offset FileName
    15.        invoke LoadCursorFromFileA
    16.        push rax ;hIconSm
    17.        push rdi ;lpszClassName
    18.        push rbx
    19.        push COLOR_WINDOW
    20.        push rax ;hCursor
    21.        push rax    ;hIcon
    22.        push rsi ;hInstance
    23.        push rbx    ;cbClsExtra & cbWndExtra
    24.        pushaddr WndProc  ;lpfnWndProc
    25.        push sizeof WNDCLASSEX;cbSize & style
    26.        invoke RegisterClassExA,esp ;addr WNDCLASSEX
    27.        mov eax,esi ;rsi=400000h
    28.        shl esi,9 ;rsi=400000h << 9=CW_USEDEFAULT
    29.        invoke CreateWindowExA,WS_EX_LAYERED,edi,edi,WS_OVERLAPPED or WS_VISIBLE \
    30. or WS_CAPTION or WS_SYSMENU,rsi,rsi,W,H,rbx,rbx,rax,rbx
    31.        lea edi,msg
    32. @@: invoke GetMessageA,edi,NULL,0,0
    33.        invoke DispatchMessageA,edi
    34.        jmp @b
    35. WinMain endp
    36. WndProc proc <5> hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    37. local ps:PAINTSTRUCT
    38. local hdc:HDC
    39. local Time:SYSTEMTIME
    40.        mov hWnd,rcx
    41.        cmp edx,WM_CREATE
    42.        je wmCREATE
    43.        cmp edx,WM_PAINT
    44.        je wmPAINT
    45.        cmp edx,WM_DESTROY
    46.        je wmDESTROY
    47.        cmp edx,WM_TIMER
    48.        je wmTIMER
    49.        leave
    50.        jmp NtdllDefWindowProc_
    51. wmDESTROY:;уничтожаем таймер #10
    52.        invoke KillTimer,,TIMER_ID
    53.        invoke RtlExitUserProcess,NULL
    54. wmCREATE:invoke SetTimer,,TIMER_ID,1000,NULL
    55. ; Установка атрибута прозрачности
    56.        invoke SetLayeredWindowAttributes,hWnd,0,180, LWA_ALPHA
    57. wmTIMER:lea ecx,Time
    58.        invoke GetLocalTime
    59.        movzx eax,Time.wSecond
    60.        movzx r9d,Time.wMinute
    61.        movzx r8d,Time.wHour
    62.        mov ecx,offset buffer
    63.        lea edx,fmtstr
    64.        invoke wsprintfA,,,,,rax
    65.        invoke InvalidateRect,hWnd,NULL,TRUE
    66.        jmp wmBYE
    67. wmPAINT:lea edx,ps
    68.        invoke BeginPaint;,hWnd
    69.        mov hdc,rax
    70.        invoke SetBkMode,eax,TRANSPARENT
    71.        mov ecx,offset lf
    72.        invoke CreateFontIndirect
    73.        mov hNewFont,rax
    74.        invoke SelectObject,hdc,eax
    75.        mov hOldFont,rax
    76.        mov r9d,offset buffer           ;line address
    77.        invoke TextOut,hdc,0,5,,8
    78.        invoke DeleteObject,hNewFont
    79.        invoke SelectObject,hdc,hOldFont
    80.        lea edx,ps
    81.        invoke EndPaint,hWnd
    82. wmBYE: leave
    83.        retn
    84. WndProc endp
    85. .data
    86. AppName  db 'Часы #7f',0
    87. FileName db "br_Rabbit3.cur",0
    88. fmtstr   db "%02d:%02d:%02d",0
    89. buffer   db 50 dup(?)
    90. hOldFont dq ?
    91. hNewFont dq ?
    92. lf LOGFONT <-64,0,0,0,FW_NORMAL,0,0,0,0,OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,\
    93. DRAFT_QUALITY,VARIABLE_PITCH,"Fake Hope">
    94. end
    В аттаче asm-/exe-файлы, курсор и ttf-файл "Fake Hope", который придется установить в систему
     

    Вложения:

    • 00.zip
      Размер файла:
      17,2 КБ
      Просмотров:
      131
    DrochNaNoch и Thetrik нравится это.
  9. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Mikl___ нравится это.
  10. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Да семисигментный цифровой код вообще можно так нарисовать, 2 типа полигонов через FillPolygon заливать.
     
    Mikl___ нравится это.
  11. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    Спасибо, интересная идея
    единственное пожелание - глаз замечает легкое подрагивание перерисовки раз в секунду
    Есть ли метод убрать?
    и еще - зачем в коде на строке 3 дефиниция
    WS_EX_LAYERED equ 80000h

    ведь она есть в стандартном win64.inc в поставке MASM64
     
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    alex_dz, попробуйте закомментировать ее (3-ью строку), у меня компилятор ругнулся на неизвестную ему WS_EX_LAYERED. По поводу "убрать перерисовку раз в секунду", подумаю...
     
  13. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    Пасиб, видимо у нас разные masm64 SDK
    кстати, уже столько лет, а релиз Хатч так и не сделал ни разу...

    Очень занятной концепт, еще пару идей на подумать
    1) поверх всех окон - так и проситься (ведь оно полупрозрачое и просто обязано стать королем десктопа :) )
    2) более фунциольно наполненное - сделать
    а) count down timer
    b) reminder
    + wav балаламка на событие

    2а очень даже практично (использую прямо в хроме countdown timer на регулярной основе) но здесь более интересно - оффлайн и все такое

    upload_2022-11-20_15-10-38.png
     
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    alex_dz,
    не забудьте выложить сюда то, что у вас получится :)
     
  15. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    600
    Вот моя реализация, можно перетаскивать за любое место формы, цифры реализованы битмапами которые собраны в атласе. Чисто старый WinAPI, должен работать под Win95, но надо дистрибутив от мелкософта установить, на свежей 95-й будет ругаться на отсуствия MSVCR100.dll
    Не уверен что всё хорошо сделано, но пока так.
    Наверное лучше загружать черно-белую картинку из ресурсов и раскрашивать и потом загружать в HBITMAP. Ну или сразу в 32 цвете, тогда приложение будет больше весить, а хочется чтобы несколько кб.
    ЗЫ
    А забыл сказать, UASM и там мои библиотеки нужны, я кажется в теме ассемблер выкладывал.
     

    Вложения:

    • Watch.zip
      Размер файла:
      6,7 КБ
      Просмотров:
      127
    alex_dz и mantissa нравится это.
  16. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    может тогда лучше статичную линковку делать? не будет зависимостей на нестандарт и будут happy users :)
     
  17. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    600
    alex_dz, можно просто заменить в библиотеке _exit на ExitProcess, входящий параметр тот же, просто в функции _exit калбек на завершения срабатывает, но тут это не нужно. Пока не проверял на 95-й.
     
  18. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    То есть у вас из большой дллки MSVCR100.dll зависимость всего на 1 функцию?
    тогда точно надо от нее избавлятся
     
  19. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    600
    Как часики на плюсах сделать
    https://habr.com/ru/post/706954/
    По мне стрелочные часы, (аналоговый это не правильно, у нас всё равно эмуляция цифровых часов) лучше сделать на библиотеках, где поддерживают спрайты с прозрачностью и возможность произвольного вращения и масштабирования. OpenGL должен справиться, есть спрайт фона часов и стрелок(собственно спрайты стрелок и вращаем). Две кнопки сворачивания и закрытия, так же надо добавить свойство поверх всех окон.
    И можно использовать приложение по назначения, а не просто чтобы потренироваться.
     
  20. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Сорокалетний GDI это все поддерживает.

    Хотя, да, надо обязательно на qt писать (на петоне, конечно же, с биндингами к qt), а то шо это за часы. если файл весит всего 50к и памяти меньше гига жрет?.. :)
     
    Thetrik нравится это.