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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение значений из DLL, ^^^^^^^^^^^^^^^^^^^ 
:(
    Опции темы
X-Vlad
  Дата 27.3.2004, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

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



Привет всем.

Вопрос.

Я в длл пишу функцию которая орабатывает большой обьем данных и посылат значения - в ProgressBar. Возможно в главной програме поставить ProgressBar и что-бы ета функция передавала значения обработки?

Т.е. Как получать текущие значения из длл?


Зарание благодарен.

Это сообщение отредактировал(а) X-Vlad - 27.3.2004, 14:33


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 27.3.2004, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



делай SendMessage из этой функции.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
X-Vlad
Дата 27.3.2004, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

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



<Spawn> можешь привести пример?
adv/76.gif


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 27.3.2004, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



сначала нужно определить свое сообщение, допустим:

Код
WM_PROGRESS = WM_USER + 10;


допустим в твоей функции есть цикл, тогда для каждой итерации цикла будет примерно такой код:

Код
for i := 0 to n do
begin
 //Какие то вычисления
 //Вычисляешь на каком этапе находится прогресс (Допустим это переменная Progress);
 //Отсылаешь данные главному окну
 SendMessage(MainHandle, WM_PROGRESS, 0, Progress);
end;


а в форме-приемнике сделай примерно следущий код:

Код
type
 TForm1 = class(TForm)
   ...
 private
   procedure OnProgress(var Message: TMessage); message WM_PROGRESS;
 public
   ...
 end;

procedure TForm1.OnProgress(var Message: TMessage);
begin
 //Выводишь куда нибудь Message.LParam
end;


Это сообщение отредактировал(а) <Spawn> - 27.3.2004, 14:51


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
X-Vlad
Дата 28.3.2004, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

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



Цитата
сначала нужно определить свое сообщение, допустим:


Код 
Код
WM_PROGRESS = WM_USER + 10;

- я неочень понял... sad.gif где ето определять?

может у тебя есть пример?


Зарание благодарен.


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 28.3.2004, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Объяви так
Код
const
 WM_PROGRESS = WM_USER  +10;


в Длл и в своей программе. Или же создай общий для них юнит и там определи, особенно если такое значение будет не одно.

Это сообщение отредактировал(а) <Spawn> - 28.3.2004, 11:35


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
p0s0l
Дата 28.3.2004, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



А можно посылать сообщения непосредственно прогресс-бару:
hwndPB - хэндл ProgressBar'а...
Код
 SendMessage(hwndPB, PBM_SETRANGE, 0, MAKELPARAM(0, 1000));
Это устанавливает диапазон значений прогресс-бара

Код
 SendMessage(hwndPB, PBM_SETPOS, 250, 0);

А это устанавливает тек. позицию. В итоге 250 от 1000 - это 1/4 прогресс-бара будет заполнена...



--------------------
С уважением, г-н Посол.
PM   Вверх
X-Vlad
Дата 29.3.2004, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

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



<Spawn> - спасибо. Работает.

p0s0l можно рабочий пример.... Я пробую так делать - выдает ошибки (незнает что такое -PBM_SETRANGE и PBM_SETPOS)



--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 29.3.2004, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Uses CommCtrl


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
X-Vlad
Дата 29.3.2004, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

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



p0s0l

Вот пробую писать в ДЛЛ так:

Код
unit zcompres1;

interface

Uses
sysutils,
classes,CommCtrl,windows;

procedure test;stdcall;

implementation

procedure test;
Var
i:integer;
begin
SendMessage(hwndPB, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
i:=0;
 repeat
  sleep(50);
  SendMessage(hwndPB, PBM_SETPOS, i, 0);
  i:=i+1;
 until i>101
end;

end.


Выдает ошибку:
Цитата
Undeclared identifier: 'hwndPB'




--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
RA
Дата 29.3.2004, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

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




Код

var
hwndPB :Handle;
..................

 function MainWnd: HWnd;
 begin
   Result := FindWindow( nil, 'Form1' );
 end;
..........

hwndPB := MainWnd;


Это сообщение отредактировал(а) RAdmin - 29.3.2004, 21:45
PM   Вверх
X-Vlad
Дата 29.3.2004, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

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



Скомпилировалось, но в програму значения непередает...


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
RA
Дата 30.3.2004, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

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



А ты в программе поставил обработку получаемых от DLL Месаджей ? biggrin.gif
PM   Вверх
X-Vlad
Дата 30.3.2004, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

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



Забыл.... withstupid.gif


спасибо.


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 30.3.2004, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



X-Vlad, hwndPB - это хэндл прогрессбара. 2 способа:
1.Либо передавай его в DLL через какую-нибудь функцию,
2. либо же ищи его сам.
Второй способ - на примере, приведенном выше, это будет так:
Код
var hwndPB : HWND;
begin
...
hwndPB := FindWindowEx(MainHandle, 0, 'TProgressBar', 0);
for i := 0 to n do
begin
//Какие то вычисления
//Вычисляешь на каком этапе находится прогресс (Допустим это переменная Progress);
//Отсылаешь данные прогресс-бару
SendMessage(hwndPB, PBM_SETPOS, Progress, 0);
end;

Я думаю, раз способ Spawn-а у тебя работает, то MainHandle у тебя не вызвал проблем, поэтому откуда его взять, говорить не буду...
RAdmin же написал, как найти твою форму (тот самый MainHandle), а не ПрогрессБар, поэтому и не работает...



--------------------
С уважением, г-н Посол.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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