![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Код:
program Project1; uses Windows, Messages; const WndClass = 'TWinWnd'; WndCaption = ''; ProgBrID = 1; PBS_MARQUEE = $08; PBM_SETMARQUEE = WM_USER+10; var Wc: TWndClassEx; Wnd: HWND; Msg: TMsg; ProgBr: hwnd; function WindowProc( Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall; begin Result:=0; case Msg of WM_DESTROY: begin PostQuitMessage( 0 ); Result := 0; Exit; end; else Result := DefWindowProc( Wnd, Msg, wParam, lParam ); end; end; begin with Wc do begin cbSize := SizeOf( Wc ); style := CS_HREDRAW or CS_VREDRAW; lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := hInstance; hIcon := LoadIcon( 0, IDI_APPLICATION ); hCursor := LoadCursor( 0, IDC_ARROW ); hbrBackground := COLOR_WINDOW; lpszMenuName := nil; lpszClassName := WndClass; end; RegisterClassEx( Wc ); Wnd := CreateWindowEx( 0, WndClass, WndCaption, WS_OVERLAPPEDWINDOW, 10, 10, 300, 100, 0, 0, hInstance, nil ); ProgBr := CreateWindowEx( WS_EX_CLIENTEDGE, 'PROGRESS_CLASS', '', WS_VISIBLE, 10, 10, 270, 20, Wnd, ProgBrID, hInstance, nil ); SendMessage( ProgBr, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 ); SetWindowLong (ProgBr, GWL_STYLE, (GetWindowLong (0, GWL_STYLE) or PBS_MARQUEE)); SendMessage(ProgBr,PBM_SETMARQUEE, 1, 50); ShowWindow( Wnd, SW_SHOWNORMAL ); while GetMessage( Msg, 0, 0, 0 ) do begin TranslateMessage( Msg ); DispatchMessage( Msg ); end; Halt( Msg.wParam ); end. Почему-то мой ProgressBar не отображает на форме... В чем причина?. В общем должно быть как в Неро. Бегать полоска туда-сюда. |
#2
|
||||
|
||||
![]() Потому что нет окна с классом 'PROGRESS_CLASS'
Код:
PROGRESS_CLASS = 'msctls_progress32'; ...сказал, и загрустил от бесспорной своей правоты |
#3
|
|||
|
|||
![]() Что-то не выходит у меня( Все равно не отображает. Может вы выложите готовый проект?
|
#4
|
||||
|
||||
![]() Код:
InitCommonControls; .... .... PrgBar := CreateWindowEx( WS_EX_CLIENTEDGE, PROGRESS_CLASS, '', WS_VISIBLE or WS_CHILD, 10, 10, 270, 20, handle, 0, hInstance, nil ); Он у тебя должен был отображаться, но не в родительском окне, а в виде еще одного окна. ...сказал, и загрустил от бесспорной своей правоты |
#5
|
|||
|
|||
![]() У меня выходит просто пустое окно.
|
#6
|
||||
|
||||
![]() Код:
SetWindowLong (ProgBr, GWL_STYLE, (GetWindowLong (0, GWL_STYLE) or PBS_MARQUEE)); ![]() Код:
SetWindowLong (ProgBr, GWL_STYLE, (GetWindowLong (ProgBr, GWL_STYLE) or PBS_MARQUEE)); ...сказал, и загрустил от бесспорной своей правоты Последний раз редактировалось 0nni, 02.10.2009 в 16:01. |
#7
|
|||
|
|||
![]() Код:
program Project1; uses Windows, Messages; {$R com_ctrl.res} const WndClass = 'TWinWnd'; WndCaption = ''; ProgBrID = 1; PBS_MARQUEE = $08; PBM_SETMARQUEE = WM_USER+10; var Wc: TWndClassEx; Wnd: HWND; Msg: TMsg; ProgBr: hwnd; function WindowProc( Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): LRESULT; stdcall; begin case Msg of WM_DESTROY: begin PostQuitMessage( 0 ); Result := 0; Exit; end; else Result := DefWindowProc( Wnd, Msg, wParam, lParam ); end; end; begin with Wc do begin cbSize := SizeOf( Wc ); style := CS_HREDRAW or CS_VREDRAW; lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := hInstance; hIcon := LoadIcon( 0, IDI_APPLICATION ); hCursor := LoadCursor( 0, IDC_ARROW ); hbrBackground := COLOR_WINDOW; lpszMenuName := nil; lpszClassName := WndClass; end; RegisterClassEx( Wc ); Wnd := CreateWindowEx(0, WndClass, WndCaption, WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX, 10, 10, 300, 130, 0, 0, hInstance, nil ); ProgBr := CreateWindowEx( 0, 'msctls_progress32', '', WS_POPUP or WS_VISIBLE, 20, 40, 100, 20, wnd, 0, hinstance, nil ); SetWindowLong (ProgBr, GWL_STYLE, (GetWindowLong (ProgBr, GWL_STYLE) or PBS_MARQUEE)); SendMessage(ProgBr,PBM_SETMARQUEE, 1, 10); ShowWindow( Wnd, SW_SHOWNORMAL ); while GetMessage( Msg, 0, 0, 0 ) do begin TranslateMessage( Msg ); DispatchMessage( Msg ); end; Halt( Msg.wParam ); end. И еще один нюанс. Как сделать так, чтобы окно прогресс бара принадлежало главному? А то получается так что окно можно таскать, а прогресс не лежит на нем и стоит на месте. Последний раз редактировалось Muxa, 03.10.2009 в 08:21. |
#8
|
||||
|
||||
![]() WS_POPUP or WS_VISIBLE исправь на WS_CHILD or WS_VISIBLE
WS_CHILD - стиль дочернего окна Почитай немного теории по винапи, вмне в свое время помогла "Азбука программирования на WinApi" и Program Files\Common Files\borland\MSHelp\WIN32.HLP - не забудь про него. ...сказал, и загрустил от бесспорной своей правоты |
#9
|
|||
|
|||
![]() Все получилось. Оказывается решение было таким простым
![]() |