Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

преобразование hwnd к типу Tpoint

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
perceptrona



Зарегистрирован: 22.07.2003
Сообщения: 13
Откуда: Минск

СообщениеДобавлено: Вт Июл 22 2003 14:08    Заголовок сообщения: преобразование hwnd к типу Tpoint Ответить с цитатой

Есть функция:
function DisplayContextMenu(const Directory: string; Items: TStringList;
Parent: DFS_HWND; Pos: TPoint; ShowRename: boolean;
var RenameSelected: boolean): boolean; overload;
Мне нужно эту функцию вызвать с параметрами
DisplayContextMenu(directory,fselectedfiles, handle, p,False,b);
где
directory:string,
p: Tpoint;
b: boolean;
fselectedfiles:TStringList

а вот handle объявлен у меня как тип Thandle

Проблема в том, что я не могу преобразовать Thandle handle к типу Tpoint

В функциях API порылся и нашёл тока функцию обратного преобразования:
HWND WindowFromPoint ( POINT Point );
Как преобразовать тип Thandle к типу Tpoint?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aist++
Гость





СообщениеДобавлено: Вт Июл 22 2003 14:29    Заголовок сообщения: Упс! Да это претендент на премию нобеля вопрос задал, не меньше! Ответить с цитатой

Я, фигею, дорогая редакция!
Как ты, о великий и мудрый программный гений, собираешся преобразовать дескриптор окна (THandle) в координаты точки (TPoint)?
Вот это тупняк!
А WindowFromPoint - это не преобразование точки в дескриптор, а функция, которая возвращает дескриптор окна, находящегося в заданной точке экрана!
К тому же, насколько я понял, проблема с преобразованием типа THandle в DFS_HWND, а не THandle в TPoint!!!
И что это за функция такая DisplayContextMenu? И что за тип DFS_HWND?
Напиши, попробунм разобраться!
А пока, совет напоследок. Попробуй написать так:
DisplayContextMenu(directory, fselectedfiles, DFS_HWND(handle), p, False, b);
Вернуться к началу
perceptrona



Зарегистрирован: 22.07.2003
Сообщения: 13
Откуда: Минск

СообщениеДобавлено: Вт Июл 22 2003 14:42    Заголовок сообщения: Re: Упс! Да это претендент на премию нобеля вопрос задал, не меньше! Ответить с цитатой

type
DFS_HWND = {$IFDEF DFS_DELPHI} HWND {$ELSE} pointer {$ENDIF};

а DFS_Delphi определено как
{$DEFINE DELPHI_FREE_STUFF}
{$IFDEF VER140}
{$DEFINE DFS_COMPILER_6}
{$DEFINE DFS_DELPHI}
{$DEFINE DFS_DELPHI_6}
{$ENDIF}
{$IFDEF VER130}
{$DEFINE DFS_COMPILER_5}
{$IFDEF BCB}
{$DEFINE DFS_CPPB}
{$DEFINE DFS_CPPB_5}
{$ELSE}
{$DEFINE DFS_DELPHI}
{$DEFINE DFS_DELPHI_5}
{$ENDIF}
{$ENDIF} и т.д.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aist++
Гость





СообщениеДобавлено: Вт Июл 22 2003 14:48    Заголовок сообщения: Re: Упс! Да это претендент на премию нобеля вопрос задал, не меньше! Ответить с цитатой

Как я и написал:
DisplayContextMenu(directory, fselectedfiles, DFS_HWND(handle), p, False, b);
Теоретически, это должно работать. Или не работает?
А что за функция такая DisplayContextMenu?
Вернуться к началу
perceptrona



Зарегистрирован: 22.07.2003
Сообщения: 13
Откуда: Минск

СообщениеДобавлено: Вт Июл 22 2003 14:48    Заголовок сообщения: Re: Упс! Да это претендент на премию нобеля вопрос задал, не меньше! Ответить с цитатой

function DisplayContextMenu(const Directory: string; Items: TStringList;
Parent: DFS_HWND; Pos: TPoint; ShowRename: boolean;
var RenameSelected: boolean): boolean; overload;
begin
g_ShowRename := ShowRename;
Result := InvokeListInterfaceElement(Directory, Items, HWND(Parent), Pos,
icContextMenu, '');
RenameSelected := g_RenameSelected;
end;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aist++
Гость





