Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2009, 02:55   #1
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию Вернуть несколько значений из модальной формы которая грузится из DLL ?

Вобщем закинул я MDI форму в DLL. На форме имеется 3 Edit'a и кнопка. Мене необходимо из этих Edit'в вернуть введенные значения в основную программу.
Я это пытался реализовать так: по нажатии кнопки на MDI форме вызываются функции которые бы возвращали значения Edit'в в главную форму. Но тут то и получилась у меня проблема, жму в проекте по кнопке, которая вызывает мои функции из DLL, первый раз MDI форма появляется, но нечего не возвращает из Edit'в. Жму второй раз - проект просто закрывается.
Код:
DLL:
var
  FAdd: TFAdd;    // MDI форма

  procedure ShowAddForm(Handle : THandle); export; stdcall;
  function ResEdit1 : String; export; stdcall;    //Функция для возврата значения из Edit1
  //Остальные функции для возврата пока не стал писать

...

function ResEdit1 : String;
begin
  Result := FAdd.Edit1.Text;
end;

procedure ShowAddForm(Handle : THandle);
begin
  Application.Handle := Handle;
  FAdd := TFAdd.Create(Application);
  FAdd.ShowModal;
  if FAdd.ModalResult = mrOK then
    ResEdit1;
  FAdd.Free;
end;

//---------------------//

exports
  ShowAddForm,
  ResEdit1;


Project:

...

  procedure ShowAddForm(Handle : THandle);external'Project1.dll';
  function ResEdit1 : String; external'Project1.dll';

...

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowAddForm(Handle);
Caption := ResEdit1;
end;
Вот собственно вопрос, как довести до ума то, что я написал, что бы MDI форма осталась в DLL и возвращала в главную форму(проект) значения из Edit'в ?
з.ы. старался объяснить ситуацию как можно точнее, но если чего не понятно в вопросе.....спросите я уточню, не надо пинать сразу в поиск(у меня от него уже в глазах двоится).
Будь проще и люди к тебе потянутся

Последний раз редактировалось spamer; 05.11.2009 в 20:07.
spamer вне форума Ответить с цитированием
Старый 05.11.2009, 08:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А можно глянуть на весь проект? Или он дюже великий?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.11.2009, 14:16   #3
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Вот еще одна проблема только что получилась. Раньше хоть как то форма показывалась, а шас ошибка вылетает.
Stilet, вот я прикрепил проект вместе с длл ,и туда положил скрин с новой ошибкой.
Вложения
Тип файла: rar Prog.rar (186.0 Кб, 7 просмотров)
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 05.11.2009, 19:07   #4
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Посмотри сам внимательнее
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowAddForm(Handle);
Caption := ResEdit1;
end;
ShowAddForm(Handle); - вызываешь модально форму (и зачем тогда MDI? ), закрываешь ее и уничтожаешь.

Caption := ResEdit1; - пытаешься из уничтоженной формы что-то получить.
s.Creator вне форума Ответить с цитированием
Старый 05.11.2009, 20:05   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Вообщем вот код, который не хочет работать:
Код:
DLL:
var
  FAdd: TFAdd;

procedure ShowAddForm(Handle : THandle); export; stdcall;
function ResEdit1 : String; export; stdcall;

implementation

{$R *.dfm}

function ResEdit1 : String;
begin
  Result := FAdd.Edit1.Text;
end;

procedure ShowAddForm(Handle : THandle);
begin
  Application.Handle := Handle;
  FAdd := TFAdd.Create(Application);
  FAdd.ShowModal;
  if FAdd.ModalResult = mrOK then
    ResEdit1;
end;

procedure TFAdd.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

...

exports
  ShowAddForm,
  ResEdit1;

Project:

...

  procedure ShowAddForm(Handle : THandle); external'Project1.dll';
  function ResEdit1 : String; external'Project1.dll';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := ResEdit1;
ShowAddForm(Handle);
end;

end.
з.ы. насчет MDI......вобщем перепутал я названия с модальной формой.

Народ, как его заставить работать?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 05.11.2009, 21:44   #6
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Например так попробуй
Код:
function ShowAddForm(Handle : THandle; var ResString : String): TModalResult;
begin
  Application.Handle := Handle;
  FAdd := TFAdd.Create(Application);
  FAdd.ShowModal;
  Result := FAdd.ModalResult
  if Result = mrOK then
    ResString := FAdd.Edit1.Text;
  FreeAndNil(FAdd);
end;
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s : string;
begin
  if ShowAddForm(Handle, s) = mrOK then
  Caption := s;
end;
s.Creator вне форума Ответить с цитированием
Старый 05.11.2009, 22:18   #7
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

s.Creator, все равно не хочет оно работать(((((((
Народ, ну у кого еще какие есть мысли по моему вопросу? Срочно надо, уже несколько дней пытаюсь сделать, а оно ниче не работает
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 05.11.2009, 23:22   #8
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Обращаю внимание - в случае передачи строк из dll необходимо присоединять модуль ShareMem и таскать BORLNDMM.DLL ( читайте примечание в dpr при создании проекта dll ).
Либо использовать FastMM4.
Prog.zip
s.Creator вне форума Ответить с цитированием
Старый 06.11.2009, 00:14   #9
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

s.Creator, спасибо.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MDI формы SlavaSH Общие вопросы Delphi 3 11.04.2014 21:16
Картинка на фоне MDI формы... Как? masterdela Общие вопросы Delphi 4 13.01.2009 14:41
Написать программу которая выводит таблицу значений функйии akimbaev Паскаль, Turbo Pascal, PascalABC.NET 1 01.10.2008 00:21
Ошибка создания MDI Child формы VVVadim Общие вопросы Delphi 7 05.06.2008 19:25
Закрытие формы MDIChild в MDI приложении Avalonix Общие вопросы Delphi 4 29.05.2008 16:45