powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование TStatusBar в вызовах DLL
25 сообщений из 37, страница 1 из 2
Использование TStatusBar в вызовах DLL
    #40074136
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Delphi 10.3.3 64-bit
Имею
- основная форма на ней TStatusBar
- открытие DLL (библиотека реализована с участием TInterface)
- передача TStatusBar в функцию DLL и изменение значение панели
- возникает ошибка памяти в момент повторного обращение к семейству Panels
или при окончательном закрытие окна.
Впечатление что Panels удален DLL ...... или что-то сделал не так

Код приложен прошу уточнить где рукожопость
Спасибо.

P.S. - ранее вопрос рассматривался, здесь локализовал ситуацию и максимально
упростил конструкции.
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074145
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HOME_X
- передача TStatusBar в функцию DLL и изменение значение панели

Не надо так делать. Для таких случаев есть понятный и простой шаблон Observer:
авторШаблон observer — это шаблон, в котором объект, называемый subject, ведет список зависимых объектов, называемых observers, и автоматически уведомляет их о любых изменениях состояния, обычно вызывая один из их методов.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
IObserver = interface
  procedure Notify(const AValue: что-то_там);
end;

ISubject = interface
  procedure AddObserver(const O: IObserver);
  procedure RemoveObserver(const O: IObserver);
end;



ISubject - живёт в dll и вызывает метод Notify у всех своих подписчиков, по мере необходимости.

IObserver - живёт в главном приложении, регистрируется в ISubject при создании формы, удаляется в деструкторе. В методе Notify обновляет TStatusBar формы (посылкой сообщения форме или через Syncronize).
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074157
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zedxxx

В методе Notify обновляет TStatusBar формы (посылкой сообщения форме или через Syncronize)


Здесь не совсем ясно взаимодействие основной формы и поля объекта на ней с методом Notify
Как передать и где хранить указатель на TStatusBar - если это посылка сообщения
Syncronize - будет полезна я дальнейшем, планирую сделать потоковый метод

Не могли бы в мой небольшой пример внедрить Вам механизм - буду весьма признателен !
Спасибо !
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074160
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XКод приложен прошу уточнить где рукожопость

В третьем пункте. TStatusBar нельзя передавать в DLL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074162
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X
zedxxx

В методе Notify обновляет TStatusBar формы (посылкой сообщения форме или через Syncronize)


Здесь не совсем ясно взаимодействие основной формы и поля объекта на ней с методом Notify
Как передать и где хранить указатель на TStatusBar - если это посылка сообщения
Syncronize - будет полезна я дальнейшем, планирую сделать потоковый метод

Не могли бы в мой небольшой пример внедрить Вам механизм - буду весьма признателен !
Спасибо !


Работаю со статьей
https://sourcemaking.com/design_patterns/observer/delphi
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074163
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

HOME_XКод приложен прошу уточнить где рукожопость

В третьем пункте. TStatusBar нельзя передавать в DLL.


Я хочу реализовать получение и визуализацию сообщения (промежуточного) из
DLL - как это реализовать ?
TStatusBar - это функциональный объекта именно для этого
- другого не предлагать
- панели не добавлять
(уже сделал)

На моем коде вложенном в сообщении можете провести корректировки ?

Спасибо
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074164
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HOME_X
Как передать и где хранить указатель на TStatusBar - если это посылка сообщения
Syncronize - будет полезна я дальнейшем, планирую сделать потоковый метод


Все параметры передаются в конструкторе IObserver и хранятся внутри него в приватных полях. Лучше всего передать туда хэндл главного окна и использовать механизм обмена сообщениями.

Главная форма в конструкторе создаёт и конфигурирует IObserver, регистрирует его в ISubject. Далее она получает нотификации от IObserver, а при закрытии себя, в деструкторе удаляет IObserver из ISubject.
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074167
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XЯ хочу реализовать получение и визуализацию сообщения (промежуточного) из
DLL - как это реализовать ?

Передавать можно интерфейсы или функциональные типы (в том числе function of object).

HOME_XНа моем коде вложенном в сообщении можете провести корректировки ?

На мой банковский счёт можете провести перечисление чтобы я сделал за тебя твою работу?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074186
Benten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

HOME_XЯ хочу реализовать получение и визуализацию сообщения (промежуточного) из
DLL - как это реализовать ?

Передавать можно интерфейсы или функциональные типы (в том числе function of object).

HOME_XНа моем коде вложенном в сообщении можете провести корректировки ?

На мой банковский счёт можете провести перечисление чтобы я сделал за тебя твою работу?

