Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2009, 01:13   #1
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию Вызов ShellExecute из модуля. Какой тогда дескриптор окна указывать?

Есть программа и есть самописный модуль. В этом модуле осуществляется запуск функцией ShellExecute:

Код:
....
ShellExecute(Handle, PChar(BodyPath(Body, 1)), PChar(BodyPath(Body, 2)), Nil, Nil, SW_Restore);
....
И вот при компиляции он мне сообщает:

[Error] TermitTask.pas(121): Undeclared identifier: 'Handle'

"Ага, нужно какойто модуль добавить в uses..."
Уникальным методом типа "Ctrl + щелчок" я определил, что это из модуля Controls....

Вобщем я потом методом тыка пробывал.. Результат тотже.
Тобишь компилятору не нравиться чтото другое
Из самой проги (не из модуля) всё работает.


Для справки: ShellAPI добавлен. Delphi 7
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 27.08.2009, 01:28   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Что бы небыло конфликтов с функциями вызывайте их с указанием модуля. К примеру:
Код:
TermitTask.ShellExecute(Handle, PChar(BodyPath(Body, 1)), PChar(BodyPath(Body, 2)), Nil, Nil, SW_Restore);
В первом параметре указывается хэндл
Код:
Application.Handle
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 27.08.2009, 01:34   #3
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Спасибо, работает

{Хм, почемуто не разрешается добавить отзыв в репу.... попробую попозже }

Последний раз редактировалось Вавел из ГМТУ; 27.08.2009 в 01:39.
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 27.08.2009, 01:40   #4
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Можно было просто вместо HANDLE написать 0 (Хендл 1 окна)!
uberchel вне форума Ответить с цитированием
Старый 27.08.2009, 01:47   #5
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Спасиб, это тоже работает
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 27.08.2009, 08:04   #6
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

Цитата:
Сообщение от uberchel Посмотреть сообщение
Можно было просто вместо HANDLE написать 0 (Хендл 1 окна)!
а разве 0 это не хэндл рабочего стола?
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 27.08.2009, 08:38   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а разве 0 это не хэндл рабочего стола?
Не совсем.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2009, 08:47   #8
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не совсем.
А чуть подробнее можно?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 27.08.2009, 09:01   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А чуть подробнее можно?
Скажу чесно, сколько бы я не сталкивался с нулевым хендлом ни разу мне не удалось понять что это такое, ибо ни одна из функций на него не реагировала. Но в литературах я читал разные противоречивые и жутко спорные фразы, типа "это рабочий стол" "это не рабочий стол, а то на чем он зиждится"... короче говоря я думаю что (возможно) в разных Виндоусах он всетки что-то обозначает, а в ХР это знчение просто игнорируется.

Впрочем Есть такая константа:
HWND_DESKTOP = 0;

Но всетки тут что-то темное... И если мне кто-то не поверит рекомендую запустить SpyXX и посмотреть какой хендл самого главного окна он покажет

Кстати, неплохо бы еше определить понятие Рабочего стола - лично для меня это ShellListView который на рабстоле, а не его родитель.
I'm learning to live...

Последний раз редактировалось Stilet; 27.08.2009 в 09:06.
Stilet вне форума Ответить с цитированием
Старый 27.08.2009, 09:38   #10
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Все правильно, я нашел эту строку в Windows.dcu Delphi 3, которая создавалась еще до ХРюшки. Вывод: виноваты не Borland, а Билл Гейтс.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить дескриптор окна другого приложения и сделать его активным Delphi 7 AndersX Помощь студентам 4 18.10.2009 09:32
lokalhost- какой указывать адрес ? lamer_lam Общие вопросы Web 16 04.03.2009 16:18
Получить Handle TEdit'a, зная дескриптор родительского окна Cold_Night Win Api 2 13.02.2009 16:47
FindWindow не нашел окна, а ShellExecute возвращает ERROR_PATH_NOT_FOUND malor Win Api 2 19.07.2007 15:15
Вызов Метода из др. модуля Mickle Общие вопросы Delphi 2 10.05.2007 23:41