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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2010, 06:21   #1
--=SaNitinDG=-
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 61
Сообщение Не работает Progress Bar на Assemblere

Всем Hi! Учу Ассемблер, хочу научиться делать Progress Bar на Assemblere
почитал тутор от iczelion'a, по созданию Progress Bara на Assemblere, но он у меня не получаться, он не хочет работать. Думаю это и за того что в его тутореале окно делалось при помощи RegisterClassEx, а я делаю окно через DialogBoxParam может я и ошибаюсь.

Вот исходник мой ProgressBar
Код:
.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include ProgressBar.inc

.code

start:

	invoke GetModuleHandle,NULL
	mov		hInstance,eax

   invoke InitCommonControls
	invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
	invoke ExitProcess,0
 

DlgProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

	mov		eax,uMsg
	.if eax==WM_INITDIALOG

	.elseif eax==WM_COMMAND

	
	;Вот тут начала управлением  Progress Bar 
	.elseif  eax==WM_CREATE
		invoke CreateWindowEx,NULL,ADDR ProgressClass,NULL,\
     	      WS_CHILD+WS_VISIBLE,100,\
          	 200,300,20,hWnd,IDC_PROGRESS,\  ; ID 
	           hInstance,NULL
		mov hwndProgress,eax
		mov eax,1000
		mov CurrentStep,eax
		shl eax,16
		invoke SendMessage,hwndProgress,PBM_SETRANGE,0,eax
		invoke SendMessage,hwndProgress,PBM_SETSTEP,10,0
	
;End  Progress Bar 

	.elseif eax==WM_CLOSE
		invoke EndDialog,hWnd,0
	.else
		mov		eax,FALSE
		ret
	.endif
	mov		eax,TRUE
	ret

DlgProc endp

end start
Что я делаю не так по идеи он должен работать подскажите.
Код:
include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
include gdi32.inc

includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib
includelib gdi32.lib


DlgProc			PROTO	:HWND,:UINT,:WPARAM,:LPARAM
;WinMain PROTO	:HWND,:UINT,:WPARAM,:LPARAM
.const

IDD_DIALOG1			equ 101

IDC_PROGRESS	equ 1


;#########################################################################
.data
ProgressClass 	db "msctls_progress32",0


.data?

hInstance			dd ?
hwndProgress	dd ?
hwndStatus	dd ?

;#########################################################################
Опыт не пропьешь если он есть=)))
--=SaNitinDG=- вне форума Ответить с цитированием
Старый 14.01.2010, 06:33   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

--=SaNitinDG=-
Диалог тем и отличается от окна, что там обрабатывается WM_INITDIALOG а не WM_CREATE
перенеси из WM_CREATE в WM_INITDIALOG
текст "invoke CreateWindowEx,NULL,ADDR ProgressClass,NULL,\
WS_CHILD+WS_VISIBLE,100,\
200,300,20,hWnd,IDC_PROGRESS,\ ; ID
hInstance,NULL
mov hwndProgress,eax"
а запуск прогресс бара организуй по нажатию на клавишу, а далее движение через WM_TIMER
Mikl___ вне форума Ответить с цитированием
Старый 14.01.2010, 08:25   #3
--=SaNitinDG=-
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 61
По умолчанию

Подправил изменил, но всё ровно что - то не пашет, может теперь дело SendMessage вот посмотрите
Вот исправил
Код:
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

	mov		eax,uMsg
	.if eax==WM_INITDIALOG
	
	invoke CreateWindowEx,NULL,ADDR ProgressClass,NULL,\
     	    WS_CHILD+WS_VISIBLE,100,\
          	200,300,20,hWin,IDC_PROGRESS,\
	          hInstance,NULL
		mov hwndProgress,eax
		mov eax,1000
		mov CurrentStep,eax
		shl eax,16
		
		invoke SendMessage,hwndProgress,PBM_SETRANGE,0,eax
		invoke SendMessage,hwndProgress,PBM_SETSTEP,10,0

		invoke SetTimer,hWin,IDC_TIMER,100,NULL
		mov TimerID,eax
	.elseif uMsg==WM_DESTROY
		invoke PostQuitMessage,NULL
		.if TimerID!=0
			invoke KillTimer,hWin,TimerID
		
	.elseif uMsg==WM_TIMER
		invoke SendMessage,hwndProgress,PBM_STEPIT,0,0
		sub CurrentStep,10
		.if CurrentStep==0
			invoke KillTimer,hWin,TimerID
			mov TimerID,0
			invoke SendMessage,hwndStatus,SB_SETTEXT,0,addr Message
			invoke MessageBox,hWin,addr Message,addr AppName,MB_OK+MB_ICONINFORMATION
			invoke SendMessage,hwndStatus,SB_SETTEXT,0,0
			invoke SendMessage,hwndProgress,PBM_SETPOS,0,0
		.endif
	.else
		invoke DefWindowProc,hWin,uMsg,wParam,lParam		
		ret
	.endif
	xor eax,eax
	ret
	
	
	.elseif eax==WM_COMMAND


	.elseif eax==WM_CLOSE
		invoke EndDialog,hWin,0
	.else
		mov		eax,FALSE
		ret
	.endif
	mov		eax,TRUE
	ret

