Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ProgressBar 
:(
    Опции темы
Snipe
Дата 12.9.2005, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 20.8.2005
Где: Архангельск

Репутация: нет
Всего: нет



В библиотеке существует отдельная процедура (не важно какие действия она выполняет). Мне нужно чтобы
ход её работы показывался в ProgressBar. Пробую передать его свойство Position в качестве переменного входного параметра. Компилятор ругеатся что десскать это свойство нельзя передавать как var. Если передавать весь ProgressBar, то необходимо подключать ComCtrls отчего размер файла dll увеличивается в несколько раз. Что посоветуете?
PM MAIL ICQ   Вверх
Voyager
Дата 12.9.2005, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 2
Всего: 18



Я например делал так (упрощенно опишу):
В программе:
Код

const
  ID_PROGRESS = 101;
var
  hWin: HWND;//хендл главного окна
  LibHandle: THandle;
  MyFunction: function(hWin:HWND;hProgress:HWND):boolean;stdcall;
...

LibHandle := LoadLibrary('mydll.dll');
if LibHandle <> 0 then
   begin
        @MyFunction := getProcAddress (LibHandle, '_MyFunction');
        if Assigned ( MyFunction ) then
          begin
             MyFunction(hWin,GetDlgItem(hWin, ID_PROGRESS));
         end
       else
         begin
              MessageBox(hWin,'Function not found : _MyFunction','Error',MB_OK);
         end;
   end
else
   begin
         MessageBox(hWin,'DLL not found : mydll.dll'l,'Error',MB_OK);
   end;
freeLibrary ( LibHandle );

В библиотеке:
Код


uses
  Windows;

const
  PBM_SETRANGE        = WM_USER+1;
  PBM_SETPOS          = WM_USER+2;

...

//Установка минимальной и максимальной позиции ProgressBar
function Progress_SetRange(hProgress: HWND; nMinRange: wParam; nMaxRange: lParam): DWORD;
begin
 Result := SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(nMinRange, nMaxRange));
end;

//Устанавливаем позицию ProgressBar
function Progress_SetPos(hProgress: HWND; nNewPos: wParam): Integer;
begin
 Result := SendMessage(hProgress, PBM_SETPOS, nNewPos, 0);
end;

function ProcessMessages : Boolean;
const
 WM_QUIT  = $0012;
var
 Msg : TMsg;
begin
 Result := False;
 while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
  if Msg.Message = WM_QUIT then
  begin Exit end else begin
   TranslateMessage(Msg);
   DispatchMessage(Msg);
  end;
 end; Result := True;
end;

Function MyFunction(hWin:HWND;hProgress:HWND):boolean;stdcall;
var
  i:integer;
begin
//выполняешь действия с прогресс-баром
      Progress_SetRange(hProgress,0,1000);
//начало цикла
      Progress_SetPos(hProgress,i);
      ProcessMessages;
//конец цикла
end;
...
exports MyFunction name '_MyFunction';



Принцип думаю понятен, у меня все работало как надо, и размер библиотеки получался не более 100 кб (так как используется в основном WinAPI).

Это сообщение отредактировал(а) Voyager - 12.9.2005, 22:48
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0883 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.