Текущий архив: 2009.01.25;
Скачать: CL | DM;
Вниз
DLL немодальный вызов, MDI Найти похожие ветки
← →
IntruderLab (2008-03-13 16:00) [40]Мне параметром ему хендл главной формы присваивать?
← →
Сергей М. © (2008-03-13 16:07) [41]О боже)...
Ты в состоянии средствами отладчика отсановиться на строчкеResult := LongInt(TfrmTest.Create(Application);
и посмотреть, чему равно значения Application.MainForm, Application.MainForm.Visible, Application.MainForm.FormStyle ?
← →
IntruderLab (2008-03-13 16:12) [42]В состоянии :) Application = nil так что я думаю, что все остальное тоже nil
← →
Сергей М. © (2008-03-13 16:18) [43]
> Application = nil
Да быть того не может !
Что угодно, но только не nil там должно быть.
Если, конечно же, над этим не потрудились твои очумелые ручки)
← →
IntruderLab (2008-03-13 16:22) [44]Вот ShowMessage(Application.MainForm.Name) у меня frmMain, то есть как и должно быть
← →
Сергей М. © (2008-03-13 16:24) [45]Ну ?!
А говоришь nil)
> то есть как и должно быть
Еще должно быть Application.MainForm.FormStyle = fsMDIForm - давай, проверяй ...
← →
IntruderLab (2008-03-13 16:28) [46]В вызове написал
if Application.MainForm.FormStyle = fsMDIForm then ShowMessage("1");
выскочило access violation
← →
IntruderLab (2008-03-13 16:32) [47]Все нормально! теперь fsMdiForm
← →
IntruderLab (2008-03-13 16:33) [48]Что дальше?
← →
Сергей М. © (2008-03-13 16:34) [49]А с чего ты взял, что причиной AV явилось именно Application=nil ?
Ты давай уже не мудри, а воспользуйся для проверки отладчиком)
А кустарщину с ShowMessage оставь для иных случаев)
← →
Сергей М. © (2008-03-13 16:36) [50]
> Все нормально! теперь fsMdiForm
Ну раз fsMdiForm, то пробуй так:
Application.CreateForm("TfrmTest", frmTest);
← →
IntruderLab (2008-03-13 16:36) [51]я такого не говорил, сейчас все нормально, Application.MainForm := frmMain;
Application.MainForm.FormStyle := fsMDIForm; Теперь как мне форму вызвать чтобы она стала дочерней, делаю как ранее:
frmTest := TfrmTest.Create(Application);
frmTest.FormStyle := fsMDIChild;
frmTest.Show;
он не ругается - но подвисает
← →
Сергей М. © (2008-03-13 16:39) [52]
> frmTest.FormStyle := fsMDIChild;
Что мешает выставить FormStyle=fsMDIChild у формы прямо в дизайн-тайм ?
← →
IntruderLab (2008-03-13 16:40) [53]Application.CreateForm(TfrmTest,frmTest); - программа просто висит - никаких реакций
← →
Сергей М. © (2008-03-13 16:41) [54]
> frmTest.Show;
Это лишнее.
При создании MDIChild-формы она автоматически станет видимой
← →
Сергей М. © (2008-03-13 16:43) [55]Пробуй:
try
Application.CreateForm(TfrmTest,frmTest);
except
on e:exception do ShowMessage(e.Classname + " " + e.Message);
end;
Что видишь ?
← →
IntruderLab (2008-03-13 16:44) [56]никаких реакций, что я не так делаю :(
← →
Сергей М. © (2008-03-13 16:45) [57]
> что я не так делаю
Приводи уже полный текст тестового dll-проекта ..
← →
IntruderLab (2008-03-13 16:48) [58]После отлова exception вывалил debugger fault notification а перед этим висел :(
← →
IntruderLab (2008-03-13 16:49) [59]почту или аську мож дашь чтобы не светить - можешь прислать на intruderlab@mail.ru
← →
Сергей М. © (2008-03-13 16:52) [60]Тебе что, сложно выложить тестовый проект здесь ?
Там всего-то два-три десятка строчек)
← →
IntruderLab (2008-03-13 16:58) [61]не проблема :) выкладываю
unit UfrmMain;
interface
uses
ShareMem, Windows, Messages, SysUtils,
Variants, Classes, Graphics,
Controls, Forms,
Dialogs,
ComCtrls, Menus,
ADODB,
DB,
DBTables,
SConnect,
Sockets,
DBClient,
MConnect, StdCtrls, ImgList, jpeg, ExtCtrls,
Registry, Buttons, OleCtrls, SHDocVw, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, JvExStdCtrls,
JvMemo, JvDotNetControls, JvExControls, JvComponent, JvEditorCommon,
JvUnicodeEditor, JvUnicodeHLEditor, JvaScrollText, JvCheckBox,
IdAntiFreezeBase, IdAntiFreeze, JvRichEdit,
Consts, ConvUtils, Math, SyncObjs, ComObj, UfrmAbout, StrUtils,
URemoteReadNews,
URemoteKKMSettings,
IdFTP,
IniFiles, frxClass, JvEdit, ToolWin, DBCtrls, JvDBDotNetControls,
JvScrollMax, JvExExtCtrls, Grids, JvListBox, ShellAPI, ActnList, Tabs;
type
TfrmMain = class(TForm)
status: TStatusBar;
menu: TMainMenu;
frmReg: TMenuItem;
mnuLogOn: TMenuItem;
mnuVvod: TMenuItem;
mnuNotes: TMenuItem;
mnuReports: TMenuItem;
mnuOSV: TMenuItem;
mnuNumerators: TMenuItem;
mnuhLIST_FACTORY_FILIAL: TMenuItem;
mnuhLIST_TYPE_DOCUMENTS: TMenuItem;
mnuhLIST_DOCUMENT_NUMERATOR: TMenuItem;
mnuhLIST_ROLE: TMenuItem;
mnuWorkers: TMenuItem;
iList: TImageList;
mnuClientShow: TMenuItem;
mnuTourOperators: TMenuItem;
mnuShowDocuments: TMenuItem;
mnuSettings: TMenuItem;
mnuKKMServer: TMenuItem;
mnuXReport: TMenuItem;
mnuZReport: TMenuItem;
tcp: TTcpClient;
IdAntiFreeze1: TIdAntiFreeze;
N6: TMenuItem;
mnuCloseSeans: TMenuItem;
N1: TMenuItem;
ftp: TIdFTP;
mnuTourOperatorList: TMenuItem;
mnuUserNotes: TMenuItem;
mnuLIST_COUNTRY: TMenuItem;
mnuLIST_CITY: TMenuItem;
N8: TMenuItem;
mnuLIST_HOTELS: TMenuItem;
mnuAnalitica: TMenuItem;
frmKKMFunction: TMenuItem;
N5: TMenuItem;
mnuChangeOrderClient: TMenuItem;
mnuInsertPay: TMenuItem;
mnuGetPay: TMenuItem;
N2: TMenuItem;
aList: TActionList;
aEsc: TAction;
Panel1: TPanel;
N3: TMenuItem;
ts: TTabSet;
sm1: TJvScrollMax;
JvScrollMaxBand2: TJvScrollMaxBand;
lblKKMHost: TLabel;
lblKKMPort: TLabel;
JvScrollMaxBand3: TJvScrollMaxBand;
lblGetLocalIP: TLabel;
lblClientHostName: TLabel;
JvScrollMaxBand5: TJvScrollMaxBand;
Label1: TLabel;
Label2: TLabel;
dtpBegin: TDateTimePicker;
dtpEnd: TDateTimePicker;
smTypeDocuments: TJvScrollMaxBand;
ckOrders: TCheckBox;
ckInvoice: TCheckBox;
ckAnnulOrders: TCheckBox;
ckPays: TCheckBox;
ckTours: TCheckBox;
ckSortDate: TCheckBox;
mnuDocumentsNM: TMenuItem;
mnuProgramParameters: TMenuItem;
ckUpdates: TCheckBox;
ckNews: TCheckBox;
Panel2: TPanel;
txtNews: TMemo;
procedure mnuDocumentsNMClick(Sender: TObject);
private
public
//Наборы данных подключения к серверу и пользовательских параметров
slServer : TStringList;
slUser : TStringList;
//Параметры удаленного сервера
sServerAddress : String;
sServerName : String;
sServerPort : String;
sServerGUID : String;
sInterceptGUID : String;
sServerBegin : String;
sServerEnd : String;
//Параметры ККМ
sKKMCode : String;
//Даты текущего периода
sBegin, sEnd : String;
//Параметры фильтрации документов
sOrders, sInvoice, sAnnulOrders, sTours, sPays, sDateSort, sDogTour, sZayavkaTour, sUpdates, sNews : String;
//Поток считывания версий системы
coRemoteKKMSettings : TRemoteKKMSettings;
//Параметры локального компьютера
sHost : String;
//Параметры пользователя
sUSER_ID : String;
sUSER_NICKNAME : String;
sUSER_PASSWORD : String;
sUSER_FULLNAME : String;
sUSER_FILIAL_ID : String;
sUSER_KKM_USE : String;
sUSER_IS_ADMIN : String;
sUSER_FILIAL_NAME : String;
sUSER_ROLE_ID : String;
sUSER_DOVERENNOST : String;
sUSER_TOURS : String;
sSESSION : String;
end;
function AddLog(sText:String):Longint;StdCall;external"events.dll";
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
//******************************************************************************
procedure TfrmMain.mnuDocumentsNMClick(Sender: TObject);
var LibHandle : THandle;
ShowDocumentsNM : function (slServer,slUsers:TStringList):Integer;StdCall;
begin
LibHandle := LoadLibrary("iHercules.dll");
if LibHandle <> 0 then
begin
@ShowDocumentsNM := GetProcAddress(LibHandle,"ShowDocumentsNM");
ShowDocumentsNM(slServer,slUser);
end;
FreeLibrary(LibHandle);
end;
//******************************************************************************
end.
dll
library iHercules;
uses
ShareMem,
ActiveX,
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
ComCtrls,
Menus,
ADODB,
DB,
DBTables,
SConnect,
Sockets,
DBClient,
MConnect,
Registry,
DateUtils,
Math,
UfrmShowDocuments in "UfrmShowDocuments.pas" {frmShowDocuments};
{$R *.res}
//******************************************************************************
function ShowDocumentsNM(slServer,slUsers:TStringList):Integer;StdCall;
var frmShowDocuments : TfrmShowDocuments;
begin
try
Application.CreateForm(TfrmShowDocuments,frmShowDocuments);
except
on E:Exception do ShowMessage(E.ClassName + " " + E.Message);
end;
end;
//******************************************************************************
exports
ShowDocumentsNM;
//******************************************************************************
begin
end.
//******************************************************************************
← →
Сергей М. © (2008-03-13 17:04) [62]Это, ты считаешь, тестовый проект, да ?)
И я во всем этом хламе должен разбираться ?)
Убирай нафих из всех форм все !
И никаких лишних юнитов в проектах не должно быть, только действительно необходимые для теста !
Формы должны быть девственно чистыми !
ShareMem убрать к лешему везде ! Мало того , что не знаешь зачем оно надо, да еще и влупил его в хост-проекте совсем не туда, куда требует документация.
← →
IntruderLab (2008-03-13 17:24) [63]unit UfrmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus;
type
TfrmMain = class(TForm)
menu: TMainMenu;
mnuTest: TMenuItem;
procedure mnuTestClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
//******************************************************************************
procedure TfrmMain.mnuTestClick(Sender: TObject);
var LibHandle : THandle;
ShowChild:function :Longint;StdCall;
begin
LibHandle := LoadLibrary("dll.dll");
if LibHandle <> 0 then
begin
@ShowChild := GetProcAddress(LibHandle,"ShowChild");
ShowChild;
end;
FreeLibrary(LibHandle);
end;
//******************************************************************************
end.
library dll;
uses
ShareMem,
Windows,
Messages,
SysUtils,
Variants,
Classes,
Controls,
Forms,
Dialogs,
UfrmChild in "UfrmChild.pas" {frmChild};
{$R *.res}
//******************************************************************************
function ShowChild:Longint;StdCall;
var frmChild:TfrmChild;
begin
try
Application.CreateForm(TfrmChild,frmChild);
except
on E:Exception do ShowMessage(E.ClassName + " " + E.Message);
end;
Result := 1;
end;
//******************************************************************************
exports
ShowChild;
//******************************************************************************
begin
end.
Сейчас форма реально появилась на экране - но приложение подвисло!
← →
IntruderLab (2008-03-13 17:28) [64]на главной форме при запуске дочки caption исчезает
← →
Сергей М. © (2008-03-13 19:03) [65]
> IntruderLab (13.03.08 17:24) [63]
> library dll;
> uses
> ShareMem,
Ты вообще-то русский ?)
← →
intruderlab (2008-03-13 19:52) [66]ты знаешь нет, я башкир :). Убираю
← →
Сергей М. © (2008-03-13 19:56) [67]Я тоже "русскостью", увы, "похвастать" не вправе)
Но .. надо же быть внимательным, когда это в твоих интересах)
← →
intruderlab (2008-03-13 22:35) [68]извини,просто запарил,сейчас убиру и попробую запустить.
← →
IntruderLab (2008-03-19 15:59) [69]Вобщем то для тех кому интересно - решилось простым не прописыванием
FreeLibrary(LibHandle);
← →
Сергей М. © (2008-03-19 17:24) [70]
> решилось простым не прописыванием
> FreeLibrary
Тогда библиотека останется в памяти процесса до конца работы приложения, даже если форма, реализованная в ней, будет уничтожена и никогда более не создана вплоть до окончания работы приложения.
Тебе оно надо ?
Если надо, то дело хозяйское)
← →
IntruderLab (2008-03-21 10:33) [71]Я завершаю работу формы из самой дочерней формы, и вроде как она уничтожается
← →
Сергей М. © (2008-03-21 10:38) [72]
> завершаю работу формы из самой дочерней формы
Причем здесь форма ?
Я тебе про саму dll говорю - ты убрал LoadLibrary, значит ты не выгружаешь dll из памяти процесса.
> вроде как она уничтожается
Это она тебе сама сказала ?)
← →
Сергей М. © (2008-03-21 10:57) [73]И вот еще что : везде
stdcall
понатыкано - это "щоб було" или как ?)
← →
Loginov Dmitry © (2008-03-21 23:04) [74]> Вобщем то для тех кому интересно - решилось простым не прописыванием
>
> FreeLibrary(LibHandle);
Логично. Ты создавал в библиотеке дочернюю форму и тут же выгружал эту библиотеку а вместе с нею и код всех обработчиков, которые наверняка присутствовали у дочерней формы. А представляешь, каково это - обработчики без кода! :)
← →
IntruderLab (2008-03-31 11:20) [75]Представляю :) Спасибо всем!!!
Страницы: 1 2 вся ветка
Текущий архив: 2009.01.25;
Скачать: CL | DM;
Память: 0.63 MB
Время: 0.023 c