1

Тема: Управління компонентами чужої форми

Доброго дня. Є бібліотека dll що підключена до головної програми.На головному вікні програми є  компонент у якого ComponentCount =4 але при звертанні із бібліотеки до субкомпонентів  видає помилки. як отримати доступ до цих субкомпонентів?

2

Re: Управління компонентами чужої форми

FindChildControl() а-ля FindComponent().

3

Re: Управління компонентами чужої форми

FindChildControl() , FindComponent()  видає помилку 'access violation atr adress...'

4 Востаннє редагувалося Torbins (08.06.2016 13:37:53)

Re: Управління компонентами чужої форми

По-перше багато речей можна робити за допомогою WinAPI. Треба просто посилати потрібні повідомлення та викликати функції. Приклади є в інтернеті. Мінуси цього варіанту у тому, що усе, чого не торкається WinAPI ви змінити не зможете. Тобто все, що не має стосунку до відображення на екрані та ще дещо.

По-друге для взаємодії з компонентами програми часто потрібно працювати з пам'яттю. Найпростіший приклад: ви хочете змінити текст в нащадку TGraphicControl. Для цього ви виділяєте пам'ять під рядок, і записуєте туди новий текст. Після цього ви якимось чином примушуєте контрол прочитати ваш рядок, скопіювати собі із нього текст і... після цього хтось має звільнити пам'ять з під непотрібного рядка. З нащадком TGraphicControl WinAPI вам не допоможе, але як тоді організувати роботу з пам'яттю? Зазвичай у таких випадках роблять так, щоб бібліотека могла підключитися до менеджера пам'яті основної програми. Після цього вона зможе досить вільно взаємодіяти з програмою, якщо скомпільована у тій же версії Делфі, за допомогою FindControl або RTTI.

Але найкращим варіантом взаємодії є третій: якщо програму скомпільовано з рантайм пакетами, то бібліотеку треба скомпілювати у тій же версії Делфі також з рантайм пакетами. Тоді бібліотека зможе робити з програмою взагалі усе що завгодно. Але програма має бути скомпільована з рантайм пакетами, а це трапляється рідко.

Усілякі спеціальні випадки типу наявності у програми скриптового двигуна, або спеціального АПІ для взаємодії, не розглядаємо, бо схоже, що це не ваш випадок.

Подякували: petro_maga, leofun012

5

Re: Управління компонентами чужої форми

petro_maga написав:

FindChildControl() , FindComponent()  видає помилку 'access violation atr adress...'

Це може бути наслідком того, що бібліотека та програма використовують різні менеджери пам'яті, або скомпільовані у різних версіях Делфі (див. другий абзац попереднього посту).

6

Re: Управління компонентами чужої форми

дякую за пораду, бібліотека і програма скомпільовані різними версіями delphi спробую в цьому напрямку