Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


Получение значения прогрессбара из другой программы


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Муж Discorezzz
Бывалый




Зарегистрирован: 13.10.2006
Сообщения: 53
Откуда: СССР
СообщениеПт, 05-Сен-2008 16:44    Заголовок сообщения: Получение значения прогрессбара из другой программы
Цитата

Такое возможно?
Имя класса окна прогрессбара известно...
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеПт, 05-Сен-2008 17:19 
Цитата

Если заглянуть в исходники VCL, увидишь там такую штуку:

delphi:
  1. function TProgressBar.GetPosition: Integer;
  2. begin
  3.   if HandleAllocated then
  4.   begin
  5.     if F32BitMode then Result := SendMessage(Handle, PBM_GETPOS, 0, 0)
  6.     else Result := SendMessage(Handle, PBM_DELTAPOS, 0, 0)
  7.   end
  8.   else Result := FPosition;
  9. end;


Стоит попробовать сделать то же самое, но с нужным тебе прогрессбаром - вполне вероятно, что получится

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Discorezzz
Бывалый




Зарегистрирован: 13.10.2006
Сообщения: 53
Откуда: СССР
СообщениеПт, 05-Сен-2008 18:32 
Цитата

Благодарствую за подсказочку, всё пашет как часы :)
Накидал "летучку" получилось примерно так:
delphi:
  1.  
  2. procedure TForm1.TimerTimer(Sender: TObject);
  3. const
  4.   //from CommCtrl.pas
  5.   PBM_GETRANGE = WM_USER+7;
  6.   PBM_GETPOS = WM_USER+8;
  7. var
  8.   PW, ChW: HWND; //Parent & child windows
  9.   Poz, Max: Integer;
  10. begin
  11.   PW := FindWindow('<ИМЯ КЛАССА>', '<ИМЯ ОКНА>');
  12.   if PW <> 0 then
  13.   begin
  14.     ChW := FindWindowEx(PW, 0, '<ИМЯ КЛАССА ПРОГРЕССБАРА>', nil);
  15.     if ChW <> 0 then
  16.     begin
  17.       Max := SendMessage(ChW, PBM_GetRange, 0, 0);
  18.       Poz := Round(SendMessage(ChW, PBM_GETPOS, 0, 0) * (100 / Max));
  19.       PBar.Position := Poz;
  20.     end
  21.     else
  22.       PBar.Position := 0;
  23.   end
  24.   else
  25.     PBar.Position := 0;
  26. end;
  27.  
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100