Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Вниз

TlistView Has no parent control   Найти похожие ветки 

 
ford   (2009-02-18 18:44) [0]

Всем привет! помогите решить такую проблему :(
сделал форму на которой есть TListView. Все нормально все ок!
решил форму и всякую ерунду которая не нужна постоянно перенести в DLL
и динамически подгружать
Подгружаю, вызываю процедурку из DLL которая создает объект форму
отображаеться все нормально, лист заполняеться значениями прекрасно
но как только я пытаюсь кликнуть мышкой по ListView вылетает ошибка
Has not parent control
:(( все другие компоненты расположенные на форме созданной из DLL работают нормально без каких либо проблем только ListView чегото хочет, и я никак не могу понять чего ему надо

вот процедура
Procedure ShowForm;
Begin
sHandle:=Application.Handle;
Application.Handle:=App;
Form1:=TForm1.Create(WParent);
Form1.Parent:=TWinControl(WParent);
Form1.Show;
End;

вот её описание
Procedure ShowForm(App:THandle; WParent:TControl); stdcall;

в чем косяк то?? вроде все по честному
:((


 
ford   (2009-02-18 19:01) [1]

Попробовал Form1.ListView1.ParentWindow:=TWinControl(WParent).Handle;

непомогает :((


 
Amoeba ©   (2009-02-18 19:44) [2]


> решил форму и всякую ерунду которая не нужна постоянно перенести
> в DLL
> и динамически подгружать

Это называется Сам Себе Злобный Буратино.


 
Юрий Зотов ©   (2009-02-18 20:08) [3]

> решил форму и всякую ерунду которая не нужна постоянно перенести
> в DLL
> и динамически подгружать

Перенесите не в DLL, а в пакет (BPL) и этот пакет включите в список run-time пакетов приложения. Проблема исчезнет, причем без всяких манипуляций с подменой Application.Handle.


 
Сергей М. ©   (2009-02-18 21:28) [4]


> решил форму и всякую ерунду которая не нужна постоянно перенести
> в DLL


Ну а почему не в ресурсы того же exe ?
Какой дури ты начитался, что принял такое решение ?)


 
Юрий Зотов ©   (2009-02-18 21:52) [5]

> ford   (18.02.09 18:44)  

Кстати, такой подход оправдан, если эту DLL/BPL планируется использовать многократно, в разных проектах. А если в одном, то большого смысла в этом нет.


 
Германн ©   (2009-02-19 00:32) [6]


> решил форму и всякую ерунду которая не нужна постоянно перенести
> в DLL
> и динамически подгружать

При такой формулировке нет не только большого смысла, а и вообще никакого!
Достаточно убрать в проекте форму из списка автосоздаваемых.


 
ford   (2009-02-19 09:29) [7]

:)
но всетаки
много чего вы сказали :) а почему такая ошибка выскакивает несказали :)

в проекте просто около 50 разных форм, ессесно я создаю объекты динамически
но мне просто захотелось убрать из основного модуля ряд форм которые просто не используются постоянно, а от случая к случаю, например форма в которой происходи настройка параметров приложения, согласитесь вы её используете ну раз ну два отсилы. Плюс ко всему прочему я хочу использовать эту библиотеку в другом проекте. Я понимаю что мона BPL и все такое прочее, но мне хочется DLL, заодно и разобраться с ним
вроде бы все получается нормально, но вот с это й формой косяк какойто
немогу понять :( я указываю Parent и ParentWindow а ошибка всеравно вылетает


 
Сергей М. ©   (2009-02-19 09:45) [8]


> Procedure ShowForm(App:THandle; WParent:TControl); stdcall;


Вот объясни для начала, зачем ты указал stdcall ?


 
Palladin ©   (2009-02-19 09:47) [9]

ну так "все пишут", а он рыжий чтоли ? :)


 
Сергей М. ©   (2009-02-19 09:48) [10]


> он рыжий чтоли ?


Вот я и интересуюсь, рыжий он или не рыжий)..


 
ford   (2009-02-19 09:53) [11]

вот тебе паладин написал практичный ответ :)))
stdcall порядок вызова процедуры, а именно спопосба и порядка передачи параметров в процедуру


 
ford   (2009-02-19 09:54) [12]

но причем тут stdcall
ну вызов так будет идти а не как в паскале
ну и что
как это может быть связанно


 
ford   (2009-02-19 10:15) [13]

воть что получилось :)
Из хелпа про свойство ParentWindow:
   Description
   ParentWindow refers to the window handle that underlies the parent control. To designate a non-VCL control as a parent, assign that control’s handle to ParentWindow. This assignment causes the control to be moved into the parent’s screen area. Setting ParentWindow has no effect if Parent is not nil (Delphi) or NULL (C++).

(нашел в королевстве %)

получается что при использовании DLL
VCL уже не VCL :)))
круто

заработало тока так
Procedure ShowForm;
Begin
sHandle:=Application.Handle;
Application.Handle:=App;
Form1:=TForm1.Create(WParent);
Form1.Parent:=TWinControl(WParent);

Form1.RzListView1.Parent:=nil;
Form1.RzListView1.ParentWindow:=Form1.Panel8.Handle;
Form1.Show;
End;


 
Сергей М. ©   (2009-02-19 10:18) [14]


> ford   (19.02.09 09:53) [11]


> stdcall порядок вызова процедуры, а именно спопосба и порядка
> передачи параметров в процедуру


Это я и без тебя знаю)

Меня интересует, зачем именно ты и именно в данном контексте использовал явное соглашение о вызове, отличающееся от дифолтного для дельфийских приложений ?
Если ты сделал это осознанно, то должны же быть вразумительные аргументы этому ?


 
ford   (2009-02-19 10:35) [15]


