![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Показ форм [D7, WinXP]
TForm © (2006-07-13 16:56:00)Чем отличается форма модальная от не модальной
Всмысле при вызове формы из DLL модальная ведет себя нормально а не модальная как то не так.
Синхронизацию делаю так - Apllication.handle для dll присваиваю handle проги
Как показать форму НЕ МОДАЛЬНО из DLL что-бы она вела себя как модальная но была не модальной.
TForm (2006-07-24 13:41:00) [21]Ну ладно, попробую привести код в удобочитаемом виде... тока позже...
покажу...
А что....
> Забывчивый (23.07.06 02:58) [35]
> Неужели кроме GrayFace © никто не читает эту тему?
всамом деле?
GrayFace (2006-07-24 00:53:00) [22]В твоем коде искать ошибку, не видя его, мало кто сможет. Попробуй [28].
TForm (2006-07-23 18:21:00) [23]
> Забывчивый (23.07.06 02:58) [35]
Точно...
Вопрос в силе.
Может модераторам следует перенести ее куда нибудь?
Хочется обсудить мой вопрос...
Или НУ ВООБЩЕ НИКАКИХ предположений нет?
Может вопрос неинтересный? или непонятный?
Забывчивый (2006-07-23 02:58:00) [24]Неужели кроме GrayFace © никто не читает эту тему?
TForm (2006-07-22 04:27:00) [25]
> GrayFace © (21.07.06 01:27) [33]
> Ошибка либо из-за исхищрений,
> TForm (20.07.06 00:34) [30]
если загружать каждый раз разные DLL (т.е. одинаковые, копии оригинальной, первой) то усе ОК
либо где-то в коде.
>TForm (18.07.06 00:39) [24]
Мне интересно почему 8?, сначало было чеыре (я писал уже про это) ...
Походу наверное не исхищрения, а в коде, но ПОЧЕМУ ВОСЕМЬ раз нормально и потом только ошибка??????????
GrayFace (2006-07-21 01:27:00) [26]Ошибка либо из-за исхищрений, либо где-то в коде. Первое даже более вероятно.
TForm (2006-07-20 23:55:00) [27]Новую тему, что ли заводить?
TForm (2006-07-20 16:59:00) [28]Неужели ни у кого никаких догадок нет....?????????
ОБЫДНО. ДОСАДНО.... ДА ЛАДНО.
TForm (2006-07-20 00:34:00) [29]Люди добрые ну подскажите, пожалуйста, по вопросу закономерности ошибки из
> TForm (15.07.06 02:33) [16]
> TForm (18.07.06 00:39) [24]
если загружать каждый раз разные DLL (т.е. одинаковые, копии оригинальной, первой) то усе ОК ну если на одной зациклиться то только восемь раз и AV. Гружу их теперь динамически.
TForm (2006-07-19 18:45:00) [30]
> GrayFace © (19.07.06 18:32) [28]
Тут я подумал, что это не нужно мне....
т.е. хочу что-бы DLL потом можно было и на других языках писать и использовать с моим EXE на Delphi...
Вот такая бадяга.
А про ошибку ничего подсказать не сможешь?
Спасибо большое. Один мне помогаешь.
GrayFace (2006-07-19 18:32:00) [31]Попробуй включить Project -> Options -> Packages -> Build with runtime packages у обоих проектов и убрать мои исхищрения.
TForm (2006-07-19 10:52:00) [32]Прочтите пожалуйста
> TForm (14.07.06 23:20) [14]
> TForm (15.07.06 02:33) [16]
> TForm (18.07.06 00:39) [24]
Хочется понять в чем дело...
TForm (2006-07-19 00:53:00) [33]
> GrayFace © (19.07.06 00:19) [25]
Чет ничего непонял, извени...
GrayFace (2006-07-19 00:19:00) [34]Я ступил - по идее, после включения "Build with runtime packages" можно отказаться от моих исхищрений. (минус - то, что надо таскать с собой несколькомегабайтную dll, но при большом кол-ве своих окупается). Попробуй.
if Assigned(BMP1) then FreeAndNil(BMP1);
Во Free итак делается проверка на <>nil.
TForm (2006-07-18 00:39:00) [35]Нашел в каком месте вылетает ошибка.
У меня на OnDestroy формы из DLL "убиваются" два экземпляра класса TBitMap.
Если перед ихим "убийством" поставить Exit; то ошибка НЕвылетает НЕ после восьмого НЕ после пятидесятого разов.
Описаны как глобальные переменные типа TBitMap;
BMP1: TBitMap;
BMP2: TBitMap;
Вот как они создаються - на OnCreateформы DLL есть строки:
....
BMP1:=TBitMap.Create;
BMP1.LoadFromResourceName(Hinstance, 'BMP1');
BMP2:=TBitMap.Create;
BMP2.LoadFromResourceName(Hinstance, 'BMP2');
....
на OnDestroy
....
BMP1.Free;
BMP2.Free;
....
попробовал и так
if Assigned(BMP1) then FreeAndNil(BMP1);
такая же ерунда - восемь раз нормально, потом ошибка.
Может их ненадо "убивать"-то вооще тогда, но я думаю, что это неправильно и что их "убивать" всетаки надо. Всетаки радителя/хозяина у них, получается, нет. Почему в момент ихого уничтожения (причем только начиная с восьмого) вылетает эта гребаная ошибка да еще и в модуле некоким боком не касающимся этих битмапов?
TForm (2006-07-17 21:47:00) [36]
> GrayFace © (14.07.06 10:26) [11]
> А что потом делается с этим хендлом? (кстати, для окон принято
> использовать hwnd)
->Поставлю HWND.
Потом используется для обратной связи формы из exe с формой из dll
Типа вот этого:
procedure TFrEXE.FMv(var Ms: TMessage);
begin
SetWindowPos(HNDDLLFR, HWND_TOPMOST, Left, Top+Height, Width, 300, SWP_NOACTIVATE); //здесь форма из Dll должна ездить за формой из ехе.
end;
Это работает.
> Application.CreateForm(TFrDLL, FrDLL) - по замыслу при
> закрытии формы из dll должно закрываться все?
По замыслу при вызове FreeFormDll должна закрыться форма из DLL и выгрузиться эта библиотека (DLL), потом - CreateFormDLL(Application.Handle, TL); для другой dll и опять из нее (DLL) должна создасться новая(другая) форма. Действия со стороны exe одинаковые для всех форм из dll.
Повторяюсь, в один момент времени должна быть загружена 1 Dll и создано 1 окно из этой DLL. т.е. поработали с этим окном закрыли, выгрузили и загрузили новую DLL и из нее создали новое окно. Окно из exe всегда присутствует и оно как бы первая(верхняя) половина окна, вместе с формой из Dll получается одно "целое" окно, формы в DLL не имеют заголовка (стиль bsNone) и только при закрытии окна из exe - закрывается все.
GrayFaceогромное тебе спасибоза старание мне помочь.
А вот насчет ошибки нет никаких догадок, предположений?
Вопрос остается. :(
GrayFace (2006-07-17 11:32:00) [37]TForm (16.07.06 3:20) [20]
А у меня if FrDLL<>nil then FreeAndNil(FrDLL);
разве не установит форму в nil?
Устанавливает. Только тут проверка на FrDLL<>nil не нужна - и так делается.
Инфы действительно мало. На мой вопрос в [11] ты не ответил. Application.CreateForm(TFrDLL, FrDLL) - по замыслу при закрытии формы из dll должно закрываться все?
TForm (2006-07-17 01:13:00) [38]
> GrayFace © (15.07.06 18:17) [18]
> Попробуй FrDLL.Release; В FrDLL.OnDestroy: FrDLL:=nil;
Сделал так
if FrDLL<>nil then begin
FrDLL.Release;
FrDLL:=nil;
end;
тажа история после восьмого удаления - Access violation at address 004CF006 in module "FormaDLL.dll". Read of address 00B6FFD8
толь теперь вроде бы не выкидывает в модуль TimerLst.
Спасибо тебе за старание помочь.
>ALL
> TForm (14.07.06 23:20) [14]
> TForm (15.07.06 02:33) [16]
Вопрос в силе.
Почему когда напишешь мало, т.е. мало инфы про проблему - неотвечают или пишут инфы мало опишите подробней. А я тут старался расписывал усе как было и есть у меня ... и тоже тишина....
Конечно сечас начнеться, ну типа вываливай исходник, смотреть надо...
Да, вопрос то простой - наверника у знающих есть предположения/догадки отчего да почему. Ну это я про ошибку которая вылетает строго на одном и том же месте и строго после определенного количества раз создания/удаления формы. Ну вот и хочется "услышать" эти предположения/догадки и пробовать самому искать ошибку в своем коде... не выкладывая исходник, и дело не втом что жалко или еще чего... оригинально там все равно ничего нет...Спасибо.
TForm (2006-07-16 03:20:00) [39]
> GrayFace © (15.07.06 18:19) [19]
> GrayFace © (15.07.06 18:19) [19]
> А лучше Fr.Close В OnClose: Actiion:=caFree; FrDLL:=nil;
Спасибо. Сейчас пару дней не смогу пробовать, после попробую
FrDLL.Release; При моем коде, при вызове FreeFormDll, помоему, событие OnClose в форме Dll не проходит т.е. ставил ShowMessage('Close') в OnClose и ShowMessage('Destroy') в OnDestroy на destroy показывается на Close нет, а если програмно вызвать Close формы Dll (FrDLL.Close) то она закрывается но потом после вызова CreateFormDll создается уже неправильная ну SpeedButtonы опять глючат и все такое...
И с Actiion:=caFree; пробовал. А у меня
if FrDLL<>nil then FreeAndNil(FrDLL);
разве не установит форму в nil? Может на FrDLL.OnDestroy: FrDLL:=nil;еще поставить? т.е. при вызове FreeFormDll сработает if FrDLL<>nil then FreeAndNil(FrDLL);здесь вызовется OnDestroy там ставлю ее в nil после OnDestroy во FreeAndNil она опять ставится в nil, ничего страшного не будет два раза в nil?
И может это влиять на количество (строго одинаковое) нормальных созданий формы из Dll? Спасибо.
GrayFace (2006-07-15 18:19:00) [40]А лучше Fr.Close
В OnClose: Actiion:=caFree; FrDLL:=nil;