HOME_X, лови реализацию паттерна Observer, который предлагают ребята выше.
За основу взят код из твоего примера.
Реализация упрощенная, но работает хорошо, проверил.
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074188
Benten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Benten
HOME_X, лови реализацию паттерна Observer, который предлагают ребята выше.
За основу взят код из твоего примера.
Реализация упрощенная, но работает хорошо, проверил.
Чего-то архив с исходниками не прикладывается ...
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074189
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа !

zedxxx
Спасибо за целеуказание - принято к изучению и разработке

Benten
Отдельное спасибо за корректировку, рабочий пример ВСЕГДА
ценен, при любой теории и понимании сущности вещей.

Буду еще вопрошать...
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074290
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
старые добрые коллбэки и не надо никаких паттернов function FuncfromDLL(params..., StatusCallback: TProcWithStringParam)
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074349
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
старые добрые коллбэки и не надо никаких паттернов function FuncfromDLL(params..., StatusCallback: TProcWithStringParam)

Это плохой стиль программирования :)
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074351
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это работающий стиль программирования.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074370
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ziv-2014
Fr0sT-Brutal
старые добрые коллбэки и не надо никаких паттернов function FuncfromDLL(params..., StatusCallback: TProcWithStringParam)

Это плохой стиль программирования :)

Да, конечно, не хватает смузи, гироскутера и аджайла...
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074444
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
ziv-2014
пропущено...

Это плохой стиль программирования :)

Да, конечно, не хватает смузи, гироскутера и аджайла...

Нет, ты ошибаешься. Хватает всего. Но твой вариант не удобный и плохо расширяемый.
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074454
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014
Fr0sT-Brutal
пропущено...

Да, конечно, не хватает смузи, гироскутера и аджайла...

Нет, ты ошибаешься. Хватает всего. Но твой вариант не удобный и плохо расширяемый.

Нормально он расширяемый, если вместо коллбэка передавать указатель на структуру с подобными коллбэками, и параметры самих коллбэков - тоже структуры.
Старые плугины, таким образом, не будут видеть новых элементов, и всё будет ок.
Ну, в параметрах струкрур, передаваемых в коллбэки, можно добавить параметр "размер структуры" навсякий.
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074455
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ziv-2014
Нет, ты ошибаешься. Хватает всего. Но твой вариант не удобный и плохо расширяемый.

Вот так и появляются MVC Hello world-ы на три листа убористого кода
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074457
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zedxxx
Лучше всего передать туда хэндл главного окна и использовать механизм обмена сообщениями.

Если окно VCL, то хэндл проживет до первого RecreateWnd
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074485
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
zedxxx
Лучше всего передать туда хэндл главного окна и использовать механизм обмена сообщениями.

Если окно VCL, то хэндл проживет до первого RecreateWnd
Можно же сделать коллбэк GetMainWindowHandle и передать его в dll
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074488
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А потом трястись как бы эта DLL его не закэшировала или не вызвала того, что окно
пересоздаст. Наф-наф.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074498
Benten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fr0sT-Brutal
старые добрые коллбэки и не надо никаких паттернов function FuncfromDLL(params..., StatusCallback: TProcWithStringParam)
Дело вовсе не в паттернах, а в удобстве работы с интерфейсами, которые легко передавать из любой формы приложения в dll и(или) обратно. Но это уже лирика, главное, что цель достигнута.
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074548
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal, Dimitry Sibiryakov, ziv-2014, YuRock

Господа !

Ваши замечания весьма существенны и ценны
Приведите свой РЕАЛЬНЫЙ ПРИМЕР решения вопроса,
основываясь на первичном коде

Полагаю Все Ваши решения будут оценены и применены в зависимости
от уровня разработчиков и степени сложности кода и приложения


Повторное спасибо Benten - вижу Ваш вариант как конечный результат
своих изысканий.
Работаю с предложением zedxxx, как с первичным базовым вариантом.

Благодарен за понимание
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074632
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
Можно же сделать коллбэк GetMainWindowHandle и передать его в dll

Да уж :) легче потребовать, чтобы окно было специальное для сообщений, через AllocateHwnd. Но это мера административная, и никто не проверит, что вразрез с инструкциями туда не пихнули Form1.Handle.
...
Рейтинг: 0 / 0
Использование TStatusBar в вызовах DLL
    #40074644
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X
Fr0sT-Brutal, Dimitry Sibiryakov, ziv-2014, YuRock

Господа !

Ваши замечания весьма существенны и ценны
Приведите свой РЕАЛЬНЫЙ ПРИМЕР решения вопроса,
основываясь на первичном коде

Полагаю Все Ваши решения будут оценены и применены в зависимости
от уровня разработчиков и степени сложности кода и приложения


Разработчики понимают и оценивают и по советам. Код (если это разработчик, ага) он и сам напишет, главное на правильную идею навести.

А если совета недостаточно, а нужен только код - то это не разработчик, а копи-пастер.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование TStatusBar в вызовах DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]