СообщениеДобавлено: Вт Июл 22 2003 14:51    Заголовок сообщения: Так работает или нет? Ответить с цитатой

Как я и написал:
DisplayContextMenu(directory, fselectedfiles, DFS_HWND(handle), p, False, b);
Теоретически, это должно работать. Или не работает?
Вернуться к началу
perceptrona



Зарегистрирован: 22.07.2003
Сообщения: 13
Откуда: Минск

СообщениеДобавлено: Вт Июл 22 2003 14:53    Заголовок сообщения: Re: Упс! Да это претендент на премию нобеля вопрос задал, не меньше! Ответить с цитатой

В строке где написано:
DisplayContextMenu(filename,Pointer(handle),p,Fal se,b);
Компилятор грит, что Incopatibles types
TPOINT и HWND
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
perceptrona



Зарегистрирован: 22.07.2003
Сообщения: 13
Откуда: Минск

СообщениеДобавлено: Вт Июл 22 2003 14:54    Заголовок сообщения: Re: Упс! Да это претендент на премию нобеля вопрос задал, не меньше! Ответить с цитатой

Я ошибся - не DisplayContextMenu(filename,Pointer(handle),p,False,b);
а DisplayContextMenu(filename,DFS_HWND(handle),p,False,b);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aist++
Гость





СообщениеДобавлено: Вт Июл 22 2003 14:58    Заголовок сообщения: Кинь сюда часть исходника Ответить с цитатой

Кинь сюда часть исходника, точнее процедуру где вызываешь DisplayContextMenu - я попробую разобраться.
Вернуться к началу
perceptrona



Зарегистрирован: 22.07.2003
Сообщения: 13
Откуда: Минск

СообщениеДобавлено: Вт Июл 22 2003 15:04    Заголовок сообщения: Re: Кинь сюда часть исходника Ответить с цитатой

procedure TMFileExplorer.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
p :tpoint;
n :tlistitem;
b: Boolean;
begin
inherited;
if (button=mbright) and fcontextmenu then begin
n:=getitemat(x,y);
if assigned(n) then begin
if pos(n.subitems[4],selectedfilenames)=0 then
selected:=nil;
selected:=n;
click;
getcursorpos(p);
b:=False;
if selectedcount>1 then begin
getselectedfilenames;
DisplayContextMenu(directory,fselectedfiles,TPOINT(handle), p,False, b);
end else
DisplayContextMenu(filename,DFS_HWND(handle),p,False,b);
end;
end;
end;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
perceptrona



Зарегистрирован: 22.07.2003
Сообщения: 13
Откуда: Минск

СообщениеДобавлено: Вт Июл 22 2003 15:06    Заголовок сообщения: Re: Кинь сюда часть исходника Ответить с цитатой

{$IFDEF DFS_COMPILER_4_UP}

function DisplayContextMenu(const Filename: string; Parent: DFS_HWND;
Pos: TPoint; ShowRename: boolean; var RenameSelected: boolean): boolean;
var
Dummy: PItemIDList;
begin
Dummy := NIL;
g_ShowRename := ShowRename;
Result := InvokeInterfaceElement(Filename, NIL, Dummy, 0, icContextMenu, '',
HWND(Parent), Pos, 1);
RenameSelected := g_RenameSelected;
end;

function DisplayContextMenu(const Directory: string; Items: TStringList;
Parent: DFS_HWND; Pos: TPoint; ShowRename: boolean;
var RenameSelected: boolean): boolean; overload;
begin
g_ShowRename := ShowRename;
Result := InvokeListInterfaceElement(Directory, Items, HWND(Parent), Pos,
icContextMenu, '');
RenameSelected := g_RenameSelected;
end;

function DisplayContextMenu(AParent: IShellFolder; var APIDL: PItemIDList;
Attr: ULONG; Parent: DFS_HWND; Pos: TPoint; PidlCount: integer;
ShowRename: boolean; var RenameSelected: boolean): boolean;
begin
g_ShowRename := ShowRename;
Result := InvokeInterfaceElement('', AParent, APIDL, Attr, icContextMenu, '',
HWND(Parent), Pos, PidlCount);
RenameSelected := g_RenameSelected;
end;

{$ELSE}

