Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TlistView Has no parent control


Страницы:   1 2

ford ©   (2009-02-18 18:44:00) 

Всем привет! помогите решить такую проблему :(
сделал форму на которой есть 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;

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


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


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

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


Leonid Troyanovsky   (2009-02-19 22:52:00) [2]


> ford   (19.02.09 11:29) [21]

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

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

--
Regards, LVT.


Anatoly Podgoretsky   (2009-02-19 15:31:00) [3]

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


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


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


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


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

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


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

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

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

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

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


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


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


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


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

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


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

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


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

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


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

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


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

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

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


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


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


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

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


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


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

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


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


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


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

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

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

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

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

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


ford   (2009-02-19 10:35:00) [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).

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


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


> ford   (19.02.09 09:53) [11]


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


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

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


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

воть что получилось :)
Из хелпа про свойство 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;


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

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


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

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


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


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


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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо