Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];




Вниз

ProgressBar на API 


ogu   (2001-11-25 22:23) [0]

Здравтвуйте мастера!
Как создать ProgressBar (Gauge) чисто на API без использования Forms и VCL? Если такое возможно то пожалуйста пример!



Adder   (2001-11-26 03:17) [1]

Ну, например, так :

program Timer;
uses
Windows,
Messages,
commctrl;
Var Tim:Word;
hProgressBarWnd:HWND;
MaxPos,MinPos:WORD;

function MyWndProc(Window:HWND;Mess:word;
WParam:word;LParam:LongInt):LongInt;stdcall;
begin
case Mess of
WM_CREATE:
begin
hProgressBarWnd:=CreateWindow("msctls_progress","",
WS_CHILD+WS_VISIBLE,
10,75,150,20,window,0,HInstance,nil);
SendMessage(hProgressBarWnd, PBM_SETRANGE,0,MAKELPARAM(MinPos,MaxPos));
SendMessage(hProgressBarWnd,PBM_SETSTEP,1,0);
SendMessage(hProgressBarWnd,PBM_SETPOS,0,0);
Result:=0;
end;
WM_DESTROY:
begin
//Удаляем таймер
KillTimer( Window, 1 );
PostQuitMessage(0);
Result:=0
end;
WM_TIMER:
begin
SendMessage(hProgressBarWnd, PBM_STEPIT, 0, 0);
Result:=0
end;
else Result:=DefWIndowProc(Window,Mess,WParam,LParam)
end;
end;

var
wc:TWndClass;
wnd:HWND;
Msg:TMsg;

PollingDelay:integer=500; //500 - интервал 0.5 сек

begin
//Регистрация класса окна
wc.style:=CS_HREDRAW+CS_VREDRAW;
wc.lpfnWndProc:=@MyWndProc;
wc.cbClsExtra:=0;
wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(THandle(nil),IDI_APPLICATION);
wc.hCursor:=LoadCursor(THandle(nil),IDC_ARROW);
wc.hbrBackground:=COLOR_BTNFACE+1;//COLOR_WINDOW+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:="MyWndClass";

if (RegisterClass(wc)=0) then exit;

MaxPos:=100;
MinPos:=0;
//создаем окно
wnd:=CreateWindow("MyWndClass","Таймер",
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,
0,0,HInstance,nil);
//Устанавливаем таймер
SetTimer( Wnd, 1, PollingDelay, nil );
//показываем окно
ShowWindow(wnd,SW_RESTORE);
//ShowWindow(hProgressBarWnd,SW_RESTORE);
UpdateWindow(wnd);
//UpdateWindow(hProgressBarwnd);

//начинаем тривиальный цикл сообщений
while GetMessage(Msg,0,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg)
end
end.



Adder   (2001-11-26 03:19) [2]

ps На таймер вешать не обязательно - это просто для примера :)



Adder   (2001-11-26 03:30) [3]

Извиняюсь за вот эти излишества :) Забыла стереть :)))
//ShowWindow(hProgressBarWnd,SW_RESTORE);
//UpdateWindow(hProgressBarwnd);



LLL   (2001-11-28 21:04) [4]

WinMain ?



ogu   (2001-11-28 22:16) [5]

Все замечательно, большое спасибо!




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.014 c
1-90268           Zuvom                 2002-01-09 03:40  2002.01.28  
Ошибка Delphi 6


14-90375          Det                   2001-12-04 19:51  2002.01.28  
IP


14-90351          fliz                  2001-11-28 17:36  2002.01.28  
кто по сколько часов в день программировать способен?


7-90397           Aelter                2001-10-14 14:31  2002.01.28  
Пользовательские настройки шрифтов


4-90437           LLL                   2001-11-24 14:01  2002.01.28  
модальное окно, которое при этом не является диалоговым