> Сергей М. ©   (19.02.09 10:18) [14]


аргументы только такие
1.
STDCALL был добавлен Microsoft для Win32. В нем скомбинированы лучшие черты Pascal (очистка стека вызываемой подпрограммой) и CDECL (аргументы выталкиваются слева направа - первый аргумент находится на вершине стека - делает простым использование счетчика переменного количества аргументов). Перед STDCALL Windows всегда использовался PASCAL, а для вызовов всех переменных аргументов использовался CDECL. Теперь для всего этого всегда используется STDCALL.

2.
Я не уверен в том, что сейчас использует VB (в 16-битном Windows API был Pascal, в 32-битном - STDCALL).

если я не укажу тип вызова, то какой будет использован, алах его знает
темболее если я перейду с одной версии дельфи на другую, что будет и как


 
ford   (2009-02-19 10:43) [16]


> Сергей М. ©   (19.02.09 10:18) [14]


мало того, я читал несколько статей про использование и создание DLL в дельфи
там было примерно такое же описание причины использования stdcall

коль использует сама винда такие вызовы , то почему я должен использовать другие??

и опять таки как передавались параметры в 3 дельфи???
как в пятом ??
и как в 2007??
ты в курсе???

DLL в общем случае получается черный ящик, у которого есть вход и выход
и есть описание что надо подать на вход
а уж как оно там реализовано (как считает) никого не волнует :)
ты же используешь MessageBox и не задаешь вопросов почему эта функция в библиотеках винды описана с использованием stdcall???

function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;

а???
помоему твой вопрос абсолютно не в тему :)
или я не прав??
поясни


 
Сергей М. ©   (2009-02-19 10:49) [17]


> если я не укажу тип вызова, то какой будет использован,
> алах его знает


pascal fastcall будет использован.

Оно и есть соглашение по умолчанию для взаимодействующих делфийских подпрограмм.


> не уверен в том, что сейчас использует VB


Подходим к главному - ты расчитываешь использовать свою dll в программах, разработанных в иных языковых средах разработки, т.е. не Делфи и не BCB, так ?

Тогда что по-твоему эти программы будут передавать в кач-ве 2-го параметра, т.е. WParent:TControl ?


 
ford   (2009-02-19 11:06) [18]

ну в принципе да , тут нужно использовать Handle
но пока я просто обкатываю
вариант
поэтому и TControl
чтобы не заморачиватся
щас вот отладил заработало :)
теперь буду
убирать все что связанно с Delphi в вызовах

ибо ежели сразу все абстрагировать
то можно повеситься или пробить стену
:))))))


 
Сергей М. ©   (2009-02-19 11:14) [19]

Ну а в качве первого параметра что будешь передавать из программы на суахили ?)


 
ford   (2009-02-19 11:28) [20]

handle главного окна


 
ford   (2009-02-19 11:29) [21]

или ты хош сказать что в программе на хинди работающей под Widows нету хендла главного окна ???
8-0


 
Сергей М. ©   (2009-02-19 11:33) [22]

А что собственно есть "главное окно" ?
Дай свое четкое определение ..


 
ford   (2009-02-19 11:42) [23]


> Сергей М. ©   (19.02.09 11:33) [22]
>
> А что собственно есть "главное окно" ?
> Дай свое четкое определение ..
>


тебе зачем???
:))


 
ford   (2009-02-19 11:45) [24]

не, мне больше всего нравится :)))
я попросил помощи найти в чем ошибка
в данном конкретном случае :)
сам нашел как это исправить

но нашелся товарисч который начинает экзаменовать что такое программа в винде :)

это уже тема форума потрепаться на мой взгляд :)

или Вы уже чегонить скажите существенное
или прекращайте строить из себя доктора наук ;)


 
Сергей М. ©   (2009-02-19 11:58) [25]

Все с тобой ясно.
LMD


 
ford   (2009-02-19 12:38) [26]


> Сергей М. ©   (19.02.09 11:58) [25]
>
> Все с тобой ясно.


с тобой походу тоже :)))
FG


 
Anatoly Podgoretsky ©   (2009-02-19 15:31) [27]

Ты будешь определять, кто и что имеет право писать в твоей ветке?


 
Leonid Troyanovsky ©   (2009-02-19 22:52) [28]


> ford   (19.02.09 11:29) [21]

> или ты хош сказать что в программе на хинди работающей под

У хомяков нет хвоста! [33 кв.м]

--
Regards, LVT.


 
Германн ©   (2009-02-20 00:45) [29]


> но нашелся товарисч который начинает экзаменовать что такое
> программа в винде :)

И он поставил "единицу".
И многие другие тоже её поставили тебе. Уж будь уверен.
А вот если бы последовал совету Юрий Зотов ©   (18.02.09 20:08) [3] -
не было бы никаких споров, и программа бы работала нормально. (По крайней мере в рамках сабжа).
Но "единица" всё равно на твоей совести.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.006 c
2-1234349684
Elena
2009-02-11 13:54
2009.04.05
retError


2-1234650449
Johnnnn
2009-02-15 01:27
2009.04.05
Считывание данных с постоянно обновляющегося TXT?


15-1234042050
Юрий
2009-02-08 00:27
2009.04.05
С днем рождения ! 8 февраля 2009 воскресенье


15-1233818505
Slider007
2009-02-05 10:21
2009.04.05
С днем рождения ! 31 января 2009 суббота


1-1209106005
Игорь
2008-04-25 10:46
2009.04.05
Как в TWebBrowser поменять кодировку документа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский