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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как из DLL можно управлять ProgressBar'ом? Даже не могу сформулировать вопрос! 
:(
    Опции темы
Monty
  Дата 17.9.2003, 03:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


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

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



Такая во проблемма ..... DLL еще нет, но собираюсь написать ........

В самой программе есть ProgressBar и надо сделать так чтоб DLL управляла этим ProgressBar'ом .... что мне передать ей и как им управлять из неё (из DLL) .......... при этом именно DLL должна передавать значение ProgressBar'у т.е. управлять им, а не программа.

может это будет выглядеть так?

mov eax, offset ProgressBar.Position
mov PosAddr, eax

а потом это передать DLL'ке ... чтоб она могла изменять значение hmmm.gif .... сработает? А какие есть еще предложение? Можно попроще? .... Именно она должна двигать полоску ПрогрессБара! ....... А DLL'ка примерно выполняет копирование файла по блокам (как в примере Дельфи) ... вот и надо сделать чтоб она в этом цикле изменяла значение ПрограссБара

ЗЫ не могу сегодня собраться с мыслями smile.gif .... уж извените меня wink.gif


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
<Spawn>
Дата 17.9.2003, 05:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Что бы изменять значение ProgressBar-а из DLL можно, например, использовать сообщения. Используй какое нить значение больше WM_USER. Ну например:

Код
const
WM_PROGRESSUPDATE=WM_USER+100;

в ДЛЛ:

var
mHandle:THandle;
ProgressValue:integer;

{на DLL_PROCESS_ATACH находишь хендл твоего окна}
mHandle:=FindWindow('TForm1',nil);

for i:=0 to n do
begin
 {Операции в цикле}
 ProgressValue:={Вычисляешь значение ProgressBar-а}
 PostMessage(mHandle,WM_PROGRESSUPDATE,0,ProgressValue);
end;

в твоей программе:

TForm1=class(TForm)
  public
   ...
   procedure UpdateProgress(var Msg:TMessage);message WM_PROGRESSUPDATE;
   ...
  end;


procedure UpdateProgress(var Msg:TMessage);
begin
ProgressBar1.Position:=Msg.lParam;
end;



Если же хочется передеть ДЛЛ - ке ссылку на экземпляр твоего ProgressBar-а, то такое не выйдет, разве что использовать Борландовские пэкэйджи.

Это сообщение отредактировал(а) <Spawn> - 17.9.2003, 05:46


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


Эксперт
****


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

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



А почему нельзя просто хэндл окна(прогрессбара) передать?
Соотв. посылать окошку PBM_SETPOS или PBM_STEPIT
Ну или, если длл на дельфи, то почему нельзя передать (var ProgressBar: TProgressBar)?
А в длл делать с ним чего хочешь...


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Baa
Дата 17.9.2003, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



<Spawn>, зачем изобретать велосипед?
Сообщения для установки позиции в прогрессбаре существуют smile.gif


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
<Spawn>
Дата 17.9.2003, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Baa Ну я не спец еще smile.gif Про сообщения прогресс бара не знал. Блин, начитался в одной книге про не возможное использование классов в ДЛЛ и подумал, что экземпляр класса в ДЛЛ, загружаемую в свое приложение, передать нельзя. Проверил - все работает.

Это сообщение отредактировал(а) <Spawn> - 17.9.2003, 12:33


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


Advanced Lamer
****


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

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



Спасибо <Spawn> и Baa smile.gif .......... теперь все понятно и как всегда все очень просто smile.gif

ЗЫ Я это буду применять в двух вариантах:
1) EXE (Asm) - DLL (Delphi)
2) EXE (Delphi) - DLL (Любой язык)
Так что идеально подходят сообщения ;)


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
Monty
  Дата 22.9.2003, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


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

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



Возник один нюанс hmmm.gif
Цитата
Соотв. посылать окошку PBM_SETPOS или PBM_STEPIT

таких констант в Дельфи просто нет, т.е. в Messages нет таких констант hmmm.gif ... может просто скажите ихнии значения?


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
<Spawn>
Дата 22.9.2003, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



А кто сказал что они там будут? smile.gif Все делается просто:
1) Ставишь на форму ProgressBar;
2)Видишь что он юзает модуль ComCtrls;
3)Пытаешься найти в этом модуле нужные константы.
4)Видишь, что их там нет. Тогда смотришь какие модули используют данный модуль, ища что нить близкое по смыслу. Ага вот оно - CommCtrl.
5) Опять поиском ищешь константы. Вот и они:
Код
 {$EXTERNALSYM PBM_SETPOS}
 PBM_SETPOS              = WM_USER+2;
 {$EXTERNALSYM PBM_STEPIT}
 PBM_STEPIT              = WM_USER+5;


Это сообщение отредактировал(а) <Spawn> - 22.9.2003, 07:49


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


Advanced Lamer
****


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

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



Цитата
А кто сказал что они там будут? smile.gif Все делается просто:
1) Ставишь на форму ProgressBar;
2)Видишь что он юзает модуль ComCtrls;
3)Пытаешься найти в этом модуле нужные константы.
4)Видишь, что их там нет. Тогда смотришь какие модули используют данный модуль, ища что нить близкое по смыслу. Ага вот оно - CommCtrl.
5) Опять поиском ищешь константы. Вот и они:
Код
 {$EXTERNALSYM PBM_SETPOS}
 PBM_SETPOS              = WM_USER+2;
 {$EXTERNALSYM PBM_STEPIT}
 PBM_STEPIT              = WM_USER+5;

Спасибо ..... не знал smile.gif .... копался в Messages, но в следующий раз запущю поиск в каталоге дельфи на *.pas и текст нужной константы smile.gif

Это сообщение отредактировал(а) Monty - 22.9.2003, 19:09


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

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

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

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

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


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

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


 




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


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

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