function DisplayContextMenu(const Filename: string; Parent: DFS_HWND;
Pos: TPoint; ShowRename: boolean; var RenameSelected: boolean): boolean;
var
Dummy: PItemIDList;
begin
g_ShowRename := ShowRename;
Dummy := NIL;
Result := InvokeInterfaceElement(Filename, NIL, Dummy, 0, icContextMenu, '',
HWND(Parent), Pos, 1);
RenameSelected := g_RenameSelected;
end;

function DisplayContextMenuList(const Directory: string; Items: TStringList;
Parent: DFS_HWND; Pos: TPoint; ShowRename: boolean;
var RenameSelected: boolean): boolean;
begin
g_ShowRename := ShowRename;
Result := InvokeListInterfaceElement(Directory, Items,
HWND(Parent), Pos, icContextMenu, '');
RenameSelected := g_RenameSelected;
end;

function DisplayContextMenuPIDL(AParent: IShellFolder; var APIDL: PItemIDList;
Attr: ULONG; Parent: DFS_HWND; Pos: TPoint; PidlCount: integer;
ShowRename: boolean; var RenameSelected: boolean): boolean;
begin
g_ShowRename := ShowRename;
Result := InvokeInterfaceElement('', AParent, APIDL, Attr, icContextMenu, '',
HWND(Parent), Pos, PidlCount);
RenameSelected := g_RenameSelected;
end;
{$ENDIF}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aist++
Гость





СообщениеДобавлено: Вт Июл 22 2003 15:16    Заголовок сообщения: Re: Кинь сюда часть исходника Ответить с цитатой

Ты DisplayContextMenu вызываешь два раза, но!..
При первом вызове у неё 6 параметров, а при втором - 5!
Почему то у меня такое чувство, что ты последнем случае пропустил параметр Items
Вернуться к началу
perceptrona



Зарегистрирован: 22.07.2003
Сообщения: 13
Откуда: Минск

СообщениеДобавлено: Вт Июл 22 2003 15:30    Заголовок сообщения: Re: Кинь сюда часть исходника Ответить с цитатой

Вызывать то я её вызываю 2 раза, но и функций DisplayContextMenu у меня 3:
вот прототипы:
function DisplayContextMenu(const Filename: string; Parent: DFS_HWND;
Pos: TPoint; ShowRename: boolean; var RenameSelected: boolean): boolean; overload;

function DisplayContextMenu(const Directory: string; Items: TStringList;
Parent: DFS_HWND; Pos: TPoint; ShowRename: boolean;
var RenameSelected: boolean): boolean; overload;

function DisplayContextMenu(AParent: IShellFolder; var APIDL: PItemIDList;
Attr: ULONG; Parent: DFS_HWND; Pos: TPoint; PidlCount: integer;
ShowRename: boolean; var RenameSelected: boolean): boolean; overload;

так что ничего я не пропустил.
Сравни у них число параметров. Компилятор сам знает какую из них вызвать...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
perceptrona



Зарегистрирован: 22.07.2003
Сообщения: 13
Откуда: Минск

СообщениеДобавлено: Вт Июл 22 2003 15:33    Заголовок сообщения: Re: Кинь сюда часть исходника Ответить с цитатой

они же все перегруженные (overload;)!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
perceptrona



Зарегистрирован: 22.07.2003
Сообщения: 13
Откуда: Минск

СообщениеДобавлено: Вт Июл 22 2003 15:33    Заголовок сообщения: Re: Кинь сюда часть исходника Ответить с цитатой

они же все перегруженные (overload;)!!!
Куда смотрит школа... ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
perceptrona



Зарегистрирован: 22.07.2003
Сообщения: 13
Откуда: Минск

СообщениеДобавлено: Вт Июл 22 2003 15:37    Заголовок сообщения: Re: Кинь сюда часть исходника Ответить с цитатой

Вообще-то это я пытаюсь компонент MiteC File Explorer под Delphi7 заточить.
и в описании к этим всем функциям DisplayContextMenu сказано:
//------------------------------------------------ ------------------------------
// DisplayContextMenu displays the right click menu for the given file or
// directory and processes the item selected, if any. Parent is the window
// handle for the owning window of any error messages that may need to be
// displayed by the system, MyForm.Handle is generally fine. Pos is the X, Y
// position to display the menu at given in screen (absolute) coordinates.
//-------------------------------------------- ----------------------------------
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...