Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уйти от Showmodal :) 
V
    Опции темы
Teleport
Дата 22.7.2008, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 3
Всего: 6



Вызвал форму методом ShowModal
Естественно не могу переключиться на главную форму, пока не закрою эту. Возможно ли переключиться на главную форму, не закрывая, вызванную методом ShowModal?

Form1.Show - в моем случае не прокатывает. Так как форму вызываю из dll.


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Rrader
  Дата 23.7.2008, 05:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Попробуй
Код

EnableWindow(Form1.Handle, True);



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Teleport
Дата 23.7.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 3
Всего: 6



вот код библиотеки, из которой я вызываю форму.
Код
library Dop_form1;

uses
  SysUtils,
  Classes, Unit1;

{$R *.res}

begin
 Form1 := TForm1.Create(nil);
  Form1.ShowModal;
 Form1.Free;
end.

либо  Form1.Free; как-то убирать, либо с Form1.ShowModal что-то делать  smile 

Это сообщение отредактировал(а) Teleport - 23.7.2008, 11:21


--------------------
user posted image
user posted image 
PM MAIL   Вверх
pseud
Дата 23.7.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



делай 
Form1.Show
а 
 Form1.Free 
пиши в другой процедурепиши, вызываемой из основного приложения

Это сообщение отредактировал(а) pseud - 23.7.2008, 11:27


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Felan
Дата 23.7.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: 2
Всего: 7



А еще лучше создавать форму только в том случае, если она еще не создана, а ври ей делать по событию DLL_PROCESS_DETACH.
Тогда показывать ее через Show можно будет хоть до посинения. smile


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
CodeMonkey
Дата 23.7.2008, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89





--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Teleport
Дата 23.7.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 3
Всего: 6



2 pseud - я только  Form1.Free  убираю, так сразу при вызове этой формы из dll ошибки лезут.  smile 
2 Felan - не совсем понял как это сделать-то  smile 
2 CodeMonkey сейчас  гляну, спасибо...


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Teleport
Дата 23.7.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 3
Всего: 6



2 CodeMonkey  на страничках понял только русские символы...
сложновато понять остальное... 


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Felan
Дата 24.7.2008, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: 2
Всего: 7



Цитата(Teleport @  23.7.2008,  14:15 Найти цитируемый пост)
2 Felan - не совсем понял как это сделать-то  smile 

Посмотри в DRKB.
У каждой длл есть "события", на которые можно повесить определенный функционал.
В частности DLL_PROCESS_DETACH, DLL_PROCESS_ATTACH и еще два, названия не помню. В хелпе все это найти можно без проблема.

Выглядит в простейшем случае примерно так:
Код

library UnitHeader;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  ShareMem,
  SysUtils,
  Classes,
  Dialogs,
  iaGlobalTypes,
  Windows,
  iaUnitHeaderMenu in 'units\iaUnitHeaderMenu.pas';

{$R *.res}

var
  gMenuItem: IiaFelansExpertsPlugin;

procedure CF_DLLProc(Reason: DWORD);
begin
  case Reason of
    DLL_PROCESS_ATTACH: begin
                          gMenuItem := TiaUnitHeaderMenu.Create( MENU_CAPTION );
                          ShowMessage('UnitHeader process attached');
                        end;
    DLL_PROCESS_DETACH: begin
                          FreeAndNil( gMenuItem );
                          ShowMessage('UnitHeader process detached');
                        end;
  end;
end;

function GetPliginInterface(): IiaFelansExpertsPlugin; stdcall;
begin
  Result := gMenuItem;
  ShowMessage('GetPliginInterface - passed in UnitHeader');
end;

exports
  GetPliginInterface name 'GetPliginInterface';

begin
  if @DllProc = nil then
    begin
      DllProc := @CF_DLLProc;
      CF_DLLProc( DLL_PROCESS_ATTACH);
    end;
end.



--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
morpheyushka
Дата 24.7.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: 3
Всего: 8



Цитата(Teleport @  23.7.2008,  12:15 Найти цитируемый пост)
2 pseud - я только  Form1.Free  убираю, так сразу при вызове этой формы из dll ошибки лезут. 

Попробуй на OnClose повесить метод Free:
Код

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


Ну а вызывай естественно методом Show


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
Teleport
Дата 25.7.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 3
Всего: 6



да, все получилось smile
Выкладываю исходник, в котором все решено. Может кто поиском на форуме найдет smile

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  dll_Form.rar 6,97 Kb


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Teleport
Дата 25.7.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 3
Всего: 6



всем большое спасибо)))))

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  dll_Form.rar 6,97 Kb


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Akella
Дата 25.7.2008, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Код

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  FreeAndNil(Form1);//так лучше
end;

PM MAIL   Вверх
pseud
Дата 25.7.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



Цитата(Akella @  25.7.2008,  16:11 Найти цитируемый пост)
FreeAndNil(Form1);//так лучше


Akella, что-то мне подсказывает что не стоит. 
ведь мы указали уже 
Код

Action := caFree;

дальше объект уж удалиться


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Teleport
Дата 26.7.2008, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 3
Всего: 6



2 Akella - почему лучше?? Подробней можно?  smile 


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0606 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.