DlgProc endp
Код:
.const

IDD_DIALOG1			equ 101

IDC_PROGRESS	equ 1
IDC_TIMER		equ 3
IDC_STATUS     equ 4

;#########################################################################
.data
ProgressClass 	db "msctls_progress32",0

TimerID		dd 0
AppName  		db "Common Control Demo",0
Message		db "Finished!",0
.data?

hInstance			dd ?


hwndProgress	dd ?
hwndStatus	dd ?
Мне нужно чтобы Progress Bar, сразу работал при запуске в окне.
Опыт не пропьешь если он есть=)))

Последний раз редактировалось --=SaNitinDG=-; 14.01.2010 в 08:41.
--=SaNitinDG=- вне форума Ответить с цитированием
Старый 14.01.2010, 08:29   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

--=SaNitinDG=-
Прикрепи файл с полным исходным текстом, RC-файл и получившийся EXE
Так будет быстрее
Mikl___ вне форума Ответить с цитированием
Старый 14.01.2010, 08:39   #5
--=SaNitinDG=-
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 61
По умолчанию

Вот вроде прикрепился
Вложения
Тип файла: rar 1.rar (4.5 Кб, 14 просмотров)
Опыт не пропьешь если он есть=)))
--=SaNitinDG=- вне форума Ответить с цитированием
Старый 14.01.2010, 11:32   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

--=SaNitinDG=-
лови
Вложения
Тип файла: rar progress.rar (5.4 Кб, 73 просмотров)
Mikl___ вне форума Ответить с цитированием
Старый 14.01.2010, 12:19   #7
--=SaNitinDG=-
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 61
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
--=SaNitinDG=-
лови
Спасибо!!!
Круто, ты даже его цвет разукрасил. А можно его как нибудь под проект для RadASM, переделать чтобы было легче разбираться в нём. Или хотя бы файл .rc к нему или .RES выложи пожалуйста.
Опыт не пропьешь если он есть=)))

Последний раз редактировалось --=SaNitinDG=-; 14.01.2010 в 12:23.
--=SaNitinDG=- вне форума Ответить с цитированием
Старый 14.01.2010, 12:35   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

--=SaNitinDG=-
>Или хотя бы файл .rc к нему или .RES выложи пожалуйста.
Я в RadASM не работал, не знаю, но синтаксис и там и там masm'овский
rsrc.rc -- аналог твоего файла 1dlg.rc в папке Res
Mikl___ вне форума Ответить с цитированием
Старый 15.01.2010, 04:56   #9
--=SaNitinDG=-
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 61
По умолчанию

Цитата:
Я в RadASM не работал, не знаю, но синтаксис и там и там masm'овский
rsrc.rc -- аналог твоего файла 1dlg.rc в папке Res
Респект разберемся. Я смотрю там много макросов использоваться пока вопросов нет но как будут спрошу.
Опыт не пропьешь если он есть=)))
--=SaNitinDG=- вне форума Ответить с цитированием
Старый 15.01.2010, 05:07   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

--=SaNitinDG=-
>Я смотрю там много макросов использоваться
Все использованные макросы расписаны в "progress.inc"
Mikl___ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
порты на Assemblere Dimon Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 13.04.2010 17:36
Progress bar SKS Компоненты Delphi 10 15.08.2009 21:09
Progress Bar без рамки. Mitron Компоненты Delphi 5 21.01.2008 16:33
Progress Bar Alexander X Компоненты Delphi 2 17.12.2007 03:18