Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Технологии
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.10.2010, 18:24
Аватар для Fantomas_RUS
Fantomas_RUS Fantomas_RUS вне форума
Прохожий
 
Регистрация: 12.10.2010
Сообщения: 47
Репутация: 11
Вопрос Dll важный вопрос

Очень важно узнать как при помешении в dll формы и при выведении её в основной программе в режиме ShowModal, считать данные введённые пользователем в Edit и сохранить эти данные в переменной, которая в основной программе. Уже 2 дня мучаюсь по всякому, ни как не получаеться. Даже технологию не знаю. Учусь постепенно сам. Добрые люди, помогите....
Ответить с цитированием
  #2  
Старый 12.10.2010, 18:42
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Ну я думаю это делается так:
создаете функцию в библиотеке, которая будет возвращать string, и экспортируете ее (exports), а в результат самой функции как раз и вставляете то, что ввел человек в едит. В главной программе вызываете функцию из длл и результат этой функции записываете в нужную вам переменную... Надеюсь поняли что я имею ввиду.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #3  
Старый 12.10.2010, 21:56
Аватар для Fantomas_RUS
Fantomas_RUS Fantomas_RUS вне форума
Прохожий
 
Регистрация: 12.10.2010
Сообщения: 47
Репутация: 11
По умолчанию

Цитата:
Сообщение от v1s2222
Ну я думаю это делается так:
создаете функцию в библиотеке, которая будет возвращать string, и экспортируете ее (exports), а в результат самой функции как раз и вставляете то, что ввел человек в едит. В главной программе вызываете функцию из длл и результат этой функции записываете в нужную вам переменную... Надеюсь поняли что я имею ввиду.

Да понял. Но вот факт. При создании в 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  
Старый 12.10.2010, 22:05
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Глобальную переменную вставь в саму длл, а при изменение едита, дописывай / изменяй.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #5  
Старый 12.10.2010, 22:21
Аватар для Fantomas_RUS
Fantomas_RUS Fantomas_RUS вне форума
Прохожий
 
Регистрация: 12.10.2010
Сообщения: 47
Репутация: 11
По умолчанию

Цитата:
Сообщение от v1s2222
Глобальную переменную вставь в саму длл, а при изменение едита, дописывай / изменяй.


Если можно приведите код. Так как я пытался глобальную переменную вставлять и в Dll но форма её не видит которая с editom.
Ответить с цитированием
  #6  
Старый 12.10.2010, 22:43
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Извеняюсь, в самой длл писать не надо (надо или создать модуль новый), или писать в самой форме.
Объявить переменную, после var Form1: TForm1; S: String;
А потом к ней обращаться...
__________________
Помогаю за Спасибо
Ответить с цитированием
  #7  
Старый 12.10.2010, 22:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код длл:
Код:
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  
Старый 12.10.2010, 23:21
Аватар для Fantomas_RUS
Fantomas_RUS Fantomas_RUS вне форума
Прохожий
 
Регистрация: 12.10.2010
Сообщения: 47
Репутация: 11
Хорошо

Цитата:
Сообщение от lmikle
Код длл:
[code]
...
код вызова (импорт пропущен):
Код:
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;
Спасибо. Футбол закончиться обязательно попробую.

Последний раз редактировалось Fantomas_RUS, 12.10.2010 в 23:25.
Ответить с цитированием
  #9  
Старый 13.10.2010, 00:56
Аватар для Fantomas_RUS
Fantomas_RUS Fantomas_RUS вне форума
Прохожий
 
Регистрация: 12.10.2010
Сообщения: 47
Репутация: 11
По умолчанию

Код:
Result  := ShowModal = mrOK;

А какую функцию выполняет эта строчка? В result заносит Ok при режиме отображения окна ShowModal? Или возвращает boolean если нажата кнопка ok? но как она поймёт что я нажал кнопку OK?

Последний раз редактировалось Fantomas_RUS, 13.10.2010 в 00:59.
Ответить с цитированием
  #10  
Старый 13.10.2010, 01:02
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Нет. В result заносит true, если из функции вышли с установкой ModalResult в mrOK и False в любом другом случае.

Например, у тебя на форме 2 кнопки - OK и Отмена.
Устанавливаешь им св-во ModalResult в mrOK и mrCancel соответсвенно.
Тогда не надо вызывать close для закрытия окна. При нажатии на любую из них окно закроется автоматически в из функции showModal вернется значение св-ва ModalResult нажатой кнопки.
Ответить с цитированием
  #11  
Старый 13.10.2010, 17:20
Аватар для Fantomas_RUS
Fantomas_RUS Fantomas_RUS вне форума
Прохожий
 
Регистрация: 12.10.2010
Сообщения: 47
Репутация: 11
Вопрос

Цитата:
Сообщение от lmikle
Нет. В result заносит true, если из функции вышли с установкой ModalResult в mrOK и False в любом другом случае.

Например, у тебя на форме 2 кнопки - OK и Отмена.
Устанавливаешь им св-во ModalResult в mrOK и mrCancel соответсвенно.
Тогда не надо вызывать close для закрытия окна. При нажатии на любую из них окно закроется автоматически в из функции showModal вернется значение св-ва ModalResult нажатой кнопки.

Пытаюсь компилировать, а компилятор ругаеться на mrOK
Прилогаю фотки моей dll и формы к ней.
Изображения
Тип файла: jpg Сама Dll.jpg (83.8 Кбайт, 8 просмотров)
Тип файла: jpg Форма прикреплённая к Dll.jpg (80.6 Кбайт, 8 просмотров)
Ответить с цитированием
  #12  
Старый 13.10.2010, 19:12
Аватар для Fantomas_RUS
Fantomas_RUS Fantomas_RUS вне форума
Прохожий
 
Регистрация: 12.10.2010
Сообщения: 47
Репутация: 11
По умолчанию

Цитата:
Сообщение от Fantomas_RUS
Пытаюсь компилировать, а компилятор ругаеться на mrOK
Прилогаю фотки моей dll и формы к ней.

Нашел Controls в uses не хватало. Но теперь при обращении к функции после её вызова выскакивает ошибка типа ссылка на несушествующую область памяти
Когда обращение к Editam превращаю в коменты всё нормально. Видимо Форма при выходе из ShowModla удаляет данные Edita. Как быть?
Изображения
Тип файла: jpg Ошибка.jpg (84.2 Кбайт, 5 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter