|
#1
|
||||
|
||||
Dll важный вопрос
Очень важно узнать как при помешении в dll формы и при выведении её в основной программе в режиме ShowModal, считать данные введённые пользователем в Edit и сохранить эти данные в переменной, которая в основной программе. Уже 2 дня мучаюсь по всякому, ни как не получаеться. Даже технологию не знаю. Учусь постепенно сам. Добрые люди, помогите....
|
#2
|
||||
|
||||
Ну я думаю это делается так:
создаете функцию в библиотеке, которая будет возвращать string, и экспортируете ее (exports), а в результат самой функции как раз и вставляете то, что ввел человек в едит. В главной программе вызываете функцию из длл и результат этой функции записываете в нужную вам переменную... Надеюсь поняли что я имею ввиду. Помогаю за Спасибо |
#3
|
||||
|
||||
Цитата:
Да понял. Но вот факт. При создании в dll формы, к ней присоединяеться её pas. Открываю в главной форме функцию dll, в которой прописаны такие строчки Код:
var FormE: TForm1; begin FormE:=Tform2.Create(AOwner); FormE.ShowModal; . . . При запуске открываеться окно в котором есть Edit. Так вот после ввода и нажатии кнопки ОК как передать данные введённые в Edit в главную или хотя бы чтоб Dll это увидел их. А так Dll не видит глобальную переменную которая описана в форме FormE. А при обращении из FormE к переменным которые прописаны в dll в моей функции компилятор выдаёт ошибку. Даже не знаю что делать... Последний раз редактировалось Fantomas_RUS, 12.10.2010 в 22:00. |
#4
|
||||
|
||||
Глобальную переменную вставь в саму длл, а при изменение едита, дописывай / изменяй.
Помогаю за Спасибо |
#5
|
||||
|
||||
Цитата:
Если можно приведите код. Так как я пытался глобальную переменную вставлять и в Dll но форма её не видит которая с editom. |
#6
|
||||
|
||||
Извеняюсь, в самой длл писать не надо (надо или создать модуль новый), или писать в самой форме.
Объявить переменную, после var Form1: TForm1; S: String; А потом к ней обращаться... Помогаю за Спасибо |
#7
|
|||
|
|||
Код длл:
Код:
function ShowMyDLLForm(var OutParam1 : Integer; var OutParam2 : String) : Boolean; begin With TForm1.Create(Nil) Do Begin Edit1.Text := IntToStr(outParam1); Edit2.Text := OutParam2; Result := ShowModal = mrOK; OutParam1 := StrToint(Edit1.Text); OutParam2 := Edit2.Text; Free; End; end; код вызова (импорт пропущен): Код:
var I : Integer; S : String; begin I := 5; S := 'call from main'; if ShowMyDLLForm(I,S) Then ShowMessage(Format('OK. New values is ''%d'' and ''%s''.',[I,S])) Else ShowMessage('Cancel'); end; |
#8
|
||||
|
||||
Цитата:
Последний раз редактировалось Fantomas_RUS, 12.10.2010 в 23:25. |
#9
|
||||
|
||||
Код:
Result := ShowModal = mrOK; А какую функцию выполняет эта строчка? В result заносит Ok при режиме отображения окна ShowModal? Или возвращает boolean если нажата кнопка ok? но как она поймёт что я нажал кнопку OK? Последний раз редактировалось Fantomas_RUS, 13.10.2010 в 00:59. |
#10
|
|||
|
|||
Нет. В result заносит true, если из функции вышли с установкой ModalResult в mrOK и False в любом другом случае.
Например, у тебя на форме 2 кнопки - OK и Отмена. Устанавливаешь им св-во ModalResult в mrOK и mrCancel соответсвенно. Тогда не надо вызывать close для закрытия окна. При нажатии на любую из них окно закроется автоматически в из функции showModal вернется значение св-ва ModalResult нажатой кнопки. |
#11
|
||||
|
||||
Цитата:
Пытаюсь компилировать, а компилятор ругаеться на mrOK Прилогаю фотки моей dll и формы к ней. |
#12
|
||||
|
||||
Цитата:
Нашел Controls в uses не хватало. Но теперь при обращении к функции после её вызова выскакивает ошибка типа ссылка на несушествующую область памяти Когда обращение к Editam превращаю в коменты всё нормально. Видимо Форма при выходе из ShowModla удаляет данные Edita. Как быть? |