Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер
Регистрация

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

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 14.01.2010, 07: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, 07:33   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,152
По умолчанию

--=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, 09: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 в 09:41.
--=SaNitinDG=- вне форума   Ответить с цитированием
Старый 14.01.2010, 09:29   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,152
По умолчанию

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

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

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
порты на Assemblere Dimon Assembler - Ассемблер 11 13.04.2010 17:36
Progress bar SKS Компоненты Delphi 10 15.08.2009 21:09
Progress Bar без рамки. Mitron Компоненты Delphi 5 21.01.2008 17:33
Progress Bar Alexander X Компоненты Delphi 2 17.12.2007 04:18


23:06.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.